ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ΅ Π±ΠΈΠ·Π½Π΅Ρ-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ Π²ΡΡΡΠΏΠ°Π΅Ρ Π² ΡΠ°Π·Ρ, ΠΊΠΎΠ³Π΄Π° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅. ΠΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ Π½ΠΎΠ²ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΈ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ ΡΡΠ΅Π΄Π½ΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ. ΠΠΎ Π±ΡΠ²Π°ΡΡ ΠΈ ΠΌΠ΅Π½Π΅Π΅ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΠ»ΡΡΠ°ΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ, ΡΡΠΎΠ±Ρ ΡΠ°Π·Π½ΡΠ΅ Π½ΠΎΠ΄Ρ Π·Π½Π°Π»ΠΈ Π΄ΡΡΠ³ ΠΎ Π΄ΡΡΠ³Π΅ ΠΈ Π°ΠΊΠΊΡΡΠ°ΡΠ½ΠΎ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ»ΠΈ ΡΠ°Π±ΠΎΡΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ.
Π’Π°ΠΊ ΡΠ΄Π°ΡΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ, ΡΡΠΎ erlang, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Π²ΡΠ±ΡΠ°Π»ΠΈ Π·Π° ΠΏΡΠΈΡΡΠ½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΈ Ρ
Π°ΠΉΠΏ Π²ΠΎΠΊΡΡΠ³, ΠΈΠΌΠ΅Π΅Ρ ΠΏΠ΅ΡΠ²ΠΎΠΊΠ»Π°ΡΡΠ½ΡΡ
ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ Π½Π° ΡΠ°Π·Π½ΡΡ ΡΠ·Π»Π°Ρ , Π° ΡΠ°ΠΊΠΆΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΡΠ»ΠΊΠ°ΠΌΠΈ ΠΈ ΠΌΠΎΠ½ΠΈΡΠΎΡΠ°ΠΌΠΈ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½Π° [β¦]
ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ Π²ΡΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅. Π Π°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ erlang Π±ΡΠ» ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½, ΠΊΠΎΠ³Π΄Π° Β«ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΒ» ΠΎΠ·Π½Π°ΡΠ°Π» ΡΠ°ΠΊΠΎΠΉ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΆΠ΅Π»Π΅Π·Π½ΡΠΉ ΡΡΠΈΠΊ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ·ΠΊΠΈ, Π° Β«Π΄ΠΎΠΊΠ΅ΡΒ» Π±ΡΠ» ΠΏΡΠΎΡΡΠΎ ΡΠΈΠ½ΠΎΠ½ΠΈΠΌΠΎΠΌ ΠΏΠΎΡΡΠΎΠ²ΠΎΠ³ΠΎ Π³ΡΡΠ·ΡΠΈΠΊΠ°. Π IP4 Π±ΡΠ»ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅Π·Π°Π½ΡΡΡΡ Π°Π΄ΡΠ΅ΡΠΎΠ², Π² ΡΠ΅ΡΠ΅Π²ΡΡ ΡΠ°Π·ΡΡΠ²Π°Ρ Β β Π±ΡΠ»ΠΈ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π²ΠΈΠ½ΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΡΠΈΠ΅ ΠΊΠ°Π±Π΅Π»Ρ ΠΊΡΡΡΡ, Π° ΡΡΠ΅Π΄Π½Π΅Π΅ Π²ΡΠ΅ΠΌΡ Π±Π΅Π·ΠΎΡΠΊΠ°Π·Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈΠ·ΠΌΠ΅ΡΡΠ»ΠΎΡΡ Π΄Π΅ΡΡΡΠΈΠ»Π΅ΡΠΈΡΠΌΠΈ.
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ Π²ΡΠ΅ Π½Π΅Π²ΠΎΠΎΠ±ΡΠ°Π·ΠΈΠΌΠΎ ΡΠ°ΠΌΠΎΠ΄ΠΎΡΡΠ°ΡΠΎΡΠ½Ρ, ΡΠΏΠ°ΠΊΠΎΠ²Π°Π½Ρ, ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ erlang Π² ΡΡΠ΅Π΄Π΅, Π³Π΄Π΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ IP-Π°Π΄ΡΠ΅ΡΠ° ΡΠ°Π·Π΄Π°ΡΡΡΡ ΠΏΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ Π²Π΅Π»ΠΈΠΊΠΎΠΉ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΡΡΠΈ, Π° ΡΠ·Π»Ρ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ ΠΈ ΠΈΡΡΠ΅Π·Π°ΡΡ ΠΏΠΎ ΠΆΠ΅Π»Π°Π½ΠΈΡ Π»Π΅Π²ΠΎΠΉ ΠΏΡΡΠΊΠΈ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠ°. Π§ΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π²ΠΎΡΠΎΡ Π° ΡΠ°Π±Π»ΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅, Π·Π°ΠΏΡΡΠΊΠ°ΡΡΠ΅ΠΌ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ erlang, Π΄Π»Ρ Π±ΠΎΡΡΠ±Ρ Ρ Π²ΡΠ°ΠΆΠ΄Π΅Π±Π½ΠΎΠΉ ΡΡΠ΅Π΄ΠΎΠΉ, ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠΎΠΌΠΎΡΡ.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: Ρ Π² ΠΊΡΡΡΠ΅ ΡΡΠΎ Π΅ΡΡΡ libcluster
Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ
Π§ΡΠΎ Π±ΡΠ»ΠΎ Π½ΡΠΆΠ½ΠΎ Π»ΠΈΡΠ½ΠΎ ΠΌΠ½Π΅, ΡΠ°ΠΊ ΡΡΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·ΡΠΌΠ΅Ρ Π½Π° ΡΠ΅Π±Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠΌ ΠΈ Π±ΡΠ΄Π΅Ρ ΠΎΠ±Π»Π°Π΄Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ:
- ΠΏΡΠΎΠ·ΡΠ°ΡΠ½Π°Ρ ΡΠ°Π±ΠΎΡΠ° ΠΊΠ°ΠΊ Ρ ΠΆΠ΅ΡΡΠΊΠΎ Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΡΠΏΠΈΡΠΊΠΎΠΌ ΡΠ·Π»ΠΎΠ², ΡΠ°ΠΊ ΠΈ Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ΅ΡΠ΅Π· ΡΠ΅ΡΠ²ΠΈΡΡ erlang;
- ΠΏΠΎΠ»Π½ΠΎΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ»Π±ΡΠΊ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠΈ (ΡΠ·Π΅Π» ΡΡΠ΄Π°, ΡΠ·Π΅Π» ΡΡΠ΄Π°, Π½Π΅ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΡ ΡΠ΅ΡΠΈ, ΡΠΏΠ»ΠΈΡΡ);
- ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Ρ Π΄Π»ΠΈΠ½Π½ΡΠΌΠΈ ΠΈ ΠΊΠΎΡΠΎΡΠΊΠΈΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, ΠΊΠ°ΠΊ ΠΈ Ρ
:nonode@nohost
; - ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π΄ΠΎΠΊΠ΅ΡΠ° ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ, Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΠΈΡΠ°ΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ½ΡΠΉ ΠΊΠΎΠ΄.
ΠΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π» ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ Π² :nonode@nohost
, ΠΈΠ»ΠΈ Π² ΠΈΡΠΊΡΡΡΠ²Π΅Π½Π½ΠΎ-ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΡΠ΅Π΄Π΅ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ test_cluster_task
docker-compose up --scale my_app=3
ΠΈ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΡΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° Π² Π΄ΠΎΠΊΠ΅ΡΠ΅ Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ
-Π»ΠΈΠ±ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΊΠΎΠ΄Π°. Π― ΡΠ°ΠΊΠΆΠ΅ Ρ
ΠΎΡΡ, ΡΡΠΎΠ±Ρ Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ mnesia
Β β ΠΊΠΎΠ³Π΄Π° ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ, Π·Π° ΠΊΡΠ»ΠΈΡΠ°ΠΌΠΈ ΠΏΠ΅ΡΠ΅ΡΡΡΠ°ΠΈΠ²Π°Π»ΠΈ ΠΊΠ»Π°ΡΡΠ΅Ρ Π½Π°ΠΆΠΈΠ²ΡΡ Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΈΠ½ΠΊΠ° ΡΠΎ ΡΡΠΎΡΠΎΠ½Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
Cloister Π½Π΅ Π·Π°Π΄ΡΠΌΡΠ²Π°Π»ΡΡ ΠΊΠ°ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΡΠΏΠΎΡΠΎΠ±Π½Π°Ρ Π½Π° Π²ΡΠ΅: ΠΎΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Π΄ΠΎ ΠΏΡΠΈΠ³ΠΎΡΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΊΠΎΡΠ΅. ΠΡΠΎ Π½Π΅ ΡΠ΅ΡΠ΅Π±ΡΡΠ½Π°Ρ ΠΏΡΠ»Ρ, ΡΡΡΠ΅ΠΌΡΡΠ°ΡΡΡ ΠΎΡ Π²Π°ΡΠΈΡΡ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΡΠ»ΡΡΠ°ΠΈ, ΠΈΠ»ΠΈ Π±ΡΡΡ Π°ΠΊΠ°Π΄Π΅ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ»Π½ΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π² ΡΠΎΠΌ ΡΠΌΡΡΠ»Π΅, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅ΠΎΡΠ΅ΡΠΈΠΊΠΈ ΠΎΡ CS Π²ΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡ Π² ΡΡΠΎΡ ΡΠ΅ΡΠΌΠΈΠ½. ΠΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡΠΈΠ·Π²Π°Π½Π° ΡΠ»ΡΠΆΠΈΡΡ ΠΎΡΠ΅Π½Ρ ΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅Π»ΠΈ, Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ²ΠΎΠΉ Π½Π΅ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΌ ΡΠ°Π±ΠΎΡ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎ. ΠΡΠ° ΡΠ΅Π»Ρ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π² ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠΈ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΡΡΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΠ΅Π΄ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΠ»Π°ΡΡΠΈΡΠ½ΠΎΠΉ ΡΡΠ΅Π΄ΠΎΠΉ, ΠΏΠΎΠ»Π½ΠΎΠΉ Π²ΡΠ°ΠΆΠ΄Π΅Π±Π½ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ².
ΠΡΠ±ΡΠ°Π½Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄
Cloister ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΊΠ°ΠΊ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ
ΠΎΡΡ ΠΎΠΏΡΡΠ½ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΌΠΎΠ³ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎ ΡΠ±ΠΎΡΠΊΠΎΠΉ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ (assembly and maintainance) ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Π²ΡΡΡΠ½ΡΡ, Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π·Π°ΠΏΡΡΡΠΈΠ² Cloister.Manager
Π² Π΄Π΅ΡΠ΅Π²Π΅ ΡΡΠΏΠ΅ΡΠ²ΠΈΠ·ΠΎΡΠΎΠ² ΡΠ΅Π»Π΅Π²ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΡΡ Π½Π° config
, ΠΎΡΠΊΡΠ΄Π° Π²ΡΡΠΈΡΡΠ²Π°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
config :cloister,
otp_app: :my_app,
sentry: :"cloister.local", # or ~w|n1@foo n2@bar|a
consensus: 3, # number of nodes to consider
# the cluster is up
listener: MyApp.Listener # listener to be called when
# the ring has changed
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π²ΡΡΠ΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π΄ΠΎΡΠ»ΠΎΠ²Π½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅: Cloister ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ OTP ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ :my_app
, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ erlang service discovery Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ·Π»ΠΎΠ², ΡΡΠ΅Ρ
ΠΏΠΎ ΠΌΠ΅Π½ΡΡΠ΅ΠΉ ΠΌΠ΅ΡΠ΅, ΠΈ MyApp.Listener
ΠΌΠΎΠ΄ΡΠ»Ρ (ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΡΡΡΠΈΠΉ @behaviour Cloister.Listener
ΠΡΠΈ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Cloister Π±ΡΠ΄Π΅Ρ MyApp.Listener.on_state_change/2
%Cloister.Monitor{status: :up}
, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ: Β«Π°Π»Ρ, ΠΊΠ»Π°ΡΡΠ΅Ρ ΡΠΎΠ±ΡΠ°Π½Β».
Π Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° consensus: 3
ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ, ΡΡΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ·Π»ΠΎΠ², ΠΎΠ±ΡΠ°ΡΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΡΡ ΡΠ΅ΡΠ΅Π· status: :rehashing
β status: :up
Π½Π° Π»ΡΠ±ΠΎΠΌ Π½ΠΎΠ²ΠΎΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΠΎΠΌ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ ΡΠ·Π»Π΅.
ΠΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ Π²ΡΡΡΠ°Π²ΠΈΡΡ consensus: 1
ΠΈ Cloister ΡΠ°Π΄ΠΎΡΡΠ½ΠΎ ΠΏΡΠΎΡΠΊΠΎΡΠΈΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΡΠ±ΠΎΡΠΊΠΈ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°, ΡΠ²ΠΈΠ΄Π΅Π² :nonode@nohost
, ΠΈΠ»ΠΈ :node@host
, ΠΈΠ»ΠΈ :[email protected]
Β β Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±ΡΠ» Π½Π°ΡΡΡΠΎΠ΅Π½ ΡΠ·Π΅Π» (:none | :shortnames | :longnames
).
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ
Π Π°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π΅ Π² Π²Π°ΠΊΡΡΠΌΠ΅ ΠΎΠ±ΡΡΠ½ΠΎ Π²ΠΊΠ»ΡΡΠ°ΡΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΆΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΡΠΈΠΏΠ° mnesia
. ΠΠ°ΠΌ Π»Π΅Π³ΠΊΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΈΡ
ΠΏΠ΅ΡΠ΅ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΈΠ· ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° on_state_change/2
. ΠΠΎΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅Π½Π°ΡΡΡΠΎΠΈΡΡ mnesia
Π½Π° Π»Π΅ΡΡ Π²
ΠΠ»Π°Π²Π½ΡΠΌ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Cloister ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΠΎΠ½ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎ ΠΏΠ΅ΡΠ΅ΡΡΡΠΎΠΉΠΊΠ΅ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° ΠΏΠΎΡΠ»Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡΠΎΠΌ. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΠΎ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π² ΡΠΆΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΠΎΠΉ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΡΠ΅Π΄Π΅, ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΌΠΈ ΡΠ·Π»Π°ΠΌΠΈ, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, Π·Π½Π°Π΅ΠΌ Π»ΠΈ ΠΌΡ IP-Π°Π΄ΡΠ΅ΡΠ° ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΈΠΌΠ΅Π½Π° ΡΠ·Π»ΠΎΠ² Π·Π°ΡΠ°Π½Π΅Π΅, ΠΈΠ»ΠΈ ΠΎΠ½ΠΈ Π±ΡΠ»ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ Π½Π°Π·Π½Π°ΡΠ΅Π½Ρ/ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ. ΠΡΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠΎΠ²Π½ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ
ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ
Π½Π°ΡΡΡΠΎΠ΅ΠΊ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π΄ΠΎΠΊΠ΅ΡΠ° ΠΈ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΡΠ°Π·Π½ΠΈΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π·Π°ΠΏΡΡΠΊΠΎΠΌ Π² ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΡΠ΅Π΄Π΅ ΠΈΠ»ΠΈ Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ Π½Π° :nonode@nohost
. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΏΡΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΈΡΠ°ΡΡ Π²
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ ΡΠ»ΠΎΠΆΠ½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ΡΠ΅ΡΠ΅Π· ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ MyApp.Listener
, Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠΎΠ³ΡΠ°Π½ΠΈΡΠ½ΡΠ΅ ΡΠ»ΡΡΠ°ΠΈ, ΠΊΠΎΠ³Π΄Π° ΡΡΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ ΠΏΡΠ΅Π΄Π²Π·ΡΡΡΠΉ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ ΠΊ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΎΠΊΠ°ΠΆΡΡΡΡ ΠΊΡΠ°Π΅ΡΠ³ΠΎΠ»ΡΠ½ΡΠΌ ΠΊΠ°ΠΌΠ½Π΅ΠΌ Π½Π° ΠΏΡΡΠΈ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ. ΠΡΠΎ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ, ΠΏΡΠΎΡΡΠΎ Π²ΠΎΠ·ΡΠΌΠΈΡΠ΅ Π²ΡΡΠ΅ΡΠΏΠΎΠΌΡΠ½ΡΡΡΠΉ libcluster
, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΌ, ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΠΉΡΠ΅ ΠΊΠ»Π°ΡΡΠ΅Ρ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ. Π¦Π΅Π»Ρ ΡΡΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΊΠΎΠ΄Π° ΡΠΎΡΡΠΎΠΈΡ Π½Π΅ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΎΡ
Π²Π°ΡΠΈΡΡ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ, Π° Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠΉ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π±Π΅Π· Π½Π΅Π½ΡΠΆΠ½ΠΎΠΉ Π±ΠΎΠ»ΠΈ ΠΈ Π³ΡΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΡ
ΠΊΠΎΠΏΠΈ-ΠΏΠ°ΡΡΠΎΠ².
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: Π½Π° ΡΡΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ Π² ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π΅ Π±ΡΠ»Π° ΡΡΠ°Π·Π° Β«Happy clustering!Β», ΠΈ Π―Π½Π΄Π΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΌ Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠΆΡ (Π½Π΅ ΡΠ°ΠΌΠΎΠΌΡ ΠΆΠ΅ ΠΏΠΎ ΡΠ»ΠΎΠ²Π°ΡΡΠΌ Π»Π°Π·ΠΈΡΡ), ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΠ» ΠΌΠ½Π΅ Π²Π°ΡΠΈΠ°Π½Ρ Β«Π‘ΡΠ°ΡΡΠ»ΠΈΠ²ΠΎΠ³ΠΎ ΡΠΊΠΎΠΏΠ»Π΅Π½ΠΈΡ!Β». ΠΡΡΡΠ΅Π³ΠΎ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π°, ΠΏΠΎΠΆΠ°Π»ΡΠΉ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π² ΡΠ²Π΅ΡΠ΅ ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π³Π΅ΠΎΠΏΠΎΠ»ΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈΒ β ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com