Π‘Ρ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ распрСдСлСнных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½ΠΈΠ΅

Анонс

КоллСги, Π² сСрСдинС Π»Π΅Ρ‚Π° я ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΡŽ Π²Ρ‹ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Ρ†ΠΈΠΊΠ» статСй ΠΏΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ систСм массового обслуТивания: β€œΠ­ΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ VTrade” β€” ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ для Ρ‚ΠΎΡ€Π³ΠΎΠ²Ρ‹Ρ… систСм. Π’ Ρ†ΠΈΠΊΠ»Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π½Π° тСория ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° построСния Π±ΠΈΡ€ΠΆΠΈ, Π°ΡƒΠΊΡ†ΠΈΠΎΠ½Π° ΠΈ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π°. Π’ ΠΊΠΎΠ½Ρ†Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ ΠΏΡ€ΠΎΠ³ΠΎΠ»ΠΎΡΠΎΠ²Π°Ρ‚ΡŒ Π·Π° Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ интСрСсныС Π²Π°ΠΌ Ρ‚Π΅ΠΌΡ‹.

Π‘Ρ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ распрСдСлСнных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½ΠΈΠ΅

Π­Ρ‚ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰Π°Ρ ΡΡ‚Π°Ρ‚ΡŒΡ Ρ†ΠΈΠΊΠ»Π° ΠΏΠΎ распрСдСлСнным Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ прилоТСниям Π½Π° Erlang/Elixir. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ тСорСтичСскиС основы Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹. Вторая ΡΡ‚Π°Ρ‚ΡŒΡ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ основныС ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ построСния ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… систСм.

БСгодня ΠΌΡ‹ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ΅ΠΌ вопросы развития ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ‹ ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π² Ρ†Π΅Π»ΠΎΠΌ.

ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ сСрвисов

Π’ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ сСрвиса часто приходится ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ нСсколько шаблонов взаимодСйствия Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π΅. НапримСр, сСрвис users, Ρ€Π΅ΡˆΠ°ΡŽΡ‰ΠΈΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ управлСния профилями ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π½Π° запросы req-resp ΠΈ ΡΠΎΠΎΠ±Ρ‰Π°Ρ‚ΡŒ ΠΎΠ± обновлСниях ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ Ρ‡Π΅Ρ€Π΅Π· pub-sub. Π­Ρ‚ΠΎΡ‚ случай довольно простой: Π·Π° messaging стоит ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ Π»ΠΎΠ³ΠΈΠΊΡƒ сСрвиса ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΡŽΡ‰ΠΈΠΉ обновлСния.

Битуация услоТняСтся, ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ отказоустойчивый распрСдСлСнный сСрвис. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ, Ρ‡Ρ‚ΠΎ трСбования ΠΊ users измСнились:

  1. Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ сСрвис Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ запросы Π½Π° 5 ΡƒΠ·Π»Π°Ρ… кластСра,
  2. ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ выполнСния Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ,
  3. Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΌΠ΅Ρ‚ΡŒ динамичСски ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ списками подписки Π½Π° обновлСния ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Вопрос консистСнтного хранСния ΠΈ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΡ‹ Π½Π΅ рассматриваСм. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ эти вопросы Ρ€Π΅ΡˆΠ΅Π½Ρ‹ Ρ€Π°Π½Π΅Π΅ ΠΈ Π² систСмС ΡƒΠΆΠ΅ сущСствуСт Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ слой хранСния, Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ взаимодСйствия с Π½ΠΈΠΌ.

Π€ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ описаниС сСрвиса users ΡƒΡΠ»ΠΎΠΆΠ½ΠΈΠ»ΠΎΡΡŒ. Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния программиста благодаря использованию messaging измСнСния ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΡŽ, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ балансировку Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ΅ ΠΎΠ±ΠΌΠ΅Π½Π° req-resp.

Π’Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ часто. Π’ users это ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ΅Π΄ΠΈΠ°, ΠΈΠ»ΠΈ синхронизация Π΄Π°Π½Π½Ρ‹Ρ… с соц. сСтями. Π­Ρ‚ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠ°ΠΊ-Ρ‚ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… кластСра ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ…ΠΎΠ΄ выполнСния. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρƒ нас Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ: Π»ΠΈΠ±ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ шаблон распрСдСлСния Π·Π°Π΄Π°Ρ‡ ΠΈΠ· ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ, Π»ΠΈΠ±ΠΎ, Ссли ΠΎΠ½ Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚, Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ кастомный ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Π·Π°Π΄Π°Ρ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ Π½Π°ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΡƒΠ»ΠΎΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ².

3 ΠΏΡƒΠ½ΠΊΡ‚ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ шаблона pub-sub. И для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, послС создания Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° pub-sub, Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ этой Ρ‚ΠΎΡ‡ΠΊΠΈ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… нашСго сСрвиса. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ выносим Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ подписки ΠΈ отписки ΠΈΠ· слоя messaging Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ users.

Π’ ΠΈΡ‚ΠΎΠ³Π΅, дСкомпозиция Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π»Π°, Ρ‡Ρ‚ΠΎ для удовлСтворСния Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΡƒΠ·Π»Π°Ρ… 5 экзСмпляров сСрвиса ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ – ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ pub-sub, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° подписку.
Для запуска 5 ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π½Π΅ трСбуСтся ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠΎΠ΄ сСрвиса. ЕдинствСнноС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ дСйствиС – настройка ΠΏΡ€Π°Π²ΠΈΠ» балансировки Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ΅ ΠΎΠ±ΠΌΠ΅Π½Π°, ΠΎ Ρ‡Π΅ΠΌ ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅.
Π’Π°ΠΊΠΆΠ΅ появилась Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ: ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ pub-sub ΠΈ кастомный ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Π·Π°Π΄Π°Ρ‡ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² СдинствСнном экзСмплярС. ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, сСрвис messaging, ΠΊΠ°ΠΊ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π²Ρ‹Π±ΠΎΡ€Π° Π»ΠΈΠ΄Π΅Ρ€Π°.

Π’Ρ‹Π±ΠΎΡ€ Π»ΠΈΠ΄Π΅Ρ€Π°

Π’ распрСдСлСнных систСмах Π²Ρ‹Π±ΠΎΡ€ Π»ΠΈΠ΄Π΅Ρ€Π° – ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° назначСния СдинствСнного процСсса, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰Π΅Π³ΠΎ Π·Π° ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ распрСдСлСнной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.

Π’ систСмах, Π½Π΅ склонных ΠΊ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, находят ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Π½Π° основС консСнсуса, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ paxos ΠΈΠ»ΠΈ raft.
ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ messaging – это Π±Ρ€ΠΎΠΊΠ΅Ρ€ ΠΈ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт, Ρ‚ΠΎ ΠΎΠ½ Π·Π½Π°Π΅Ρ‚ ΠΎΠ±ΠΎ всСх ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°Ρ… сСрвиса – ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚Π°Ρ… Π² Π»ΠΈΠ΄Π΅Ρ€Ρ‹. Messaging ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Π·Π½Π°Ρ‡Π°Ρ‚ΡŒ Π»ΠΈΠ΄Π΅Ρ€Π° Π±Π΅Π· провСдСния голосования.

ВсС сСрвисы послС старта ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Ρ‚ΠΎΡ‡ΠΊΠ΅ ΠΎΠ±ΠΌΠ΅Π½Π° ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ систСмноС сообщСниС #'$leader'{exchange = ?EXCHANGE, pid = LeaderPid, servers = Servers}. Π’ случаС Ссли LeaderPid совпадаСт с pid Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ процСсса, ΠΎΠ½ назначаСтся Π»ΠΈΠ΄Π΅Ρ€ΠΎΠΌ, Π° список Servers Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя всС ΡƒΠ·Π»Ρ‹ ΠΈ ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.
Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚ появлСния Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ ΡƒΠ·Π»Π° кластСра, всС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρ‹ сСрвиса ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ #'$slave_up'{exchange = ?EXCHANGE, pid = SlavePid, options = SlaveOpts} ΠΈ #'$slave_down'{exchange = ?EXCHANGE, pid = SlavePid, options = SlaveOpts} соотвСтствСнно.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, всС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π·Π½Π°ΡŽΡ‚ ΠΎΠ±ΠΎ всСх измСнСниях, ΠΈ Π² кластСрС Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ ΠΎΠ΄ΠΈΠ½ Π»ΠΈΠ΄Π΅Ρ€.

ΠŸΠΎΡΡ€Π΅Π΄Π½ΠΈΠΊΠΈ

Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ слоТных распрСдСлСнных процСссов ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² Π·Π°Π΄Π°Ρ‡Π°Ρ… ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ посрСдников.
Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠΎΠ΄ сСрвисов ΠΈ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π°Π΄Π°Ρ‡ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ логирования сообщСний, ΠΏΠ΅Ρ€Π΅Π΄ сСрвисом ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ proxy ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ всю Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ.

ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ pub-sub являСтся распрСдСлСнноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с бизнСс-ядром, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌ события ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ†Π΅Π½Ρ‹ Π½Π° Ρ€Ρ‹Π½ΠΊΠ΅, ΠΈ слой доступа β€” N сСрвСров, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… websocket API для web ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ².
Если Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ β€œΠ² лоб”, Ρ‚ΠΎ обслуТиваниС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  • ΠΊΠ»ΠΈΠ΅Π½Ρ‚ устанавливаСт соСдинСния с ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ. На сторонС сСрвСра, Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ, происходит запуск процСсса, ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ это ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.
  • Π² контСкстС ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ процСсса происходит авторизация ΠΈ подписка Π½Π° обновлСния. ΠŸΡ€ΠΎΡ†Π΅ΡΡ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ subscribe для Ρ‚ΠΎΠΏΠΈΠΊΠΎΠ².
  • послС Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ события Π² ядрС ΠΎΠ½ΠΎ доставляСтся процСссам, ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас 50000 подписчиков Π½Π° Ρ‚ΠΎΠΏΠΈΠΊ β€œnews”. ΠŸΠΎΠ΄ΠΏΠΈΡΡ‡ΠΈΠΊΠΈ распрСдСлСны ΠΏΠΎ 5 сСрвСрам Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎ. Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅, придя Π½Π° Ρ‚ΠΎΡ‡ΠΊΡƒ ΠΎΠ±ΠΌΠ΅Π½Π°, Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ 50000 Ρ€Π°Π·: 10000 Ρ€Π°Π· Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ сСрвСр, ΠΏΠΎ количСству подписчиков Π½Π° Π½Π΅ΠΌ. НС совсСм эффСктивная схСма, ΠΏΡ€Π°Π²Π΄Π°?
Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, Π²Π²Π΅Π΄Π΅ΠΌ proxy, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ имя с Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ ΠΎΠ±ΠΌΠ΅Π½Π°. РСгистратор Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ блиТайший процСсс ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ, это Π²Π°ΠΆΠ½ΠΎ.

Запустим этот proxy Π½Π° сСрвСрах слоя доступа, ΠΈ всС наши процСссы, ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ websocket api, ΠΏΠΎΠ΄ΠΏΠΈΡˆΡƒΡ‚ΡΡ Π½Π° Π½Π΅Π³ΠΎ, Π° Π½Π΅ Π½Π° ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ pub-sub Ρ‚ΠΎΡ‡ΠΊΡƒ ΠΎΠ±ΠΌΠ΅Π½Π° Π² ядрС. Proxy подписываСтся Π½Π° ядро Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² случаС ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ подписки ΠΈ Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΠ²ΡˆΠ΅Π΅ сообщСниС ΠΏΠΎ всСм своим подписчикам.
Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ядром ΠΈ сСрвСрами доступа Π±ΡƒΠ΄Π΅Ρ‚ пСрСслано 5 сообщСний, вмСсто 50000.

ΠœΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡ ΠΈ балансировка

Req-Resp

Π’ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ messaging сущСствуСт 7 стратСгий распрСдСлСния запросов:

  • default. Запрос пСрСдаСтся всСм ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°ΠΌ.
  • round-robin. ΠžΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΠ΅Ρ‚ΡΡ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ ΠΈ цикличСскоС распрСдСлСниС запросов ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°ΠΌΠΈ.
  • consensus. ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρ‹, ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ сСрвис, дСлятся Π½Π° Π»ΠΈΠ΄Π΅Ρ€Π° ΠΈ Π²Π΅Π΄ΠΎΠΌΡ‹Ρ…. Запросы ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π»ΠΈΠ΄Π΅Ρ€Ρƒ.
  • consensus & round-robin. Π’ Π³Ρ€ΡƒΠΏΠΏΠ΅ Π΅ΡΡ‚ΡŒ Π»ΠΈΠ΄Π΅Ρ€, Π½ΠΎ запросы Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ всСми Ρ‡Π»Π΅Π½Π°ΠΌΠΈ.
  • sticky. ВычисляСтся hash функция ΠΈ закрСпляСтся Π·Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ. ΠŸΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ запросы с этой сигнатурой ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ ΠΊ этому ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ.
  • sticky-fun. ΠŸΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ пСрСдаСтся функция вычислСния Ρ…ΡΡˆΠ° для sticky балансировки.
  • fun. АналогичСн sticky-fun, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π°Π΄Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ, ΠΎΡ‚ΠΊΠ»ΠΎΠ½ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΅Π³ΠΎ.

БтратСгия распрСдСлСния задаСтся ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΎΠ±ΠΌΠ΅Π½Π°.

ΠšΡ€ΠΎΠΌΠ΅ балансировки messaging позволяСт Ρ‚ΡΠ³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сущности. Рассмотрим Π²ΠΈΠ΄Ρ‹ тэгов Π² систСмС:

  • Вэг ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠ°ΠΊΠΎΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΡˆΠ»ΠΈ события. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° процСсс ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅ ΠΎΠ±ΠΌΠ΅Π½Π°, Π½ΠΎ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ.
  • Вэг сСрвиса. ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ сСрвиса ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ Π² Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ возмоТности ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ балансировки. Для req-resp ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡ Π»ΠΈΠ½Π΅ΠΉΠ½Π°. ΠœΡ‹ отправляСм запрос Π½Π° Ρ‚ΠΎΡ‡ΠΊΡƒ ΠΎΠ±ΠΌΠ΅Π½Π°, дальшС ΠΎΠ½Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π΅Π³ΠΎ сСрвису. Но Ссли Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π½Π° логичСскиС Π³Ρ€ΡƒΠΏΠΏΡ‹, Ρ‚ΠΎ Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ осущСствляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ тэгов. ΠŸΡ€ΠΈ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΈ тэга, запрос Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ Π³Ρ€ΡƒΠΏΠΏΡƒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ².
  • Вэг запроса. ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹. Π’Π°ΠΊ ΠΊΠ°ΠΊ наша систСма асинхронная, Ρ‚ΠΎ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² сСрвиса Π½ΡƒΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ RequestTag ΠΏΡ€ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ запроса. По Π½Π΅ΠΌΡƒ ΠΌΡ‹ смоТСм ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° ΠΊΠ°ΠΊΠΎΠΉ запрос ΠΊ Π½Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ΅Π».

Pub-sub

Для pub-sub всС Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅. ΠœΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Ρ‚ΠΎΡ‡ΠΊΡƒ ΠΎΠ±ΠΌΠ΅Π½Π° Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΡŽΡ‚ΡΡ сообщСния. Π’ΠΎΡ‡ΠΊΠ° ΠΎΠ±ΠΌΠ΅Π½Π° распрСдСляСт сообщСния ΠΌΠ΅ΠΆΠ΄Ρƒ подписчиками, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ подписались Π½Π° Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΈΠΌ ΠΊΠ»ΡŽΡ‡ΠΈ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ (ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ это Π°Π½Π°Π»ΠΎΠ³ Ρ‚Π΅ΠΌ).

ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ ΠΈ ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ

ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ систСмы Π² Ρ†Π΅Π»ΠΎΠΌ зависит ΠΎΡ‚ стСпСни ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΠΈ слоСв ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² систСмы:

  • БСрвисы ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΡƒΡ‚Π΅ΠΌ добавлСния Π² кластСр Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΡƒΠ·Π»ΠΎΠ² с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ этого сСрвиса. Π’ процСссС ΠΎΠΏΡ‹Ρ‚Π½ΠΎΠΉ эксплуатации ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ балансировки.
  • Π‘Π°ΠΌ ΠΆΠ΅ сСрвис messaging Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ кластСра Π² ΠΎΠ±Ρ‰Π΅ΠΌ случаС ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Π»ΠΈΠ±ΠΎ ΠΏΡƒΡ‚Π΅ΠΌ выноса особо Π½Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ‚ΠΎΡ‡Π΅ΠΊ ΠΎΠ±ΠΌΠ΅Π½Π° Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΡƒΠ·Π»Ρ‹ кластСра, Π»ΠΈΠ±ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ proxy процСссов Π² особо Π½Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ Π·ΠΎΠ½Ρ‹ кластСра.
  • ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ всСй систСмы ΠΊΠ°ΠΊ характСристика зависит ΠΎΡ‚ гибкости Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΠΈ возмоТности объСдинСния ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… кластСров Π² ΠΎΠ±Ρ‰ΡƒΡŽ Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ.

ΠžΡ‚ простоты ΠΈ скорости ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ часто зависит ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Messaging Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ исполнСнии растСт вмСстС с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Π”Π°ΠΆΠ΅ Ссли Π½Π°ΠΌ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ кластСра Π² 50-60 машин, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ±Π΅Π³Π½ΡƒΡ‚ΡŒ ΠΊ Ρ„Π΅Π΄Π΅Ρ€Π°Ρ†ΠΈΠΈ. К соТалСнию, Ρ‚Π΅ΠΌΠ° фСдСрирования Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ.

Π Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

ΠŸΡ€ΠΈ Ρ€Π°Π·Π±ΠΎΡ€Π΅ балансировки Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΌΡ‹ ΡƒΠΆΠ΅ обсуТдали Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ² сСрвисов. Однако messaging Ρ‚ΠΎΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½. Π’ случаС падСния ΡƒΠ·Π»Π° ΠΈΠ»ΠΈ ΠΌΠ°ΡˆΠΈΠ½Ρ‹, messaging Π΄ΠΎΠ»ΠΆΠ΅Π½ автоматичСски Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π² ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠΈΠ΅ сроки.

Π’ своих ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΡƒΠ·Π»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π² случаС падСния. Π’ Erlang сущСствуСт стандартная рСализация распрСдСлСнного Ρ€Π΅ΠΆΠΈΠΌΠ° для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ OTP. Distributed mode, ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΈ осущСствляСт восстановлСниС Π² случаС сбоя ΠΏΡƒΡ‚Π΅ΠΌ запуска ΡƒΠΏΠ°Π²ΡˆΠ΅Π³ΠΎ прилоТСния Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠΌ ΡƒΠ·Π»Π΅. ΠŸΡ€ΠΎΡ†Π΅ΡΡ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π΅Π½, послС сбоя ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π΅Π·ΠΆΠ°Π΅Ρ‚ автоматичСски Π½Π° failover ΡƒΠ·Π΅Π». ΠŸΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎ этот Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΡƒΡ‚.

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ хотя Π±Ρ‹ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ rabbitmq ΠΈ нашСго кастомного messaging.
Π― нашСл ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ тСстирования rabbitmq ΠΎΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ openstack.

Π’ ΠΏΡƒΠ½ΠΊΡ‚Π΅ 6.14.1.2.1.2.2. ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° прСдставлСн Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ RPC CAST:
Π‘Ρ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ распрСдСлСнных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½ΠΈΠ΅

ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… настроСк Π² ядро ОБ ΠΈΠ»ΠΈ erlang VM Π²Π½ΠΎΡΠΈΡ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ. Условия для тСстирования:

  • erl opts: +A1 +sbtu.
  • ВСст Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° erlang запускаСтся Π½Π° Π½ΠΎΡƒΡ‚Π±ΡƒΠΊΠ΅ со ΡΡ‚Π°Ρ€Π΅Π½ΡŒΠΊΠΈΠΌ i7 Π² мобильном исполнСнии.
  • ΠšΠ»Π°ΡΡ‚Π΅Ρ€Π½Ρ‹Π΅ тСсты проходят Π½Π° сСрвСрах с 10G ΡΠ΅Ρ‚ΡŒΡŽ.
  • Код Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² docker ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ…. Π‘Π΅Ρ‚ΡŒ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ NAT.

Код тСста:

req_resp_bench(_) ->
  W = perftest:comprehensive(10000,
    fun() ->
      messaging:request(?EXCHANGE, default, ping, self()),
      receive
        #'$msg'{message = pong} -> ok
      after 5000 ->
        throw(timeout)
      end
    end
  ),
  true = lists:any(fun(E) -> E >= 30000 end, W),
  ok.

Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ 1: ВСст запускаСтся Π½Π° Π½ΠΎΡƒΡ‚Π±ΡƒΠΊΠ΅ со ΡΡ‚Π°Ρ€Π΅Π½ΡŒΠΊΠΈΠΌ i7 мобильного исполнСния. ВСст, messaging ΠΈ сСрвис Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡƒΠ·Π»Π΅ Π² ΠΎΠ΄Π½ΠΎΠΌ docker-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅:

Sequential 10000 cycles in ~0 seconds (26987 cycles/s)
Sequential 20000 cycles in ~1 seconds (26915 cycles/s)
Sequential 100000 cycles in ~4 seconds (26957 cycles/s)
Parallel 2 100000 cycles in ~2 seconds (44240 cycles/s)
Parallel 4 100000 cycles in ~2 seconds (53459 cycles/s)
Parallel 10 100000 cycles in ~2 seconds (52283 cycles/s)
Parallel 100 100000 cycles in ~3 seconds (49317 cycles/s)

Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ 2: 3 ΡƒΠ·Π»Π° Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Π΅ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… ΠΏΠΎΠ΄ docker (NAT).

Sequential 10000 cycles in ~1 seconds (8684 cycles/s)
Sequential 20000 cycles in ~2 seconds (8424 cycles/s)
Sequential 100000 cycles in ~12 seconds (8655 cycles/s)
Parallel 2 100000 cycles in ~7 seconds (15160 cycles/s)
Parallel 4 100000 cycles in ~5 seconds (19133 cycles/s)
Parallel 10 100000 cycles in ~4 seconds (24399 cycles/s)
Parallel 100 100000 cycles in ~3 seconds (34517 cycles/s)

Π’ΠΎ всСх случаях утилизация CPU Π½Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π»Π° 250%

Π˜Ρ‚ΠΎΠ³ΠΈ

НадСюсь, Π΄Π°Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» Π½Π΅ выглядит, ΠΊΠ°ΠΊ Π΄Π°ΠΌΠΏ сознания ΠΈ ΠΌΠΎΠΉ ΠΎΠΏΡ‹Ρ‚ принСсСт Ρ€Π΅Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ»ΡŒΠ·Ρƒ ΠΊΠ°ΠΊ исслСдоватСлям распрСдСлСнных систСм, Ρ‚Π°ΠΊ ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ находятся Π² самом Π½Π°Ρ‡Π°Π»Π΅ ΠΏΡƒΡ‚ΠΈ построСния распрСдСлСнных Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ для своих бизнСс-систСм ΠΈ с интСрСсом смотрят Π½Π° Erlang/Elixir, Π½ΠΎ ΡΠΎΠΌΠ½Π΅Π²Π°ΡŽΡ‚ΡΡ стоит Π»ΠΈ…

Π€ΠΎΡ‚ΠΎ @chuttersnap

Волько зарСгистрированныС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΡ‡Π°ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² опросС. Π’ΠΎΠΉΠ΄ΠΈΡ‚Π΅, поТалуйста.

КакиС Ρ‚Π΅ΠΌΡ‹ ΠΌΠ½Π΅ стоит ΠΎΡΠ²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Ρ†ΠΈΠΊΠ»Π° β€œΠ­ΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ VTrade”?

  • ВСория: Π Ρ‹Π½ΠΊΠΈ, ΠΎΡ€Π΄Π΅Ρ€Ρ‹ ΠΈ врСмя ΠΈΡ… дСйствия: DAY, GTD, GTC, IOC, FOK, MOO, MOC, LOO, LOC

  • Книга ΠΎΡ€Π΄Π΅Ρ€ΠΎΠ². ВСория ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠ½ΠΈΠ³ΠΈ с Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ

  • Визуализация Ρ‚ΠΎΡ€Π³ΠΎΠ²: Π’ΠΈΠΊΠΈ, Π±Π°Ρ€Ρ‹, Ρ€Π΅Π·ΠΎΠ»ΡŽΡ†ΠΈΠΈ. Как Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈ ΠΊΠ°ΠΊ ΠΊΠ»Π΅ΠΈΡ‚ΡŒ

  • Бэкофис. ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°. ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ сотрудников ΠΈ расслСдованиС ΠΈΠ½Ρ†ΠΈΠ΄Π΅Π½Ρ‚ΠΎΠ²

  • API. РазбираСмся ΠΊΠ°ΠΊΠΈΠ΅ интСрфСйсы Π½ΡƒΠΆΠ½Ρ‹ ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ

  • Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ: PostgreSQL, Timescale, Tarantool Π² Ρ‚ΠΎΡ€Π³ΠΎΠ²Ρ‹Ρ… систСмах

  • Π Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Π² Ρ‚ΠΎΡ€Π³ΠΎΠ²Ρ‹Ρ… систСмах

  • Π”Ρ€ΡƒΠ³ΠΎΠ΅. ΠΠ°ΠΏΠΈΡˆΡƒ Π² коммСнтариях

ΠŸΡ€ΠΎΠ³ΠΎΠ»ΠΎΡΠΎΠ²Π°Π»ΠΈ 6 ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. Π’ΠΎΠ·Π΄Π΅Ρ€ΠΆΠ°Π»ΠΈΡΡŒ 4 ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ