ΠΠΎΡΡΠΈ Π²ΡΡΠΊΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎ Π±ΠΈΠ·Π½Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°Π½ΠΎ ΠΈΠ»ΠΈ ΠΊΡΡΠ½ΠΎ Π½Π°Π²Π»ΠΈΠ·Π° Π²ΡΠ² ΡΠ°Π·Π°, Π² ΠΊΠΎΡΡΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Ρ ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»Π½ΠΎ ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅. Π ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΡΡΠ°ΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΡΠΎ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ Π½ΠΎΠ² Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΈ Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈΡΠ΅ ΡΡΠ΅Π΄Π½ΠΎΡΠΎ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅. ΠΠΎ ΠΈΠΌΠ° ΠΈ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΡΡΠΈΠ²ΠΈΠ°Π»Π½ΠΈ ΡΠ»ΡΡΠ°ΠΈ, Π² ΠΊΠΎΠΈΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π³Π°ΡΠ°Π½ΡΠΈΡΠ°ΠΌΠ΅, ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈΡΠ΅ Π²ΡΠ·Π»ΠΈ Π·Π½Π°ΡΡ Π΅Π΄ΠΈΠ½ Π·Π° Π΄ΡΡΠ³ ΠΈ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»Π½ΠΎ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»ΡΡ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ.
ΠΠΊΠ°Π·Π° ΡΠ΅ ΡΠ°ΠΊΡΠ² ΠΊΡΡΠΌΠ΅Ρ, ΡΠ΅ Π΅ΡΠ»Π°Π½Π³, ΠΊΠΎΠΉΡΠΎ ΠΈΠ·Π±ΡΠ°Ρ
ΠΌΠ΅ Π·Π°ΡΠ°Π΄ΠΈ ΠΏΡΠΈΡΡΠ½ΠΈΡ ΠΌΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΈ ΡΡΠΌΠ° ΠΎΠΊΠΎΠ»ΠΎ Π½Π΅Π³ΠΎ, ΠΈΠΌΠ° ΠΏΡΡΠ²ΠΎΠΊΠ»Π°ΡΠ΅Π½
ΠΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΡΠ΅ΡΠΈ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π²ΡΠ·Π»ΠΈ, ΠΊΠ°ΠΊΡΠΎ ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΡΠ·ΠΊΠΈ ΠΈ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈ, Π΅ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎ [β¦]
ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° Π²ΡΠΈΡΠΊΠΎ Π΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-ΡΠ»ΠΎΠΆΠ½ΠΎ. Π Π°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π΅ΡΠ»Π°Π½Π³ Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ΅Π½, ΠΊΠΎΠ³Π°ΡΠΎ βΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρβ ΠΎΠ·Π½Π°ΡΠ°Π²Π° Π³ΠΎΠ»ΡΠΌΠ° ΠΆΠ΅Π»ΡΠ·Π½Π° ΠΊΡΡΠΈΡ Π·Π° ΠΊΠΎΡΠ°Π±ΠΎΠΏΠ»Π°Π²Π°Π½Π΅, Π° βΠ΄ΠΎΠΊΠ΅Ρβ Π΅ ΠΏΡΠΎΡΡΠΎ ΡΠΈΠ½ΠΎΠ½ΠΈΠΌ Π½Π° ΠΊΡΠ°ΠΉΠ±ΡΠ΅ΠΆΠ½ΠΈΠΊ. IN IP4 ΠΈΠΌΠ°ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅Π·Π°Π΅ΡΠΈ Π°Π΄ΡΠ΅ΡΠΈ, ΠΏΡΠ΅ΠΊΡΡΠ²Π°Π½ΠΈΡΡΠ° Π² ΠΌΡΠ΅ΠΆΠ°ΡΠ° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π±ΡΡ Π° ΠΏΡΠΈΡΠΈΠ½Π΅Π½ΠΈ ΠΎΡ ΠΏΠ»ΡΡ ΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ Π΄ΡΠ²ΡΠ΅Ρ Π° ΠΊΠ°Π±Π΅Π»Π°, Π° ΡΡΠ΅Π΄Π½ΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ° Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠ΅ ΠΈΠ·ΠΌΠ΅ΡΠ²Π°ΡΠ΅ Π² Π΄Π΅ΡΠ΅ΡΠΈΠ»Π΅ΡΠΈΡ.
Π‘Π΅Π³Π° Π²ΡΠΈΡΠΊΠΈ Π½ΠΈΠ΅ ΡΠΌΠ΅ Π½Π΅Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΡΠ°ΠΌΠΎΠ΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΈ, ΠΎΠΏΠ°ΠΊΠΎΠ²Π°Π½ΠΈ ΠΈ ΡΠ°Π±ΠΎΡΠ΅ΡΠΈ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ Π΅ΡΠ»Π°Π½Π³ Π² ΡΡΠ΅Π΄Π°, Π² ΠΊΠΎΡΡΠΎ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΈΡΠ΅ IP Π°Π΄ΡΠ΅ΡΠΈ ΡΠ΅ ΡΠ°Π·Π΄Π°Π²Π°Ρ Π½Π° ΠΏΡΠΈΠ½ΡΠΈΠΏΠ° Π½Π° Π³ΠΎΠ»ΡΠΌΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΎΡΡ ΠΈ Π²ΡΠ·Π»ΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΏΠΎΡΠ²ΡΠ²Π°Ρ ΠΈ ΠΈΠ·ΡΠ΅Π·Π²Π°Ρ ΠΏΠΎ ΠΏΡΠΈΡΡΠ²ΠΊΠ° Π½Π° Π»ΡΠ²Π°ΡΠ° ΠΏΠ΅ΡΠ° Π½Π° ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠ°. ΠΠ° Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π΅ΡΠ΅ ΠΊΡΠΏΠΈΡΠ° ΡΠ°Π±Π»ΠΎΠ½Π΅Π½ ΠΊΠΎΠ΄ Π²ΡΠ² Π²ΡΠ΅ΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π΅ΡΠ»Π°Π½Π³, Π·Π° Π±ΠΎΡΠ±Π° Ρ Π²ΡΠ°ΠΆΠ΄Π΅Π±Π½Π°ΡΠ° ΡΡΠ΅Π΄Π° Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° ΠΏΠΎΠΌΠΎΡ.
ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΠ°ΡΡΠ½ΠΎ ΡΡΠΌ, ΡΠ΅ ΠΈΠΌΠ° libcluster
ΠΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡ
Π’ΠΎΠ²Π°, ΠΎΡ ΠΊΠΎΠ΅ΡΠΎ Π°Π· Π»ΠΈΡΠ½ΠΎ ΠΈΠΌΠ°Ρ Π½ΡΠΆΠ΄Π°, Π±Π΅ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΊΠΎΡΡΠΎ Π΄Π° ΠΏΠΎΠ΅ΠΌΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ° ΠΈ Π΄Π° ΠΈΠΌΠ° ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π°:
- ΠΏΡΠΎΠ·ΡΠ°ΡΠ½Π° ΡΠ°Π±ΠΎΡΠ° ΠΊΠ°ΠΊΡΠΎ Ρ ΡΠ²ΡΡΠ΄ΠΎ ΠΊΠΎΠ΄ΠΈΡΠ°Π½ ΡΠΏΠΈΡΡΠΊ ΠΎΡ Π²ΡΠ·Π»ΠΈ, ΡΠ°ΠΊΠ° ΠΈ Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΎ ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ ΡΡΠ΅Π· ΡΡΠ»ΡΠ³ΠΈ Π΅ΡΠ»Π°Π½Π³;
- Π½Π°ΠΏΡΠ»Π½ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π·Π° Π²ΡΡΠΊΠ° ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡΡΠ° (Π²ΡΠ·Π΅Π» ΡΠ°ΠΌ, Π²ΡΠ·Π΅Π» ΡΡΠΊ, Π½Π΅ΡΡΠ°Π±ΠΈΠ»Π½ΠΎΡΡ Π½Π° ΠΌΡΠ΅ΠΆΠ°ΡΠ°, ΡΠ°Π·Π΄Π΅Π»ΡΠ½Π΅);
- ΠΏΡΠΎΠ·ΡΠ°ΡΠ΅Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠ»ΡΡΡΠ΅Ρ Ρ Π΄ΡΠ»Π³ΠΈ ΠΈ ΠΊΡΠ°ΡΠΊΠΈ ΠΈΠΌΠ΅Π½Π°, ΠΊΠ°ΠΊΡΠΎ ΠΏΡΠΈ
:nonode@nohost
; - Docker ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° ΠΎΡ ΠΊΡΡΠΈΡΡΠ°, Π±Π΅Π· Π΄Π° ΡΠ΅ Π½Π°Π»Π°Π³Π° Π΄Π° ΠΏΠΈΡΠ΅ΡΠ΅ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ΅Π½ ΠΊΠΎΠ΄.
ΠΠΎΡΠ»Π΅Π΄Π½ΠΎΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΡΠ»Π΅Π΄ ΠΊΠ°ΡΠΎ ΡΠ΅ΡΡΠ²Π°Ρ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π»ΠΎΠΊΠ°Π»Π½ΠΎ Π² :nonode@nohost
, ΠΈΠ»ΠΈ Π² ΠΈΠ·ΠΊΡΡΡΠ²Π΅Π½ΠΎ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΡΡΠ΅Π΄Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ° test_cluster_task
docker-compose up --scale my_app=3
ΠΈ Π²ΠΈΠΆΡΠ΅ ΠΊΠ°ΠΊ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΡΡΠΈ Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° Π² Π΄ΠΎΠΊΠ΅Ρ Π±Π΅Π· Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ΄Π°. ΠΡΠΊΠ°ΠΌ ΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΊΠ°ΡΠΎ mnesia
- ΠΊΠΎΠ³Π°ΡΠΎ ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡΡΠ° ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ, Π·Π°Π΄ ΠΊΡΠ»ΠΈΡΠΈΡΠ΅ ΡΠ΅ Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²ΡΠ²Π°Ρ ΠΊΠ»ΡΡΡΠ΅ΡΠ° Π½Π° ΠΆΠΈΠ²ΠΎ Π±Π΅Π· Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π΅Π½ ΡΠ΄Π°Ρ ΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ.
ΠΌΠ°Π½Π°ΡΡΠΈΡ Π½Π΅ Π΅ Π±ΠΈΠ»Π° ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° Π΄Π° Π±ΡΠ΄Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΡΠΏΠΎΡΠΎΠ±Π½Π° Π½Π° Π²ΡΠΈΡΠΊΠΎ - ΠΎΡ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΊΠ»ΡΡΡΠ΅Ρ Π΄ΠΎ ΠΏΡΠΈΠ³ΠΎΡΠ²ΡΠ½Π΅ Π½Π° ΠΊΠ°ΡΠ΅. Π’ΠΎΠ²Π° Π½Π΅ Π΅ ΡΡΠ΅Π±ΡΡΠ΅Π½ ΠΊΡΡΡΡΠΌ, ΠΊΠΎΠΉΡΠΎ ΠΈΠΌΠ° Π·Π° ΡΠ΅Π» Π΄Π° ΠΏΠΎΠΊΡΠΈΠ΅ Π²ΡΠΈΡΠΊΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΈ ΡΠ»ΡΡΠ°ΠΈ ΠΈΠ»ΠΈ Π΄Π° Π±ΡΠ΄Π΅ Π°ΠΊΠ°Π΄Π΅ΠΌΠΈΡΠ½ΠΎ ΠΏΡΠ»Π½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π² ΡΠΌΠΈΡΡΠ»Π°, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠΈΡΠ΅ ΠΎΡ CS ΠΏΠΎΡΡΠ°Π²Π΅Π½ΠΈ Π² ΡΠΎΠ·ΠΈ ΡΠ΅ΡΠΌΠΈΠ½. Π’Π°Π·ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ°Π½Π° Π΄Π° ΡΠ»ΡΠΆΠΈ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠ½Π° ΡΠ΅Π», Π½ΠΎ Π²ΡΡΡΠΈ ΡΠ²ΠΎΡΡΠ° Π½Π΅ ΡΠ²ΡΡΠ΄Π΅ Π³ΠΎΠ»ΡΠΌΠ° ΡΠ°Π±ΠΎΡΠ° ΠΏΠ΅ΡΡΠ΅ΠΊΡΠ½ΠΎ. Π’Π°Π·ΠΈ ΡΠ΅Π» ΡΠ΅ Π±ΡΠ΄Π΅ Π΄Π° ΡΠ΅ ΠΎΡΠΈΠ³ΡΡΠΈ ΠΏΡΠ»Π½Π° ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠ΅ΡΡΠ½Π°ΡΠ° ΡΡΠ΅Π΄Π° Π·Π° ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ ΠΈ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° Π΅Π»Π°ΡΡΠΈΡΠ½Π° ΡΡΠ΅Π΄Π°, ΠΏΡΠ»Π½Π° Ρ Π²ΡΠ°ΠΆΠ΄Π΅Π±Π½ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ.
ΠΠ·Π±ΡΠ°Π½ ΠΏΠΎΠ΄Ρ ΠΎΠ΄
ΠΌΠ°Π½Π°ΡΡΠΈΡ Π΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΠΊΠ°ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ Π½Π°ΠΏΡΠ΅Π΄Π½Π°Π»ΠΈΡΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ°Π±ΠΎΡΡΡ Ρ Π°ΡΠ΅ΠΌΠ±Π»ΠΈΡΠ°Π½Π΅ΡΠΎ ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ° ΡΡΡΠ½ΠΎ ΡΡΠ΅Π· Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ 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
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ ΠΏΠΎ-Π³ΠΎΡΠ΅ ΠΎΠ·Π½Π°ΡΠ°Π²Π°Ρ Π±ΡΠΊΠ²Π°Π»Π½ΠΎ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ: ΠΌΠ°Π½Π°ΡΡΠΈΡ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π·Π° OTP ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ :my_app
, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ Π½Π° ΡΡΠ»ΡΠ³Π° erlang Π·Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Π½Π° Π²ΡΠ·Π»ΠΈ, Π½Π°ΠΉ-ΠΌΠ°Π»ΠΊΠΎ ΡΡΠΈ, ΠΈ MyApp.Listener
ΠΌΠΎΠ΄ΡΠ» (Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ @behaviour Cloister.Listener
Π‘ ΡΠ°Π·ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΌΠ°Π½Π°ΡΡΠΈΡ ΡΠ΅ MyApp.Listener.on_state_change/2
%Cloister.Monitor{status: :up}
, ΠΊΠΎΠ΅ΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π²Π°: βΠΠ΄ΡΠ°Π²Π΅ΠΉΡΠ΅, ΠΊΠ»ΡΡΡΠ΅ΡΡΡ Π΅ ΡΠ³Π»ΠΎΠ±Π΅Π½.β
Π ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΡΠ»ΡΡΠ°ΠΈ ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡ consensus: 3
Π΅ ΠΎΠΏΡΠΈΠΌΠ°Π»Π½ΠΎ, Π·Π°ΡΠΎΡΠΎ Π΄ΠΎΡΠΈ Π΄Π° ΠΎΡΠ°ΠΊΠ²Π°ΠΌΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ Π²ΡΠ·Π»ΠΈ Π΄Π° ΡΠ΅ ΡΠ²ΡΡΠΆΠ°Ρ, ΠΎΠ±ΡΠ°ΡΠ½ΠΎΡΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ ΡΠ΅ ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ status: :rehashing
β status: :up
Π½Π° Π²ΡΠ΅ΠΊΠΈ Π½ΠΎΠ²ΠΎΠ΄ΠΎΠ±Π°Π²Π΅Π½ ΠΈΠ»ΠΈ ΠΏΡΠ΅ΠΌΠ°Ρ
Π½Π°Ρ Π²ΡΠ·Π΅Π».
ΠΠΎΠ³Π°ΡΠΎ ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ Π² ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°, ΠΏΡΠΎΡΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ consensus: 1
ΠΈ ΠΌΠ°Π½Π°ΡΡΠΈΡ Ρ ΡΠ°Π΄ΠΎΡΡ ΡΠ΅ ΠΏΡΠΎΠΏΡΡΠ½Π΅ ΡΠ°ΠΊΠ°Π½Π΅ΡΠΎ Π·Π° ΡΠ³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ°, ΠΊΠΎΠ³Π°ΡΠΎ Π²ΠΈΠ΄ΠΈ :nonode@nohost
ΠΠ»ΠΈ :node@host
ΠΠ»ΠΈ :[email protected]
- Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΡΠΎΠ²Π° ΠΊΠ°ΠΊ Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ Π²ΡΠ·Π΅Π»ΡΡ (:none | :shortnames | :longnames
).
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
Π Π°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠ° Π²ΡΠ² Π²Π°ΠΊΡΡΠΌ, ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π²ΠΊΠ»ΡΡΠ²Π°Ρ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΠΊΠ°ΡΠΎ Π½Π°ΠΏΡ mnesia
. ΠΠ° Π½Π°Ρ Π΅ Π»Π΅ΡΠ½ΠΎ Π΄Π° ΡΠ΅ ΡΠΏΡΠ°Π²ΠΈΠΌ Ρ ΡΡΡ
Π½ΠΎΡΠΎ ΠΏΡΠ΅ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ ΠΎΡ ΡΡΡΠΎΡΠΎ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ on_state_change/2
. ΠΡΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠ°ΠΊ Π΄Π° ΠΏΡΠ΅ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠ΅ mnesia
Π² Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅
ΠΡΠ½ΠΎΠ²Π½ΠΎΡΠΎ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²ΠΎ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ ΠΌΠ°Π½Π°ΡΡΠΈΡ Π΅, ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° Π²ΡΠΈΡΠΊΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π·Π° Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ° ΡΠ»Π΅Π΄ ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡΡΠ° ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠ°ΠΊΠ°. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΏΡΠΎΡΡΠΎ ΡΠ°Π±ΠΎΡΠΈ Π²ΡΠ² Π²Π΅ΡΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½Π° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΡΡΠ΅Π΄Π°, ΠΊΠ°ΡΠΎ Π²ΡΠΈΡΠΊΠΈ Π²ΡΠ·Π»ΠΈ ΡΠ° ΡΠ²ΡΡΠ·Π°Π½ΠΈ, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ Π΄Π°Π»ΠΈ Π·Π½Π°Π΅ΠΌ IP Π°Π΄ΡΠ΅ΡΠΈΡΠ΅ ΠΈ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ ΠΈΠΌΠ΅Π½Π°ΡΠ° Π½Π° Π²ΡΠ·Π»ΠΈΡΠ΅ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ, ΠΈΠ»ΠΈ ΡΠ΅ ΡΠ° Π±ΠΈΠ»ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΎ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈ/ΠΏΡΠΎΠΌΠ΅Π½Π΅Π½ΠΈ. Π’ΠΎΠ²Π° Π½Π΅ ΠΈΠ·ΠΈΡΠΊΠ²Π° Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π΄ΠΎΠΊΠ΅ΡΠΈ ΠΈ ΠΎΡ Π³Π»Π΅Π΄Π½Π° ΡΠΎΡΠΊΠ° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½ΡΠΌΠ° ΡΠ°Π·Π»ΠΈΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π±ΠΎΡΠ° Π² ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΡΡΠ΅Π΄Π° ΠΈΠ»ΠΈ ΡΠ°Π±ΠΎΡΠ° Π² Π»ΠΎΠΊΠ°Π»Π½Π°. :nonode@nohost
. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ Π·Π° ΡΠΎΠ²Π° Π²
ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΎΡΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡΡΠ° Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠ΅Π· ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΎ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ MyApp.Listener
, Π²ΠΈΠ½Π°Π³ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° ΠΊΡΠ°ΠΉΠ½ΠΈ ΡΠ»ΡΡΠ°ΠΈ, ΠΏΡΠΈ ΠΊΠΎΠΈΡΠΎ ΡΠ΅Π·ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΈ ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΡ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΡΠ΅ ΠΎΠΊΠ°Π·Π²Π°Ρ ΠΊΡΠ°ΠΉΡΠ³ΡΠ»Π½ΠΈΡΠ΅ ΠΊΠ°ΠΌΡΠ½ΠΈ Π½Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ΡΠΎ. ΠΡΠΈΡΠΊΠΎ Π΅ Π½Π°ΡΠ΅Π΄, ΠΏΡΠΎΡΡΠΎ Π²Π·Π΅ΠΌΠ΅ΡΠ΅ Π³ΠΎΡΠ½ΠΎΡΠΎ libcluster
, ΠΊΠΎΠ΅ΡΠΎ Π΅ Ρ ΠΏΠΎ-ΠΎΠ±ΡΠΎ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΈΠ»ΠΈ Π΄ΠΎΡΠΈ Π΄Π° ΡΠΏΡΠ°Π²Π»ΡΠ²Π°ΡΠ΅ ΡΠ°ΠΌΠΈ ΠΊΠ»ΡΡΡΠ΅ΡΠ° Π½Π° Π½ΠΈΡΠΊΠΎ Π½ΠΈΠ²ΠΎ. Π¦Π΅Π»ΡΠ° Π½Π° ΡΠ°Π·ΠΈ ΠΊΠΎΠ΄ΠΎΠ²Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π½Π΅ Π΅ Π΄Π° ΠΏΠΎΠΊΡΠΈΠ΅ Π²ΡΠ΅ΠΊΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ΅Π½ ΡΡΠ΅Π½Π°ΡΠΈΠΉ, Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π½Π°ΠΉ-ΡΠ΅ΡΡΠΎ ΡΡΠ΅ΡΠ°Π½ΠΈΡ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π±Π΅Π· Π½Π΅Π½ΡΠΆΠ½Π° Π±ΠΎΠ»ΠΊΠ° ΠΈ ΡΡΠΎΠΌΠ°Π²ΠΎ ΠΊΠΎΠΏΠΈΡΠ°Π½Π΅ ΠΈ ΠΏΠΎΡΡΠ°Π²ΡΠ½Π΅.
ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ°: Π½Π° ΡΠΎΠ·ΠΈ Π΅ΡΠ°ΠΏ Π² ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π° ΠΈΠΌΠ°ΡΠ΅ ΡΡΠ°Π·Π°ΡΠ° "Happy clustering!", Π° Yandex, Ρ ΠΊΠΎΠΉΡΠΎ ΠΏΡΠ΅Π²Π΅ΠΆΠ΄Π°ΠΌ (Π½Π΅ Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π° ΠΌΠΈΠ½Π°Π²Π°ΠΌ ΠΏΡΠ΅Π· ΡΠ΅ΡΠ½ΠΈΡΠΈ), ΠΌΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈ ΠΎΠΏΡΠΈΡΡΠ° "Happy clustering!" ΠΠΎΠΆΠ΅ Π±ΠΈ Π΅ Π½Π΅Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΡΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ ΠΏΠΎ-Π΄ΠΎΠ±ΡΡ ΠΏΡΠ΅Π²ΠΎΠ΄, ΠΎΡΠΎΠ±Π΅Π½ΠΎ Π² ΡΠ²Π΅ΡΠ»ΠΈΠ½Π°ΡΠ° Π½Π° Π½Π°ΡΡΠΎΡΡΠ°ΡΠ° Π³Π΅ΠΎΠΏΠΎΠ»ΠΈΡΠΈΡΠ΅ΡΠΊΠ° ΡΠΈΡΡΠ°ΡΠΈΡ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com