Cloister β†’ простo ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° кластСра OTP

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ всяко ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ бизнСс ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π½ΠΎ ΠΈΠ»ΠΈ късно ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π° Π² Π΅Ρ‚Π°ΠΏ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ…ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»Π½ΠΎ ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅. Π’ ΠΌΠ½ΠΎΠ³ΠΎ случаи просто ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° стартирамС Π½ΠΎΠ² инстанс ΠΈ Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈΠΌ срСдното Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅. Но ΠΈΠΌΠ° ΠΈ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»Π½ΠΈ случаи, ΠΊΠΎΠ³Π°Ρ‚ΠΎ трябва Π΄Π° осигурим, Ρ‡Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ Π½ΠΎΠ΄ΠΈ знаят Π΅Π΄Π½Π° Π·Π° Π΄Ρ€ΡƒΠ³Π° ΠΈ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π½ΠΎ разпрСдСлят Ρ€Π°Π±ΠΎΡ‚Π½ΠΎΡ‚ΠΎ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅.

Cloister β†’ простo ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° кластСра OTP

Π’Π°ΠΊΠ° сС случи, Ρ‡Π΅ erlang, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·Π±Ρ€Π°Ρ…ΠΌΠ΅ Π·Π°Ρ€Π°Π΄ΠΈ приятния синтаксис ΠΈ ΡˆΡƒΠΌΠ° ΠΎΠΊΠΎΠ»ΠΎ Π½Π΅Π³ΠΎ, ΠΈΠΌΠ° ΠΏΡŠΡ€Π²ΠΎΠΊΠ»Π°ΡΠ½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ систСми. Π’ тСорията Ρ‚ΠΎΠ²Π° Π·Π²ΡƒΡ‡ΠΈ напълно Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»Π½ΠΎ:

ΠŸΡ€Π΅Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ процСси Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ възли, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‚ΠΊΠΈ ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈ, Π΅ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ […]

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° всичко Π΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-слоТно. Π Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ erlang бСшС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π΅Π½, ΠΊΠΎΠ³Π°Ρ‚ΠΎ "ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€" ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°ΡˆΠ΅ голям ΠΆΠ΅Π»Π΅Π·Π΅Π½ ящик Π·Π° ΠΏΡ€Π΅Π²ΠΎΠ·, Π° "Π΄ΠΎΠΊΠ΅Ρ€" бСшС просто синоним Π½Π° ΠΏΠΎΡ€Ρ‚ΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΊ. Π’ IP4 имашС ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅Π·Π°Π΅Ρ‚ΠΈ адрСси, Π° Π·Π° ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈΡ‚Π΅ Ρ€Π°Π·ΠΊΡŠΡΠ²Π°Π½ΠΈΡ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ бяха Π²ΠΈΠ½ΠΎΠ²Π½ΠΈ Π³Ρ€ΠΈΠ·Π°Ρ‡ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΡ€Π΅Π³Ρ€ΠΈΠ·Π²Π°Ρ…Π° ΠΊΠ°Π±Π΅Π»ΠΈΡ‚Π΅, Π° срСдното Π²Ρ€Π΅ΠΌΠ΅ Π·Π° Π±Π΅Π·ΠΎΡ‚ΠΊΠ°Π·Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° производствСна систСма сС ΠΈΠ·ΠΌΠ΅Ρ€Π²Π°ΡˆΠ΅ Π² дСсСтилСтия.

Π‘Π΅Π³Π° всички Π½ΠΈΠ΅ смС Π½Π΅ΠΈΠΌΠΎΠ²Π΅Ρ€Π½ΠΎ ΡΠ°ΠΌΠΎΠ΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΈ, ΠΎΠΏΠ°ΠΊΠΎΠ²Π°Π½ΠΈ ΠΈ стартирамС Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ erlang Π² срСда, Π² която Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΈΡ‚Π΅ IP адрСси сС Ρ€Π°Π·Π΄Π°Π²Π°Ρ‚ Π½Π° случаСн ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, Π° Π²ΡŠΠ·Π»ΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС появяват ΠΈ ΠΈΠ·Ρ‡Π΅Π·Π²Π°Ρ‚ ΠΏΠΎ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° лявата ΠΏΠ΅Ρ‚Π° Π½Π° планиращия. Π—Π° Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π΅ΠΌ ΠΈΠ·ΠΎΠ±ΠΈΠ»ΠΈΠ΅ ΠΎΡ‚ шаблонСн ΠΊΠΎΠ΄ Π² всСки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΊΠΎΠΉΡ‚ΠΎ стартира Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ erlang, Π·Π° Π΄Π° сС справим с Π²Ρ€Π°ΠΆΠ΄Π΅Π±Π½Π°Ρ‚Π° срСда, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° Π΅ ΠΏΠΎΠΌΠΎΡ‰.

Π—Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°: Π·Π½Π°ΠΌ, Ρ‡Π΅ ΠΈΠΌΠ° libcluster. Π’ΠΎΠΉ Π΅ наистина страхотСн, ΠΈΠΌΠ° ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ хиляда Π·Π²Π΅Π·Π΄ΠΈ, Π°Π²Ρ‚ΠΎΡ€ΡŠΡ‚ Π΅ извСстСн Π² общността, ΠΈ всичко Ρ‚Π°ΠΊΠΎΠ²Π°. Ако ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π½ΠΈΡ‚Π΅ ΠΎΡ‚ Ρ‚ΠΎΠ·ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π·Π° създаванС ΠΈ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° кластСр са Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΈ Π·Π° вас - Ρ€Π°Π΄Π²Π°ΠΌ сС Π·Π° вас. Π—Π° съТалСниС, Π½Π° ΠΌΠ΅Π½ ΠΌΠΈ трябва ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅. Искам Π΄Π° управлявам настройката Π² Π΄Π΅Ρ‚Π°ΠΉΠ»ΠΈ ΠΈ Π΄Π° Π½Π΅ бъда Π·Ρ€ΠΈΡ‚Π΅Π» Π² Ρ‚Π΅Π°Ρ‚ΡŠΡ€ ΠΏΠΎ прСоформянСто Π½Π° кластСр.

Изисквания

Какво ΠΌΠΈ бСшС Π½ΡƒΠΆΠ½ΠΎ, Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, която Π΄Π° ΠΏΠΎΠ΅ΠΌΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° ΠΈ Π΄Π° ΠΏΡ€ΠΈΡ‚Π΅ΠΆΠ°Π²Π° слСднитС свойства:

  • ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° ΠΊΠ°ΠΊΡ‚ΠΎ с Ρ‚Π²ΡŠΡ€Π΄ΠΎ ΠΊΠΎΠ΄ΠΈΡ€Π°Π½ΠΈ ΡΠΏΠΈΡΡŠΡ†ΠΈ Π½Π° възли, Ρ‚Π°ΠΊΠ° ΠΈ с Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°Π½Π΅ Ρ‡Ρ€Π΅Π· услуги erlang;
  • ΠΏΡŠΠ»Π½ΠΎΡ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π΅Π½ ΠΊΠΎΠ»Π±Π΅ΠΊ ΠΏΡ€ΠΈ всяка промяна Π² топологията (възСл Ρ‚ΡƒΠΊ, възСл Ρ‚Π°ΠΌ, нСстабилност Π² ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°, Ρ€Π°Π·ΠΊΡŠΡΠ²Π°Π½ΠΈΡ);
  • ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π΅Π½ интСрфСйс Π·Π° стартиранС Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° с дълги ΠΈ къси ΠΈΠΌΠ΅Π½Π°, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ с :nonode@nohost;
  • вмСстимост с Docker ΠΎΡ‚ кутията, Π±Π΅Π· нСобходимост ΠΎΡ‚ писанС Π½Π° инфраструктурСн ΠΊΠΎΠ΄.

ΠŸΠΎΡΠ»Π΅Π΄Π½ΠΎΡ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ слСд ΠΊΠ°Ρ‚ΠΎ тСствам ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π»ΠΎΠΊΠ°Π»Π½ΠΎ Π² :nonode@nohost, ΠΈΠ»ΠΈ Π² изкуствСно Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° срСда с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° test_cluster_task, искам просто Π΄Π° стартирам docker-compose up --scale my_app=3 ΠΈ Π΄Π° видя ΠΊΠ°ΠΊ изпълнява Ρ‚Ρ€ΠΈ инстанции Π² Docker Π±Π΅Π· Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ΄Π°. Искам ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° зависимитС прилоТСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ mnesiaΒ β€” ΠΊΠΎΠ³Π°Ρ‚ΠΎ топологията сС промСня, Π·Π°Π΄ кулиситС Π΄Π° прСразпрСдСлят ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π±Π΅Π· Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ натиски ΠΎΡ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.

Cloister Π½Π΅ Π΅ замислСн ΠΊΠ°Ρ‚ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, способна Π½Π° всичко: ΠΎΡ‚ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Π΄ΠΎ приготвянС Π½Π° ΠΊΠ°Ρ„Π΅. Π’ΠΎΠ²Π° Π½Π΅ Π΅ ΡΡ€Π΅Π±ΡŠΡ€Π½Π° ΠΊΡƒΡ€ΡˆΡƒΠΌΠ°, стрСмяща сС Π΄Π° ΠΎΠ±Ρ…Π²Π°Π½Π΅ всички възмоТни случаи, Π½ΠΈΡ‚ΠΎ Π°ΠΊΠ°Π΄Π΅ΠΌΠΈΡ‡Π½ΠΎ пълно Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π² смисъла, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‚Π΅ΠΎΡ€Π΅Ρ‚ΠΈΡ†ΠΈΡ‚Π΅ ΠΎΡ‚ CS Π²Π»Π°Π³Π°Ρ‚ Π² Ρ‚ΠΎΠ·ΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½. Π’Π°Π·ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π΅ създадСна, Π·Π° Π΄Π° обслуТва ΠΌΠ½ΠΎΠ³ΠΎ ясна Ρ†Π΅Π», Π½ΠΎ Π΄Π° изпълнява своя Π½Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° голям ΠΎΠ±Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠ΅Ρ€Ρ„Π΅ΠΊΡ‚Π½ΠΎ. Π’Π°Π·ΠΈ Ρ†Π΅Π» Ρ‰Π΅ бъдС Π΄Π° осигури пълна прозрачност ΠΌΠ΅ΠΆΠ΄Ρƒ Π»ΠΎΠΊΠ°Π»Π½Π°Ρ‚Π° срСда Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°Ρ‚Π° Сластична срСда, пълна с Π²Ρ€Π°ΠΆΠ΄Π΅Π±Π½ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ.

Π˜Π·Π±Ρ€Π°Π½ΠΈΡΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄

Cloister ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π° Π΄Π° сС стартира ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ ΠΎΠΏΠΈΡ‚Π½ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° работят със сглобяванСто ΠΈ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Ρ€ΡŠΡ‡Π½ΠΎ, Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ стартирайки Cloister.Manager Π² Π΄ΡŠΡ€Π²ΠΎΡ‚ΠΎ Π½Π° супСрвизоритС Π½Π° Ρ†Π΅Π»Π΅Π²ΠΎΡ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

ΠŸΡ€ΠΈ стартиранС ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Ρ€Π°Π·Ρ‡ΠΈΡ‚Π° Π½Π° config, ΠΎΡ‚ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΠΈΠ·Ρ‡ΠΈΡ‚Π° слСднитС основни стойности:

config :cloister,
  otp_app: :my_app,
  sentry: :"cloister.local", # ΠΈΠ»ΠΈ ~w|n1@foo n2@bar|a
  consensus: 3,              # Π±Ρ€ΠΎΠΉ Π½Π° Π²ΡŠΠ·Π»ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ Π΄Π° сС считат
                             #    ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Π΅ Π°ΠΊΡ‚ΠΈΠ²Π΅Π½
  listener: MyApp.Listener   # ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π», ΠΊΠΎΠΉΡ‚ΠΎ Π΄Π° бъдС ΠΈΠ·Π²ΠΈΠΊΠ°Π½, ΠΊΠΎΠ³Π°Ρ‚ΠΎ
                             #    ΠΏΡ€ΡŠΡΡ‚Π΅Π½ΡŠΡ‚ сС Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠ»

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ ΠΏΠΎ-Π³ΠΎΡ€Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°Ρ‚ Π±ΡƒΠΊΠ²Π°Π»Π½ΠΎ слСдното: 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, ΠΈΠ»ΠΈ :node@host.domainΒ β€” Π² зависимост ΠΎΡ‚ Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Π΅ Π±ΠΈΠ»Π° настроСна Π²ΡŠΠ·Π»ΡŠΡ‚ (:none | :shortnames | :longnames).

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ прилоТСния

Π Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ‚Π΅ прилоТСния Π½Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‚ във Π²Π°ΠΊΡƒΡƒΠΌ ΠΈ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ зависимости, ΠΊΠ°Ρ‚ΠΎ mnesia. ЛСсно ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ тяхната прСконфигурация ΠΎΡ‚ ΡΡŠΡ‰ΠΈΡ ΠΎΠ±Ρ€Π°Ρ‚Π΅Π½ Π²ΠΈΠΊ on_state_change/2. Π•Ρ‚ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описаниС Π½Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° прСнастроим mnesia Π² Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π² докумСнтацията Cloister.

Π“Π»Π°Π²Π½ΠΎΡ‚ΠΎ прСдимство Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Cloister Π΅, Ρ‡Π΅ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° всички Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π° рСконструкция Π½Π° кластСр слСд промяна Π½Π° топологията ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠ°ΠΊΠ°. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ просто стартира Π² Π²Π΅Ρ‡Π΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° срСда, с всички ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ възли, нСзависимо Π΄Π°Π»ΠΈ Π·Π½Π°Π΅ΠΌ IP адрСситС ΠΈ слСдоватСлно ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° Π²ΡŠΠ·Π»ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ, ΠΈΠ»ΠΈ Ρ‚Π΅ са Π±ΠΈΠ»Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈ/ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½ΠΈ. Π’ΠΎΠ²Π° Π½Π΅ изисква Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ спСциални настройки Π½Π° конфигурацията Π½Π° Docker ΠΈ ΠΎΡ‚ Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π½Π° прилоТСния, няма Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ стартиранС Π² Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° срСда ΠΈΠ»ΠΈ Π»ΠΎΠΊΠ°Π»Π½ΠΎ Π½Π° :nonode@nohost. ΠŸΠΎΠ²Π΅Ρ‡Π΅ информация ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅ Π² докумСнтацията.

Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ слоТната ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² топологията Π΅ възмоТна Ρ‡Ρ€Π΅Π· собствСна рСализация MyApp.Listener, Π²ΠΈΠ½Π°Π³ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π²ΡŠΠ·Π½ΠΈΠΊΠ½Π°Ρ‚ Π³Ρ€Π°Π½ΠΈΡ‡Π½ΠΈ случаи, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ‚Π΅Π·ΠΈ ограничСния Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° ΠΈ прСдубСдСният ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ към конфигурацията Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ основСн камък Π½Π° ΠΏΡŠΡ‚Ρ към внСдряванС. Π’ΠΎΠ²Π° Π΅ Π΄ΠΎΠ±Ρ€Π΅, просто Π²Π·Π΅ΠΌΠ΅Ρ‚Π΅ спомСнатото ΠΏΠΎ-Π³ΠΎΡ€Π΅ libcluster, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ ΠΏΠΎ-унивСрсалСн, ΠΈΠ»ΠΈ Π΄ΠΎΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‚Π΅ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° Π½Π° ниско Π½ΠΈΠ²ΠΎ сами. Π¦Π΅Π»Ρ‚Π° Π½Π° Ρ‚Π°Π·ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΎΡ‚ ΠΊΠΎΠ΄ Π΅ Π½Π΅ Π΄Π° ΠΎΠ±Ρ…Π²Π°Ρ‰Π° всички възмоТни сцСнарии, Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π½Π°ΠΉ-разпространСния сцСнарий Π±Π΅Π· Π½Π΅Π½ΡƒΠΆΠ½ΠΈ услоТнСния ΠΈ обСмисти ΠΊΠΎΠΏΠΈ-пСйст.

Π—Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°: Π½Π° Ρ‚ΠΎΠ²Π° място Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π° бСшС Ρ„Ρ€Π°Π·Π°Ρ‚Π° β€žHappy clustering!β€œ, ΠΈ ЯндСкс, с ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€Π΅Π²Π΅ΠΆΠ΄Π°ΠΌ (Π½Π΅ ΠΌΠΎΠ³Π° сам Π΄Π° ровя ΠΈΠ· Ρ€Π΅Ρ‡Π½ΠΈΡ†ΠΈΡ‚Π΅), ΠΌΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ β€žΠ‘Ρ‡Π°ΡΡ‚Π»ΠΈΠ²ΠΎΠ³ΠΎ скоплСния!β€œ. По-Π΄ΠΎΠ±ΡŠΡ€ ΠΏΡ€Π΅Π²ΠΎΠ΄, вСроятно, особСно ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π° гСополитичСска ситуация, Π΅Π΄Π²Π° Π»ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС измисли.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster