RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π² кластСрах

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π² кластСрах

ΠžΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ β€” большиС Ρ‚Π΅ΠΌΡ‹, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ посвятим RabbitMQ ΠΈ Kafka ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ. Данная ΡΡ‚Π°Ρ‚ΡŒΡ ΠΎ RabbitMQ, Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ β€” ΠΎ Kafka, Π² сравнСнии с RabbitMQ. Π‘Ρ‚Π°Ρ‚ΡŒΡ длинная, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΡƒΡΡ‚Ρ€Π°ΠΈΠ²Π°ΠΉΡ‚Π΅ΡΡŒ ΠΏΠΎΡƒΠ΄ΠΎΠ±Π½Π΅Π΅.

Рассмотрим стратСгии отказоустойчивости, согласованности ΠΈ высокой доступности (HA), Π° Ρ‚Π°ΠΊΠΆΠ΅ компромиссы, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ приходится ΠΈΠ΄Ρ‚ΠΈ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ стратСгии. RabbitMQ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° кластСрС ΡƒΠ·Π»ΠΎΠ² β€” ΠΈ Ρ‚ΠΎΠ³Π΄Π° классифицируСтся ΠΊΠ°ΠΊ распрСдСлСнная систСма. Когда Ρ€Π΅Ρ‡ΡŒ Π·Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΎ распрСдСлСнных систСмах, ΠΌΡ‹ часто Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ согласованности ΠΈ доступности.

Π­Ρ‚ΠΈ понятия ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚, ΠΊΠ°ΠΊ систСма Π²Π΅Π΄Π΅Ρ‚ сСбя ΠΏΡ€ΠΈ сбоС. Π‘Π±ΠΎΠΉ сСтСвого соСдинСния, сбой сСрвСра, сбой ТСсткого диска, врСмСнная Π½Π΅Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ сСрвСра ΠΈΠ·-Π·Π° сборки мусора, потСря ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈΠ»ΠΈ Π·Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΠ΅ сСтСвого соСдинСния. ВсС это ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΠΎΡ‚Π΅Ρ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°ΠΌ. ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, практичСски Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ систСму, ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π΅ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠ²ΡƒΡŽ (Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π±Π΅Π· расхоТдСния Π΄Π°Π½Π½Ρ‹Ρ…), ΠΈ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΡƒΡŽ (Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния ΠΈ записи) для всСх Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² сбоя.

ΠœΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ ΠΈ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ находятся Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ†Π°Ρ… спСктра, ΠΈ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ, Π² ΠΊΠ°ΠΊΡƒΡŽ сторону ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π₯ΠΎΡ€ΠΎΡˆΠ°Ρ Π½ΠΎΠ²ΠΎΡΡ‚ΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ с RabbitMQ Ρ‚Π°ΠΊΠΎΠΉ Π²Ρ‹Π±ΠΎΡ€ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½. Π£ вас эдакиС «нСрдовскиС» Ρ€Ρ‹Ρ‡Π°ΠΆΠΊΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π²ΠΈΠ³Π°Ρ‚ΡŒ баланс Π² сторону большСй согласованности ΠΈΠ»ΠΈ большСй доступности.

ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡƒΠ΄Π΅Π»ΠΈΠΌ Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ приводят ΠΊ ΠΏΠΎΡ‚Π΅Ρ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ·-Π·Π° ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½Π½Ρ‹Ρ… записСй. Π•ΡΡ‚ΡŒ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° отвСтствСнности ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Π±Π»ΠΈΡˆΠ΅Ρ€Π°ΠΌΠΈ, Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°ΠΌΠΈ ΠΈ потрСбитСлями. ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ сообщСниС ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ Π±Ρ€ΠΎΠΊΠ΅Ρ€Ρƒ, это Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π° β€” Π½Π΅ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ сообщСниС. Когда Π±Ρ€ΠΎΠΊΠ΅Ρ€ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅Ρ‚ ΠΏΠ°Π±Π»ΠΈΡˆΠ΅Ρ€Ρƒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ сообщСния, ΠΌΡ‹ Π½Π΅ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ потСряно. Но ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ Π² зависимости ΠΎΡ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ вашСго Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° ΠΈ издатСля.

ΠŸΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹ устойчивости ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°

УстойчивыС ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ/ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡ

Π’ RabbitMQ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ: Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅/устойчивыС (durable) ΠΈ нСустойчивыС (non-durable). ВсС ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Mnesia. УстойчивыС ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ запускС ΡƒΠ·Π»Π° ΠΈ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΠ΅Ρ€Π΅ΠΆΠΈΠ²Π°ΡŽΡ‚ пСрСзапуск, сбой систСмы ΠΈΠ»ΠΈ сбой сСрвСра (Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅). Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΊΠ° Π²Ρ‹ Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡŽ (exchange) ΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ устойчивыми, инфраструктура ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ/ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ вСрнСтся Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ.

НСустойчивыС ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ пСрСзапускС ΡƒΠ·Π»Π°.

УстойчивыС сообщСния

Одно Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π΄ΠΎΠ»Π³ΠΎΠ²Π΅Ρ‡Π½Π°, Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ всС Π΅Ρ‘ сообщСния ΠΏΠ΅Ρ€Π΅ΠΆΠΈΠ²ΡƒΡ‚ пСрСзапуск ΡƒΠ·Π»Π°. Π‘ΡƒΠ΄ΡƒΡ‚ восстановлСны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сообщСния, установлСнныС ΠΏΠ°Π±Π»ΠΈΡˆΠ΅Ρ€ΠΎΠΌ ΠΊΠ°ΠΊ устойчивыС (persistent). УстойчивыС сообщСния Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°, Π½ΠΎ Ссли потСря сообщСния Π½Π΅ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠ°, Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄Π° Π½Π΅Ρ‚.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π² кластСрах
Рис. 1. ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° устойчивости

ΠšΠ»Π°ΡΡ‚Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡ с Π·Π΅Ρ€ΠΊΠ°Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΆΠΈΡ‚ΡŒ ΠΏΠΎΡ‚Π΅Ρ€ΡŽ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°, Π½Π°ΠΌ Π½ΡƒΠΆΠ½Π° ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ. МоТСм ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ нСсколько ΡƒΠ·Π»ΠΎΠ² RabbitMQ Π² кластСр, Π° Π·Π°Ρ‚Π΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΏΡƒΡ‚Ρ‘ΠΌ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ нСсколькими ΡƒΠ·Π»Π°ΠΌΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли ΠΏΠ°Π΄Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΡƒΠ·Π΅Π», ΠΌΡ‹ Π½Π΅ тСряСм Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ остаёмся доступными.

Π—Π΅Ρ€ΠΊΠ°Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ:

  • ΠΎΠ΄Π½Π° главная ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ (мастСр), которая ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ всС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π½Π° запись ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅
  • ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ нСсколько Π·Π΅Ρ€ΠΊΠ°Π», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ всС сообщСния ΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π³Π»Π°Π²Π½ΠΎΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. Π­Ρ‚ΠΈ Π·Π΅Ρ€ΠΊΠ°Π»Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π΅ для ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ, Π° ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ для избыточности.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π² кластСрах
Рис. 2. Π—Π΅Ρ€ΠΊΠ°Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ

Π—Π΅Ρ€ΠΊΠ°Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ устанавливаСтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΎΠΉ. Π’ Π½Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ коэффициСнт Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ Π΄Π°ΠΆΠ΅ ΡƒΠ·Π»Ρ‹, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄ΠΎΠ»ΠΆΠ½Π° Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

  • ha-mode: all
  • ha-mode: exactly, ha-params: 2 (ΠΎΠ΄ΠΈΠ½ мастСр ΠΈ ΠΎΠ΄Π½ΠΎ Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ)
  • ha-mode: nodes, ha-params: rabbit@node1, rabbit@node2

ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΠ°Π±Π»ΠΈΡˆΠ΅Ρ€Ρƒ

Для достиТСния ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ записи Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ подтвСрТдСния ΠΏΠ°Π±Π»ΠΈΡˆΠ΅Ρ€Ρƒ (Publisher Confirms). Π‘Π΅Π· Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ сообщСний. ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ отправляСтся ΠΏΠ°Π±Π»ΠΈΡˆΠ΅Ρ€Ρƒ послС записи сообщСния Π½Π° диск. RabbitMQ записываСт сообщСния Π½Π° диск Π½Π΅ ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ, Π° Π½Π° пСриодичСской основС, Π² Ρ€Π°ΠΉΠΎΠ½Π΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… сотСн миллисСкунд. Когда ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ зСркалируСтся, ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ отправляСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ всС Π·Π΅Ρ€ΠΊΠ°Π»Π° Ρ‚Π°ΠΊΠΆΠ΅ записали свою копию сообщСния Π½Π° диск. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ использованиС ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ добавляСт Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ, Π½ΠΎ Ссли Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… Π²Π°ΠΆΠ½Π°, Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹.

ΠžΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²Π°Ρ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ

Когда Π±Ρ€ΠΎΠΊΠ΅Ρ€ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈΠ»ΠΈ ΠΏΠ°Π΄Π°Π΅Ρ‚, всС Π²Π΅Π΄ΡƒΡ‰ΠΈΠ΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ (мастСра) Π½Π° этом ΡƒΠ·Π»Π΅ ΠΎΡ‚Π²Π°Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ вмСстС с Π½ΠΈΠΌ. Π—Π°Ρ‚Π΅ΠΌ кластСр Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ самоС староС Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ мастСра ΠΈ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ³Π°Π΅Ρ‚ Π΅Π³ΠΎ Π² качСствС Π½ΠΎΠ²ΠΎΠ³ΠΎ мастСра.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π² кластСрах
Рис. 3. НСсколько Π·Π΅Ρ€ΠΊΠ°Π»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ ΠΈ ΠΈΡ… ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ

Π‘Ρ€ΠΎΠΊΠ΅Ρ€ 3 ΠΏΠ°Π΄Π°Π΅Ρ‚. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ ΠžΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π‘ Π½Π° Π‘Ρ€ΠΎΠΊΠ΅Ρ€Π΅ 2 ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ΡΡ Π΄ΠΎ мастСра. Π’Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ для ΠžΡ‡Π΅Ρ€Π΅Π΄ΠΈ C создано Π½ΠΎΠ²ΠΎΠ΅ Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ Π½Π° Π‘Ρ€ΠΎΠΊΠ΅Ρ€Π΅ 1. RabbitMQ всСгда пытаСтся ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ коэффициСнт Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π² Π²Π°ΡˆΠΈΡ… ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ….

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π² кластСрах
Рис. 4. Π‘Ρ€ΠΎΠΊΠ΅Ρ€ 3 отваливаСтся, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡ‚ΠΊΠ°Π· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ C

ΠŸΠ°Π΄Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π‘Ρ€ΠΎΠΊΠ΅Ρ€ 1! Π£ нас остался Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π±Ρ€ΠΎΠΊΠ΅Ρ€. Π”ΠΎ мастСра ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ΡΡ Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ ΠžΡ‡Π΅Ρ€Π΅Π΄ΠΈ B.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π² кластСрах
Рис. 5

ΠœΡ‹ Π²Π΅Ρ€Π½ΡƒΠ»ΠΈ Π‘Ρ€ΠΎΠΊΠ΅Ρ€Π° 1. НСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, насколько ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΆΠΈΠ»ΠΈ ΠΏΠΎΡ‚Π΅Ρ€ΡŽ ΠΈ восстановлСниС Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°, всС Π·Π΅Ρ€ΠΊΠ°Π»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ сообщСния ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΎΡ‚Π±Ρ€Π°ΡΡ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ пСрСзапускС. Π­Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π±ΡƒΠ΄ΡƒΡ‚ послСдствия. ΠœΡ‹ скоро рассмотрим эти послСдствия. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π‘Ρ€ΠΎΠΊΠ΅Ρ€ 1 Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ снова являСтся Ρ‡Π»Π΅Π½ΠΎΠΌ кластСра, Π° кластСр пытаСтся ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ ΠΈ поэтому создаСт Π·Π΅Ρ€ΠΊΠ°Π»Π° Π½Π° Π‘Ρ€ΠΎΠΊΠ΅Ρ€Π΅ 1.

Π’ этом случаС потСря Π‘Ρ€ΠΎΠΊΠ΅Ρ€Π° 1 Π±Ρ‹Π»Π° ΠΏΠΎΠ»Π½ΠΎΠΉ, ΠΊΠ°ΠΊ ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, поэтому нСзСркалированная ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π’ потСряна ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π² кластСрах
Рис. 6. Π‘Ρ€ΠΎΠΊΠ΅Ρ€ 1 возвращаСтся Π² строй

Π‘Ρ€ΠΎΠΊΠ΅Ρ€ 3 вСрнулся Π² строй, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ A ΠΈ B ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ созданныС Π½Π° Π½Ρ‘ΠΌ Π·Π΅Ρ€ΠΊΠ°Π»Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΠΈΡ‚ΡŒ своим ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°ΠΌ HA. Но Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ всС Π³Π»Π°Π²Π½Ρ‹Π΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡƒΠ·Π»Π΅! Π­Ρ‚ΠΎ Π½Π΅ идСально, Π»ΡƒΡ‡ΡˆΠ΅ Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ΅ распрСдСлСниС ΠΌΠ΅ΠΆΠ΄Ρƒ ΡƒΠ·Π»Π°ΠΌΠΈ. К соТалСнию, здСсь Π½Π΅Ρ‚ особых Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² для пСрСбалансировки мастСров. ВСрнСмся ΠΊ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ ΠΏΠΎΠ·ΠΆΠ΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ сначала Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π² кластСрах
Рис. 7. Π‘Ρ€ΠΎΠΊΠ΅Ρ€ 3 возвращаСтся Π² строй. ВсС Π³Π»Π°Π²Π½Ρ‹Π΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡƒΠ·Π»Π΅!

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ вас Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ прСдставлСниС, ΠΊΠ°ΠΊ Π·Π΅Ρ€ΠΊΠ°Π»Π° ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ. Π­Ρ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π² случаС ΠΎΡ‚ΠΊΠ°Π·Π° ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ ΠΎΡ‚ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Но ΠΌΡ‹ Π΅Ρ‰Π΅ Π½Π΅ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ всё Π³ΠΎΡ€Π°Π·Π΄ΠΎ слоТнСС.

Бинхронизация

ΠŸΡ€ΠΈ создании Π½ΠΎΠ²ΠΎΠ³ΠΎ Π·Π΅Ρ€ΠΊΠ°Π»Π° всС Π½ΠΎΠ²Ρ‹Π΅ сообщСния всСгда Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° это Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ ΠΈ Π»ΡŽΠ±Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅. Π§Ρ‚ΠΎ касаСтся ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… Π² Π³Π»Π°Π²Π½ΠΎΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡ… Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Π½ΠΎΠ²ΠΎΠ΅ Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ становится ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠ΅ΠΉ мастСра. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π΅ Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ сообщСния ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ Π³Π»Π°Π²Π½ΠΎΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ Π½ΠΎΠ²ΠΎΠΌΡƒ Π·Π΅Ρ€ΠΊΠ°Π»Ρƒ ΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠ³Π΄Π° Π½ΠΎΠ²Ρ‹Π΅ сообщСния ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ Π² хвост, Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ сообщСния уходят ΠΈΠ· Π³ΠΎΠ»ΠΎΠ²Ρ‹ Π³Π»Π°Π²Π½ΠΎΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ.

Вакая синхронизация выполняСтся автоматичСски ΠΈΠ»ΠΈ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΈ управляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ. Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

Π£ нас Π΄Π²Π΅ Π·Π΅Ρ€ΠΊΠ°Π»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ A синхронизируСтся автоматичСски, Π° ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ B β€” Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Π’ ΠΎΠ±Π΅ΠΈΡ… очСрСдях ΠΏΠΎ Π΄Π΅ΡΡΡ‚ΡŒ сообщСний.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π² кластСрах
Рис. 8. Π”Π²Π΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Ρ€Π΅ΠΆΠΈΠΌΠ°ΠΌΠΈ синхронизации

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ тСряСм Π‘Ρ€ΠΎΠΊΠ΅Ρ€Π° 3.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π² кластСрах
Рис. 9. Π‘Ρ€ΠΎΠΊΠ΅Ρ€ 3 ΡƒΠΏΠ°Π»

Π‘Ρ€ΠΎΠΊΠ΅Ρ€ 3 возвращаСтся Π² строй. ΠšΠ»Π°ΡΡ‚Π΅Ρ€ создаСт Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π½Π° Π½ΠΎΠ²ΠΎΠΌ ΡƒΠ·Π»Π΅ ΠΈ автоматичСски синхронизируСт Π½ΠΎΠ²ΡƒΡŽ ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ А с мастСром. Однако Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ Π½ΠΎΠ²ΠΎΠΉ ΠžΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π’ остаСтся пустым. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρƒ нас полная ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ ΠžΡ‡Π΅Ρ€Π΅Π΄ΠΈ A ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ для ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… сообщСний ΠžΡ‡Π΅Ρ€Π΅Π΄ΠΈ B.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π² кластСрах
Рис. 10. НовоС Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ ΠžΡ‡Π΅Ρ€Π΅Π΄ΠΈ А ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ всС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ сообщСния, Π° Π½ΠΎΠ²ΠΎΠ΅ Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ ΠžΡ‡Π΅Ρ€Π΅Π΄ΠΈ B β€” Π½Π΅Ρ‚

Π’ ΠΎΠ±Π΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ поступаСт Π΅Ρ‰Ρ‘ ΠΏΠΎ Π΄Π΅ΡΡΡ‚ΡŒ сообщСний. Π—Π°Ρ‚Π΅ΠΌ Π‘Ρ€ΠΎΠΊΠ΅Ρ€ 2 ΠΏΠ°Π΄Π°Π΅Ρ‚, Π° ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ А откатываСтся ΠΊ самому старому Π·Π΅Ρ€ΠΊΠ°Π»Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ находится Π½Π° Π‘Ρ€ΠΎΠΊΠ΅Ρ€Π΅ 1. ΠŸΡ€ΠΈ сбоС Π½Π΅ происходит ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ ΠžΡ‡Π΅Ρ€Π΅Π΄ΠΈ B Π΄Π²Π°Π΄Ρ†Π°Ρ‚ΡŒ сообщСний Π² мастСрС ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π΅ΡΡΡ‚ΡŒ Π² Π·Π΅Ρ€ΠΊΠ°Π»Π΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ эта ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π»Π° исходныС Π΄Π΅ΡΡΡ‚ΡŒ сообщСний.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π² кластСрах
Рис. 11. ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ А откатываСтся Π‘Ρ€ΠΎΠΊΠ΅Ρ€Π° 1 Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΠΈ сообщСний

Π’ ΠΎΠ±Π΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ поступаСт Π΅Ρ‰Π΅ ΠΏΠΎ Π΄Π΅ΡΡΡ‚ΡŒ сообщСний. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ°Π΄Π°Π΅Ρ‚ Π‘Ρ€ΠΎΠΊΠ΅Ρ€ 1. ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ A Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π½Π° Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΠΈ сообщСний. Однако Ρƒ ΠžΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π’ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. На этом этапС ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ, Π»ΠΈΠ±ΠΎ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ.

Если ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ, Ρ‚ΠΎ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ ha-promote-on-failure слСдуСт ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π² always. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, поэтому ΠΌΠΎΠΆΠ½ΠΎ просто Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ Π²ΠΎΠΎΠ±Ρ‰Π΅. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС, ΠΏΠΎ сути, ΠΌΡ‹ допускаСм сбои Π² нСсинхронизированных Π·Π΅Ρ€ΠΊΠ°Π»Π°Ρ…. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΏΠΎΡ‚Π΅Ρ€Π΅ сообщСний, Π½ΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ остаСтся доступной для чтСния ΠΈ записи.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π² кластСрах
Рис. 12. ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ А откатываСтся Π½Π° Π‘Ρ€ΠΎΠΊΠ΅Ρ€Π° 3 Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΠΈ сообщСний. ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ B откатываСтся Π½Π° Π‘Ρ€ΠΎΠΊΠ΅Ρ€Π° 3 с ΠΏΠΎΡ‚Π΅Ρ€Π΅ΠΉ дСсяти сообщСний

ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ha-promote-on-failure Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ when-synced. Π’ этом случаС вмСсто ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒΡΡ, ΠΏΠΎΠΊΠ° Π‘Ρ€ΠΎΠΊΠ΅Ρ€ 1 со своими Π΄Π°Π½Π½Ρ‹ΠΌΠΈ вСрнётся Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ. ПослС Π΅Π³ΠΎ возвращСния главная ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ снова оказываСтся Π½Π° Π‘Ρ€ΠΎΠΊΠ΅Ρ€Π΅ 1 Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Π”ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ приносится Π² ΠΆΠ΅Ρ€Ρ‚Π²Ρƒ бСзопасности Π΄Π°Π½Π½Ρ‹Ρ…. Но это рискованный Ρ€Π΅ΠΆΠΈΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти Π΄Π°ΠΆΠ΅ ΠΊ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΏΠΎΡ‚Π΅Ρ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ рассмотрим Π² блиТайшСС врСмя.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π² кластСрах
Рис. 13. ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ B остаСтся нСдоступной послС ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π‘Ρ€ΠΎΠΊΠ΅Ρ€Π° 1

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ вопрос: Β«ΠœΠΎΠΆΠ΅Ρ‚, Π»ΡƒΡ‡ΡˆΠ΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ?Β». ΠžΡ‚Π²Π΅Ρ‚ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ синхронизация являСтся Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ. Π’ΠΎ врСмя синхронизации главная ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ чтСния ΠΈΠ»ΠΈ записи!

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€. БСйчас Ρƒ нас ΠΎΡ‡Π΅Π½ΡŒ большиС ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. Как ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ вырасти Π΄ΠΎ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°? По нСскольким ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ:

  • ΠžΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ
  • Π­Ρ‚ΠΎ высокоскоростныС ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, Π° прямо сСйчас ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ
  • Π­Ρ‚ΠΎ высокоскоростныС ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» сбой, ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ Π΄ΠΎΠ³ΠΎΠ½ΡΡŽΡ‚

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π² кластСрах
Рис. 14. Π”Π²Π΅ большиС ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Ρ€Π΅ΠΆΠΈΠΌΠ°ΠΌΠΈ синхронизации

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ°Π΄Π°Π΅Ρ‚ Π‘Ρ€ΠΎΠΊΠ΅Ρ€ 3.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π² кластСрах
Рис. 15. Π‘Ρ€ΠΎΠΊΠ΅Ρ€ 3 ΠΏΠ°Π΄Π°Π΅Ρ‚, оставляя ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ мастСру ΠΈ Π·Π΅Ρ€ΠΊΠ°Π»Ρƒ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ

Π‘Ρ€ΠΎΠΊΠ΅Ρ€ 3 возвращаСтся Π² строй, ΠΈ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π½ΠΎΠ²Ρ‹Π΅ Π·Π΅Ρ€ΠΊΠ°Π»Π°. Главная ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ А Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ сообщСния Π½Π° Π½ΠΎΠ²ΠΎΠ΅ Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ, ΠΈ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ этого Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ нСдоступна. Для Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… трСбуСтся Π΄Π²Π° часа, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π΄Π²ΡƒΠΌ часам простоя для этой ΠžΡ‡Π΅Ρ€Π΅Π΄ΠΈ!

Однако ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ B остаСтся доступной Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ всСго ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π°. Она ΠΏΠΎΠΆΠ΅Ρ€Ρ‚Π²ΠΎΠ²Π°Π»Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°Π΄ΠΈ доступности.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π² кластСрах
Рис. 16. ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ остаСтся нСдоступной Π²ΠΎ врСмя синхронизации

Π§Π΅Ρ€Π΅Π· Π΄Π²Π° часа ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ A Ρ‚ΠΎΠΆΠ΅ становится доступной ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ снова Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния ΠΈ записи.

ОбновлСния

Π’Π°ΠΊΠΎΠ΅ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π²ΠΎ врСмя синхронизации затрудняСт ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ кластСров с ΠΎΡ‡Π΅Π½ΡŒ большими очСрСдями. Π’ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΡƒΠ·Π΅Π» с мастСром Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π»ΠΈΠ±ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ, Π»ΠΈΠ±ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π²ΠΎ врСмя обновлСния сСрвСра. Если ΠΌΡ‹ Π²Ρ‹Π±Π΅Ρ€Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄, Ρ‚ΠΎ потСряСм сообщСния, Ссли Π·Π΅Ρ€ΠΊΠ°Π»Π° Π½Π΅ синхронизированы. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π²ΠΎ врСмя ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° нСсинхронизированноС Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ Π½Π΅ выполняСтся. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Ρ€ΠΎΠΊΠ΅Ρ€ возвращаСтся, ΠΌΡ‹ Π½Π΅ тСряСм Π½ΠΈΠΊΠ°ΠΊΠΈΡ… сообщСний, СдинствСнным ΡƒΡ‰Π΅Ρ€Π±ΠΎΠΌ стал Ρ‚ΠΎΠ»ΡŒΠΊΠΎ простой ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. ΠŸΡ€Π°Π²ΠΈΠ»Π° повСдСния ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° Π·Π°Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΎΠΉ ha-promote-on-shutdown. МоТно ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π΄Π²ΡƒΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ:

  • always= Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° нСсинхронизированныС Π·Π΅Ρ€ΠΊΠ°Π»Π°
  • when-synced= ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° синхронизированноС Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ, ΠΈΠ½Π°Ρ‡Π΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ становится нСдоступной для чтСния ΠΈ записи. ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ возвращаСтся Π² строй, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ вСрнСтся Π±Ρ€ΠΎΠΊΠ΅Ρ€

Π’Π°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅, с большими очСрСдями приходится Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚Π΅Ρ€Π΅ΠΉ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π½Π΅Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒΡŽ.

Когда Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Π½ΡƒΠΆΠ½ΠΎ ΡƒΡ‡Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ ослоТнСниС. Π₯отя автоматичСская синхронизация Π»ΡƒΡ‡ΡˆΠ΅ для избыточности, ΠΊΠ°ΠΊ ΠΎΠ½Π° влияСт Π½Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…? ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, благодаря Π»ΡƒΡ‡ΡˆΠ΅ΠΉ избыточности RabbitMQ с мСньшСй Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ потСряСт ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ сообщСния, Π½ΠΎ Ρ‡Ρ‚ΠΎ насчСт Π½ΠΎΠ²Ρ‹Ρ… сообщСний ΠΎΡ‚ ΠΏΠ°Π±Π»ΠΈΡˆΠ΅Ρ€ΠΎΠ²?

Π—Π΄Π΅ΡΡŒ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡ‡Π΅ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

  • ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ ΠΏΠ°Π±Π»ΠΈΡˆΠ΅Ρ€ просто Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Π° Π²Ρ‹ΡˆΠ΅ΡΡ‚ΠΎΡΡ‰Π°Ρ слуТба ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΎΠ·ΠΆΠ΅ повторят ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΡƒ?
  • ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ ΠΏΠ°Π±Π»ΠΈΡˆΠ΅Ρ€ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ сообщСниС локально ΠΈΠ»ΠΈ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΡƒ ΠΏΠΎΠ·ΠΆΠ΅?

Если ΠΏΠ°Π±Π»ΠΈΡˆΠ΅Ρ€ способСн лишь ΠΎΡ‚Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ сообщСниС, Ρ‚ΠΎ, Π½Π° самом Π΄Π΅Π»Π΅, ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ доступности Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ….

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΊΠ°Ρ‚ΡŒ баланс, Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ зависит ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ситуации.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ha-promote-on-failure=when-synced

ИдСя ha-promote-on-failure= when-synced Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° нСсинхронизированноС Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ ΠΈ Ρ‚Π΅ΠΌ самым ΠΈΠ·Π±Π΅Π³Π°Π΅ΠΌ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ остаСтся нСдоступной для чтСния ΠΈΠ»ΠΈ записи. ВмСсто этого ΠΌΡ‹ пытаСмся Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΡƒΠΏΠ°Π²ΡˆΠΈΠΉ Π±Ρ€ΠΎΠΊΠ΅Ρ€ с Π½Π΅ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²ΠΈΠ» Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² качСствС мастСра Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

Но (ΠΈ это большоС Π½ΠΎ) Ссли Π±Ρ€ΠΎΠΊΠ΅Ρ€ потСрял свои Π΄Π°Π½Π½Ρ‹Π΅, Ρ‚ΠΎ Ρƒ нас большая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ потСряна! ВсС Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠΏΠ°Π»ΠΈ! Π”Π°ΠΆΠ΅ Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ Π·Π΅Ρ€ΠΊΠ°Π»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² основном Π΄ΠΎΠ³ΠΎΠ½ΡΡŽΡ‚ Π³Π»Π°Π²Π½ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, эти Π·Π΅Ρ€ΠΊΠ°Π»Π° Ρ‚ΠΎΠΆΠ΅ ΠΎΡ‚Π±Ρ€Π°ΡΡ‹Π²Π°ΡŽΡ‚ΡΡ.

Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π½ΠΎΠ²ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΡƒΠ·Π΅Π» с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ кластСру Π·Π°Π±Ρ‹Ρ‚ΡŒ потСрянный ΡƒΠ·Π΅Π» (ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ rabbitmqctl forget_cluster_node) ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Π±Ρ€ΠΎΠΊΠ΅Ρ€ с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ хоста. Пока кластСр ΠΏΠΎΠΌΠ½ΠΈΡ‚ потСрянный ΡƒΠ·Π΅Π», ΠΎΠ½ ΠΏΠΎΠΌΠ½ΠΈΡ‚ ΡΡ‚Π°Ρ€ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΈ нСсинхронизированныС Π·Π΅Ρ€ΠΊΠ°Π»Π°. Когда кластСру говорят Π·Π°Π±Ρ‹Ρ‚ΡŒ потСрянный ΡƒΠ·Π΅Π», эта ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ забываСтся. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π½ΠΎΠ²ΠΎ Π΅Π³ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ. ΠœΡ‹ потСряли всС Π΄Π°Π½Π½Ρ‹Π΅, хотя Ρƒ нас Π±Ρ‹Π»ΠΈ Π·Π΅Ρ€ΠΊΠ°Π»Π° с частичным Π½Π°Π±ΠΎΡ€ΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…. Π›ΡƒΡ‡ΡˆΠ΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π° нСсинхронизированноС Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ!

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ручная синхронизация (ΠΈ Π½Π΅Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ синхронизации) Π² сочСтании с ha-promote-on-failure=when-synced, Π½Π° ΠΌΠΎΠΉ взгляд, довольно рискованна. Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ говорят, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ сущСствуСт для бСзопасности Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ это ΠΎΠ±ΠΎΡŽΠ΄ΠΎΠΎΡΡ‚Ρ€Ρ‹ΠΉ Π½ΠΎΠΆ.

ΠŸΠ΅Ρ€Π΅Π±Π°Π»Π°Π½ΡΠΈΡ€ΠΎΠ²ΠΊΠ° мастСров

Как ΠΈ Π±Ρ‹Π»ΠΎ ΠΎΠ±Π΅Ρ‰Π°Π½ΠΎ, возвращаСмся ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ скоплСния всСх мастСров Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΡƒΠ·Π»Π°Ρ…. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ Π΄Π°ΠΆΠ΅ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Β«ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰Π΅Π³ΠΎΒ» (rolling) обновлСния кластСра. Π’ кластСрС с трСмя ΡƒΠ·Π»Π°ΠΌΠΈ всС Π³Π»Π°Π²Π½Ρ‹Π΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ скопятся Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ»ΠΈ Π΄Π²ΡƒΡ… ΡƒΠ·Π»Π°Ρ….

ΠŸΠ΅Ρ€Π΅Π±Π°Π»Π°Π½ΡΠΈΡ€ΠΎΠ²ΠΊΠ° мастСров ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎΠΉ ΠΏΠΎ Π΄Π²ΡƒΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ:

  • НСт Ρ…ΠΎΡ€ΠΎΡˆΠΈΡ… инструмСнтов для выполнСния пСрСбалансировки
  • Бинхронизация ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ

Для пСрСбалансировки Π΅ΡΡ‚ΡŒ сторонний ΠΏΠ»Π°Π³ΠΈΠ½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ поддСрТиваСтся ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎ. ΠžΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сторонних ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² Π² руководствС RabbitMQ сказано: «Плагин прСдоставляСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ инструмСнты настройки ΠΈ отчётности, Π½ΠΎ Π½Π΅ поддСрТиваСтся ΠΈ Π½Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ RabbitMQ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π½Π° свой страх ΠΈ риск».

Π•ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Ρ‚Ρ€ΡŽΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π³Π»Π°Π²Π½ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ HA. Π’ руководствС упоминаСтся скрипт для этого. Он Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  • УдаляСт всС Π·Π΅Ρ€ΠΊΠ°Π»Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ с Π±ΠΎΠ»Π΅Π΅ высоким ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ, Ρ‡Π΅ΠΌ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° HA.
  • Π˜Π·ΠΌΠ΅Π½ΡΠ΅Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ HA для использования Ρ€Π΅ΠΆΠΈΠΌΠ° Β«ΡƒΠ·Π»Ρ‹Β» с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΡƒΠ·Π»Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ трСбуСтся пСрСнСсти Π³Π»Π°Π²Π½ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ.
  • Π‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ для ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ.
  • ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ удаляСт Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ. ВступаСт Π² дСйствиС исходная ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° HA ΠΈ создаСтся Π½ΡƒΠΆΠ½ΠΎΠ΅ количСство Π·Π΅Ρ€ΠΊΠ°Π».

НСдостаток Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΡΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Ссли Ρƒ вас большиС ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈΠ»ΠΈ строгиС трСбования ΠΊ избыточности.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ посмотрим, ΠΊΠ°ΠΊ кластСры RabbitMQ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с сСтСвыми Ρ€Π°Π·Π΄Π΅Π»Π°ΠΌΠΈ.

ΠΠ°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ связности

Π£Π·Π»Ρ‹ распрСдСлСнной систСмы ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ сСтСвыми связями, Π° сСтСвыС связи ΠΌΠΎΠ³ΡƒΡ‚ ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ. Частота ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ зависит ΠΎΡ‚ локальной инфраструктуры ΠΈΠ»ΠΈ надСТности Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±Π»Π°ΠΊΠ°. Π’ любом случаС, распрСдСлСнныС систСмы Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π² состоянии ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ с Π½ΠΈΠΌΠΈ. Π‘Π½ΠΎΠ²Π° ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°ΠΌΠΈ Π²Ρ‹Π±ΠΎΡ€ ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒΡŽ, ΠΈ снова Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ Π½ΠΎΠ²ΠΎΡΡ‚ΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ RabbitMQ обСспСчиваСт ΠΎΠ±Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° (просто Π½Π΅ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ).

Π‘ RabbitMQ Ρƒ нас Π΄Π²Π΅ основных ΠΎΠΏΡ†ΠΈΠΈ:

  • Π Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ логичСскоС Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ (split-brain). Π­Ρ‚ΠΎ обСспСчиваСт Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΏΡ€ΠΎΠ²ΠΎΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚Π΅Ρ€ΡŽ Π΄Π°Π½Π½Ρ‹Ρ….
  • Π—Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ логичСскоС Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅. ΠœΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ краткосрочной ΠΏΠΎΡ‚Π΅Ρ€Π΅ доступности Π² зависимости ΠΎΡ‚ способа ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΊ кластСру. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΠΎΠ»Π½ΠΎΠΉ нСдоступности Π² кластСрС ΠΈΠ· Π΄Π²ΡƒΡ… ΡƒΠ·Π»ΠΎΠ².

Но Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ логичСскоС Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅? Π­Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° кластСр раздСляСтся Π½Π°Π΄Π²ΠΎΠ΅ ΠΈΠ·-Π·Π° ΠΏΠΎΡ‚Π΅Ρ€ΠΈ сСтСвых связСй. На ΠΊΠ°ΠΆΠ΄ΠΎΠΉ сторонС Π·Π΅Ρ€ΠΊΠ°Π»Π° ΠΏΠΎΠ²Ρ‹ΡˆΠ°ΡŽΡ‚ΡΡ Π΄ΠΎ мастСра, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π² ΠΈΡ‚ΠΎΠ³Π΅ Π½Π° ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ приходится нСсколько мастСров.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π² кластСрах
Рис. 17. Главная ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΈ Π΄Π²Π° Π·Π΅Ρ€ΠΊΠ°Π»Π°, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ ΡƒΠ·Π»Π΅. Π—Π°Ρ‚Π΅ΠΌ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ сСтСвой сбой, ΠΈ ΠΎΠ΄Π½ΠΎ Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ отдСляСтся. ΠžΡ‚Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΡƒΠ·Π΅Π» Π²ΠΈΠ΄ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π΄Π²Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΡ‚Π²Π°Π»ΠΈΠ»ΠΈΡΡŒ, ΠΈ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ³Π°Π΅Ρ‚ свои Π·Π΅Ρ€ΠΊΠ°Π»Π° Π΄ΠΎ мастСра. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π΄Π²Π΅ Π³Π»Π°Π²Π½Ρ‹Ρ… ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, ΠΈ ΠΎΠ±Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ запись ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅.

Если ΠΏΠ°Π±Π»ΠΈΡˆΠ΅Ρ€Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΎΠ±Π° мастСра, Ρƒ нас получится Π΄Π²Π΅ расходящиСся ΠΊΠΎΠΏΠΈΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ.

Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ€Π΅ΠΆΠΈΠΌΡ‹ RabbitMQ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Π»ΠΈΠ±ΠΎ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ, Π»ΠΈΠ±ΠΎ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ.

Π Π΅ΠΆΠΈΠΌ Ignore (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ)

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

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π² кластСрах
Рис. 18. Π’Ρ€ΠΈ ΠΏΠ°Π±Π»ΠΈΡˆΠ΅Ρ€Π° связаны с трСмя Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°ΠΌΠΈ. Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ кластСр направляСт всС запросы Π² Π³Π»Π°Π²Π½ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½Π° Π‘Ρ€ΠΎΠΊΠ΅Ρ€Π΅ 2.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ тСряСм Π‘Ρ€ΠΎΠΊΠ΅Ρ€Π° 3. Он Π²ΠΈΠ΄ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π±Ρ€ΠΎΠΊΠ΅Ρ€Ρ‹ ΠΎΡ‚Π²Π°Π»ΠΈΠ»ΠΈΡΡŒ, ΠΈ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ³Π°Π΅Ρ‚ своС Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ Π΄ΠΎ мастСра. Π’Π°ΠΊ происходит логичСскоС Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π² кластСрах
Рис. 19. ЛогичСскоС Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ (split-brain). Записи ΠΈΠ΄ΡƒΡ‚ Π² Π΄Π²Π΅ Π³Π»Π°Π²Π½Ρ‹Π΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, ΠΈ Π΄Π²Π΅ ΠΊΠΎΠΏΠΈΠΈ расходятся.

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

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π² кластСрах
Рис. 20. Администратор ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π‘Ρ€ΠΎΠΊΠ΅Ρ€Π° 3.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π² кластСрах
Рис. 21. Администратор запускаСт Π‘Ρ€ΠΎΠΊΠ΅Ρ€Π° 3, ΠΈ ΠΎΠ½ присоСдиняСтся ΠΊ кластСру, тСряя всС сообщСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π°ΠΌ ΠΎΡΡ‚Π°Π²Π°Π»ΠΈΡΡŒ.

Π’ΠΎ врСмя ΠΏΠΎΡ‚Π΅Ρ€ΠΈ связности ΠΈ послС Π΅Ρ‘ восстановлСния кластСр ΠΈ эта ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π±Ρ‹Π»ΠΈ доступны для чтСния ΠΈ записи.

Π Π΅ΠΆΠΈΠΌ Autoheal

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

Π Π΅ΠΆΠΈΠΌ Pause Minority

Если ΠΌΡ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΠΌ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ логичСского раздСлСния, Ρ‚ΠΎ наш СдинствСнный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ β€” ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ чтСния ΠΈ записи Π½Π° мСньшСй сторонС послС Ρ€Π°Π·Π΄Π΅Π»Π° кластСра. Когда Π±Ρ€ΠΎΠΊΠ΅Ρ€ Π²ΠΈΠ΄ΠΈΡ‚, Ρ‡Ρ‚ΠΎ находится Π½Π° мСньшСй сторонС, Ρ‚ΠΎ приостанавливаСт Ρ€Π°Π±ΠΎΡ‚Ρƒ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ всС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ соСдинСния ΠΈ отказываСтся ΠΎΡ‚ Π»ΡŽΠ±Ρ‹Ρ… Π½ΠΎΠ²Ρ‹Ρ…. Один Ρ€Π°Π· Π² сСкунду ΠΎΠ½ провСряСт восстановлСниС связности. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠ²ΡΠ·Π½ΠΎΡΡ‚ΡŒ восстановлСна, ΠΎΠ½ возобновляСт Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈ присоСдиняСтся ΠΊ кластСру.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π² кластСрах
Рис. 22. Π’Ρ€ΠΈ ΠΏΠ°Π±Π»ΠΈΡˆΠ΅Ρ€Π° связаны с трСмя Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°ΠΌΠΈ. Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ кластСр направляСт всС запросы Π² Π³Π»Π°Π²Π½ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½Π° Π‘Ρ€ΠΎΠΊΠ΅Ρ€Π΅ 2.

Π—Π°Ρ‚Π΅ΠΌ Π‘Ρ€ΠΎΠΊΠ΅Ρ€Ρ‹ 1 ΠΈ 2 ΠΎΡ‚Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‚ Π‘Ρ€ΠΎΠΊΠ΅Ρ€Π° 3. ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Ρ‚ΡŒ своС Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ Π΄ΠΎ мастСра, Π‘Ρ€ΠΎΠΊΠ΅Ρ€ 3 приостанавливаСт Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈ становится нСдоступным.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π² кластСрах
Рис. 23. Π‘Ρ€ΠΎΠΊΠ΅Ρ€ 3 приостанавливаСт Ρ€Π°Π±ΠΎΡ‚Ρƒ, ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ всСх ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΈ ΠΎΡ‚Π²Π΅Ρ€Π³Π°Π΅Ρ‚ запросы Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠ²ΡΠ·Π½ΠΎΡΡ‚ΡŒ восстановлСна, ΠΎΠ½ возвращаСтся Π² кластСр.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π³Π΄Π΅ главная ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ находится Π½Π° Π‘Ρ€ΠΎΠΊΠ΅Ρ€Π΅ 3.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π² кластСрах
Рис. 24. Главная ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½Π° Π‘Ρ€ΠΎΠΊΠ΅Ρ€Π΅ 3.

Π—Π°Ρ‚Π΅ΠΌ происходит Ρ‚Π° ΠΆΠ΅ потСря связности. Π‘Ρ€ΠΎΠΊΠ΅Ρ€ 3 встаёт Π½Π° ΠΏΠ°ΡƒΠ·Ρƒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ находится Π½Π° мСньшСй сторонС. На Π΄Ρ€ΡƒΠ³ΠΎΠΉ сторонС ΡƒΠ·Π»Ρ‹ видят, Ρ‡Ρ‚ΠΎ Π‘Ρ€ΠΎΠΊΠ΅Ρ€ 3 отвалился, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ староС Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ с Π‘Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² 1 ΠΈ 2 ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ΡΡ Π΄ΠΎ мастСра.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π² кластСрах
Рис. 25. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ Π‘Ρ€ΠΎΠΊΠ΅Ρ€Ρƒ 2 ΠΏΡ€ΠΈ нСдоступности Π‘Ρ€ΠΎΠΊΠ΅Ρ€Π° 3.

Когда ΡΠ²ΡΠ·Π½ΠΎΡΡ‚ΡŒ восстановлСна, Π‘Ρ€ΠΎΠΊΠ΅Ρ€ 3 присоСдинится ΠΊ кластСру.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π² кластСрах
Рис. 26. ΠšΠ»Π°ΡΡ‚Π΅Ρ€ вСрнулся ΠΊ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅.

Π—Π΄Π΅ΡΡŒ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ, Ссли ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅ΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² Π½Π° Π±Γ³Π»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»Π°. Для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ситуаций Π»ΠΈΡ‡Π½ΠΎ я Π±Ρ‹ Π²Ρ‹Π±Ρ€Π°Π» Ρ€Π΅ΠΆΠΈΠΌ Pause Minority, Π½ΠΎ это Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ зависит ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ случая.

Для обСспСчСния доступности Π²Π°ΠΆΠ½ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ ΠΊ ΡƒΠ·Π»Ρƒ. Рассмотрим наши Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹.

ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΠ΅ связности ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ²

Π£ нас нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ², ΠΊΠ°ΠΊ послС ΠΏΠΎΡ‚Π΅Ρ€ΠΈ связности Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ кластСра ΠΈΠ»ΠΈ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ ΡƒΠ·Π»Ρ‹ (послС сбоя ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°). Π‘Π½Π°Ρ‡Π°Π»Π° Π΄Π°Π²Π°ΠΉΡ‚Π΅ вспомним, Ρ‡Ρ‚ΠΎ конкрСтная ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ размСщаСтся Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ ΡƒΠ·Π»Π΅, Π½ΠΎ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡ ΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π½Π° всСх ΡƒΠ·Π»Π°Ρ…. ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΊ Π»ΡŽΠ±ΠΎΠΌΡƒ ΡƒΠ·Π»Ρƒ, Π° внутрСнняя ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚ ΠΈΡ… ΠΊΡƒΠ΄Π° Π½Π°Π΄ΠΎ. Но ΠΊΠΎΠ³Π΄Π° ΡƒΠ·Π΅Π» приостановлСн, ΠΎΠ½ ΠΎΡ‚Π²Π΅Ρ€Π³Π°Π΅Ρ‚ соСдинСния, поэтому ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΡƒΠ·Π»Ρƒ. Если ΡƒΠ·Π΅Π» отвалился, ΠΎΠ½ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΌΠ°Π»ΠΎ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ.

Наши Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹:

  • Доступ ΠΊ кластСру осущСствляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ балансировщика Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ просто цикличСски ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ ΡƒΠ·Π»Ρ‹, Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Π΅ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π΄ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ. Если ΡƒΠ·Π΅Π» Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΠ»ΠΈ приостановлСн, Ρ‚ΠΎ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ этому ΡƒΠ·Π»Ρƒ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡΡ Π½Π΅ΡƒΠ΄Π°Ρ‡Π΅ΠΉ, Π½ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ ΠΏΠΎΠΉΠ΄ΡƒΡ‚ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ сСрвСры (Π² цикличСском Ρ€Π΅ΠΆΠΈΠΌΠ΅). Π­Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ связности ΠΈΠ»ΠΈ ΡƒΠΏΠ°Π²ΡˆΠ΅Π³ΠΎ сСрвСра, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ быстро поднят.
  • Доступ ΠΊ кластСру Ρ‡Π΅Ρ€Π΅Π· балансировщик Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ приостановлСнных/ΡƒΠΏΠ°Π²ΡˆΠΈΡ… ΡƒΠ·Π»ΠΎΠ² ΠΈΠ· списка, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Ρ‹. Если быстро это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, ΠΈ Ссли ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ способны Π½Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Π΅ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΏΠΎΡΡ‚ΠΎΡΠ½Π½ΡƒΡŽ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ.
  • Π”Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ список всСх ΡƒΠ·Π»ΠΎΠ², Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ случайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ…. Если ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΡƒΠ·Π»Ρƒ Π² спискС, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡΡ.
  • Π£Π±Ρ€Π°Ρ‚ΡŒ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΎΡ‚ ΡƒΠΏΠ°Π²ΡˆΠ΅Π³ΠΎ/приостановлСнного ΡƒΠ·Π»Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ DNS. Π­Ρ‚ΠΎ дСлаСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΠ°Π»ΠΎΠ³ΠΎ TTL.

Π’Ρ‹Π²ΠΎΠ΄Ρ‹

Π£ кластСризации RabbitMQ свои прСимущСства ΠΈ нСдостатки. НаиболСС ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Π΅ нСдостатки Π·Π°ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ:

  • ΠΏΡ€ΠΈ присоСдинСнии ΠΊ кластСру ΡƒΠ·Π»Ρ‹ ΠΎΡ‚Π±Ρ€Π°ΡΡ‹Π²Π°ΡŽΡ‚ свои Π΄Π°Π½Π½Ρ‹Π΅;
  • Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π°Ρ синхронизация ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ нСдоступности ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ.

ВсС Ρ‚Ρ€ΡƒΠ΄Π½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π²Ρ‹Ρ‚Π΅ΠΊΠ°ΡŽΡ‚ ΠΈΠ· этих Π΄Π²ΡƒΡ… особСнностСй Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹. Если Π±Ρ‹ RabbitMQ ΠΌΠΎΠ³ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈ воссоСдинСнии кластСра, Ρ‚ΠΎ синхронизация происходила Π±Ρ‹ быстрСС. Если Π±Ρ‹ ΠΎΠ½ Π±Ρ‹Π» способСн Π½Π° Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ, Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π» большиС ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. УстранСниС этих Π΄Π²ΡƒΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΡΠ΅Ρ€ΡŒΡ‘Π·Π½ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΠ»ΠΎ Π±Ρ‹ характСристики RabbitMQ Π² качСствС отказоустойчивой ΠΈ высокодоступной Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями. Π― Π±Ρ‹ Π½Π΅ Ρ€Π΅ΡˆΠΈΠ»ΡΡ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Ρ‚ΡŒ RabbitMQ с кластСризациСй Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ситуациях:

  • НСнадёТная ΡΠ΅Ρ‚ΡŒ.
  • НСнадёТноС Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅.
  • ΠžΡ‡Π΅Π½ΡŒ большиС ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ.

Π§Ρ‚ΠΎ касаСтся настроСк для высокой доступности, Ρ‚ΠΎ рассмотритС Ρ‚Π°ΠΊΠΈΠ΅:

  • ha-promote-on-failure=always
  • ha-sync-mode=manual
  • cluster_partition_handling=ignore (ΠΈΠ»ΠΈ autoheal)
  • устойчивыС сообщСния
  • ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ ΠΊ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌΡƒ ΡƒΠ·Π»Ρƒ, ΠΊΠΎΠ³Π΄Π° ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΡƒΠ·Π΅Π» Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΈΠ· строя

Для согласованности (бСзопасности Π΄Π°Π½Π½Ρ‹Ρ…) рассмотритС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ настройки:

  • Publisher Confirms ΠΈ Manual Acknowledgements Π½Π° сторонС потрСбитСля
  • ha-promote-on-failure=when-synced, Ссли ΠΈΠ·Π΄Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΡƒ ΠΏΠΎΠ·ΠΆΠ΅ ΠΈ Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅! Π˜Π½Π°Ρ‡Π΅ ΡΡ‚Π°Π²ΡŒΡ‚Π΅ =always.
  • ha-sync-mode=automatic (Π½ΠΎ для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ€ΡƒΡ‡Π½ΠΎΠΉ Ρ€Π΅ΠΆΠΈΠΌ; ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅, Π½Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ Π»ΠΈ Π½Π΅Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΊ ΠΏΠΎΡ‚Π΅Ρ€Π΅ сообщСний)
  • Ρ€Π΅ΠΆΠΈΠΌ Pause Minority
  • устойчивыС сообщСния

ΠœΡ‹ рассмотрСли Π΅Ρ‰Π΅ Π½Π΅ всС вопросы отказоустойчивости ΠΈ высокой доступности; Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊ бСзопасно Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ административныС ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ (Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰ΠΈΠ΅ обновлСния). НуТно ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎ Ρ„Π΅Π΄Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ ΠΏΠ»Π°Π³ΠΈΠ½Π΅ Shovel.

Если я Π΅Ρ‰Π΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ упустил, поТалуйста, Π΄Π°ΠΉΡ‚Π΅ Π·Π½Π°Ρ‚ΡŒ.

Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΉ пост, Π³Π΄Π΅ я ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽ ΠΏΠΎΠ³Ρ€ΠΎΠΌ Π² кластСрС RabbitMQ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Docker ΠΈ Blockade, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сцСнарии ΠΏΠΎΡ‚Π΅Ρ€ΠΈ сообщСний, описанныС Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.

ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ сСрии:
β„–1 β€” habr.com/ru/company/itsumma/blog/416629
β„–2 β€” habr.com/ru/company/itsumma/blog/418389
β„–3 β€” habr.com/ru/company/itsumma/blog/437446

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