RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд

В мақолаи охирин мо ба кластеркунии RabbitMQ барои таҳаммулпазирии хатогиҳо ва дастрасии баланд назар кардем. Акнун биёед ба Апачи Кафка амиқтар кобед.

Дар ин ҷо воҳиди такрорӣ тақсимот аст. Ҳар як мавзӯъ як ё якчанд бахш дорад. Ҳар як бахш пешвое дорад, ки пайрав ё бе пайравон дорад. Ҳангоми сохтани мавзӯъ шумо шумораи қисмҳо ва коэффисиенти такрориро муайян мекунед. Қимати муқаррарӣ 3 аст, ки маънои се нусхаро дорад: як роҳбар ва ду пайрав.

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд
Райс. 1. Чор бахш дар байни се брокер тақсим карда мешавад

Ҳама дархостҳои хондан ва навиштан ба пешво мераванд. Пайравон мунтазам ба пешво дархост мефиристанд, то паёмҳои охиринро гиранд. Истеъмолкунандагон ҳеҷ гоҳ ба пайравон муроҷиат намекунанд; охирин танҳо барои зиёдатӣ ва таҳаммулпазирии хатоҳо вуҷуд дорад.

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд

Нокомии тақсимот

Вақте ки брокер ноком мешавад, аксар вақт роҳбарони якчанд бахшҳо ноком мешаванд. Дар хар кадоми онхо пайрави гирехи дигар сарвар мешавад. Дар асл, ин на ҳамеша чунин аст, зеро омили синхронизатсия низ таъсир мерасонад: оё пайравони ҳамоҳангшуда мавҷуданд ва агар не, гузариш ба нусхаи ҳамоҳангнашуда иҷозат дода мешавад. Аммо биёед холо корро мураккаб накунем.

Брокер 3 шабакаро тарк мекунад ва барои бахши 2 дар брокери 2 роҳбари нав интихоб мешавад.

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд
Райс. 2. Брокер 3 мемирад ва пайрави ӯ дар брокери 2 роҳбари нави қисми 2 интихоб мешавад

Сипас брокер 1 тарк мекунад ва бахши 1 низ пешвои худро аз даст медиҳад, ки нақш ба брокери 2 мегузарад.

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд
Райс. 3. Як брокер мондааст. Ҳама роҳбарон дар як брокер бо сифр зиёдатӣ ҳастанд

Вақте ки брокери 1 ба онлайн бармегардад, он чаҳор пайравро илова мекунад ва ба ҳар як қисм каме изофӣ медиҳад. Аммо ҳамаи роҳбарон то ҳол дар брокери 2 монданд.

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд
Райс. 4. Роҳбарон дар брокери 2 мемонанд

Вақте ки брокери 3 пайдо мешавад, мо ба се нусха барои як қисм бармегардем. Аммо ҳамаи роҳбарон то ҳол дар брокери 2 ҳастанд.

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд
Райс. 5. Ҷойгиркунии номутаносиби роҳбарон пас аз барқарорсозии брокерҳои 1 ва 3

Кафка дорои абзори беҳтари мувозинати пешво нисбат ба RabbitMQ мебошад. Дар он ҷо шумо бояд як плагин ё скрипти тарафи сеюмро истифода баред, ки сиёсати интиқоли гиреҳи асосиро тавассути коҳиш додани зиёдатӣ ҳангоми муҳоҷират тағир дод. Илова бар ин, барои навбатҳои калон мо маҷбур шудем, ки ҳангоми ҳамоҳангсозӣ дастнорасиро қабул кунем.

Кафка мафҳуми "репликаҳои бартарӣ" барои нақши роҳбарро дорад. Вақте ки қисмҳои мавзӯъ эҷод мешаванд, Кафка кӯшиш мекунад, ки пешвоёнро дар байни гиреҳҳо баробар тақсим кунад ва он пешвоёни аввалро ҳамчун афзалиятнок қайд кунад. Бо мурури замон, бо сабаби аз нав боркунии сервер, нокомиҳо ва вайроншавии пайвастшавӣ, роҳбарон метавонанд дар дигар гиреҳҳо, ба монанди дар ҳолати фавқулоддаи дар боло тавсифшуда хотима диҳанд.

Барои ислоҳи ин, Кафка ду роҳро пешниҳод мекунад:

  • Интихоб auto.leader.rebalance.enable=true ба гиреҳи контроллер имкон медиҳад, ки ба таври худкор роҳбаронро ба репликаҳои афзалиятнок дубора таъин кунад ва ба ин васила тақсимоти якхела барқарор кунад.
  • Администратор метавонад скриптро иҷро кунад кафка-бартарӣ-реплика-интихобот.ш барои аз нав таъин кардани дастӣ.

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд
Райс. 6. Репликањо пас аз мувозинат

Ин як варианти соддакардашудаи нокомӣ буд, аммо воқеият мураккабтар аст, гарчанде ки дар ин ҷо ҳеҷ чизи хеле мураккаб нест. Ҳамааш ба репликаҳои ҳамоҳангшуда (In-Sync Replicas, ISR) рост меояд.

Репликаҳои ҳамоҳангшуда (ISR)

ISR маҷмӯи нусхаҳои бахшест, ки "синхронӣ" (синхронизатсия) ҳисобида мешавад. Роҳбар ҳаст, аммо пайравонаш шояд набошад. Пайрав синхроншуда ҳисобида мешавад, агар он пеш аз ба охир расидани фосила нусхаҳои дақиқи ҳамаи паёмҳои пешворо таҳия карда бошад. replica.lag.time.max.ms.

Пайрав аз маҷмӯи ISR хориҷ карда мешавад, агар:

  • барои интихоб кардани фосила дархосте накардааст replica.lag.time.max.ms (мурдашуда тахмин зада мешавад)
  • дар давоми фосила ба навсозӣ муяссар нашуд replica.lag.time.max.ms (суст ҳисобида мешавад)

Пайравон дар фосила дархостҳои интихоб мекунанд replica.fetch.wait.max.ms, ки пешфарз ба 500ms аст.

Барои ба таври возеҳ шарҳ додани ҳадафи ISR, мо бояд ба тасдиқҳои истеҳсолкунанда ва баъзе сенарияҳои нокомӣ назар кунем. Истеҳсолкунандагон метавонанд интихоб кунанд, вақте ки брокер тасдиқро мефиристад:

  • acks = 0, тасдиқ фиристода нашудааст
  • acks=1, тасдиқ пас аз навиштани паём ба журнали маҳаллии худ фиристода мешавад
  • acks=ҳама, тасдиқ пас аз он фиристода мешавад, ки ҳама репликаҳо дар ISR паёмро ба гузоришҳои маҳаллӣ навиштаанд

Дар истилоҳоти Кафка, агар ISR паёмро захира карда бошад, он "содир карда шудааст". Acks=ҳама беҳтарин вариант аст, аммо инчунин таъхири иловагиро илова мекунад. Биёед ду мисоли нокомиро бубинем ва чӣ гуна вариантҳои гуногуни "аксҳо" бо консепсияи ISR мутақобила мекунанд.

Acks = 1 ва ISR

Дар ин мисол, мо мебинем, ки агар роҳбар мунтазири ҳар як паёми ҳама пайравон набошад, пас талафоти маълумот дар сурати ноком шудани роҳбар имконпазир аст. Гузариш ба пайрави ҳамоҳангнашуда метавонад тавассути танзим фаъол ё ғайрифаъол карда шавад нопок.пешвои.интихобот.фаъол.

Дар ин мисол, истеҳсолкунанда арзиши acks = 1 дорад. Қисм дар ҳар се брокер тақсим карда мешавад. Брокер 3 дар паси худ қарор дорад, он ҳашт сония пеш бо пешво ҳамоҳанг карда шудааст ва ҳоло 7456 паёмро паси сар мекунад. Брокер 1 ҳамагӣ як сония қафо монд. Продюсери мо паём мефиристад ва бе сарбории пайравони суст ё мурдае, ки пешво мунтазири он нест, зуд посух мегирад.

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд
Райс. 7. ISR бо се нусха

Брокер 2 ноком мешавад ва истеҳсолкунанда хатогии пайвастшавӣ мегирад. Пас аз гузаштани роҳбарӣ ба брокери 1, мо 123 паёмро аз даст медиҳем. Пайрав дар брокери 1 қисми ISR буд, аммо ҳангоми афтодани он бо пешво пурра ҳамоҳанг карда нашуд.

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд
Райс. 8. Паёмҳо ҳангоми садама гум мешаванд

Дар конфигуратсия bootstrap.servers Истеҳсолкунанда дорои якчанд брокерҳои номбаршуда аст ва метавонад аз брокери дигар пурсад, ки раҳбари бахши нав аст. Он гоҳ бо брокери 1 пайваст муқаррар мекунад ва фиристодани паёмҳоро идома медиҳад.

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд
Райс. 9. Фиристодани паёмҳо пас аз танаффуси кӯтоҳ идома меёбад

Брокер 3 боз ҳам паситар аст. Он дархостҳои воридотӣ мекунад, аммо ҳамоҳанг карда наметавонад. Ин метавонад бо сабаби сустии пайвасти шабакавӣ байни брокерҳо, мушкилоти нигаҳдорӣ ва ғайра бошад. Он аз ISR хориҷ карда шудааст. Ҳоло ISR аз як реплика иборат аст - пешво! Истеҳсолкунанда фиристодани паёмҳо ва гирифтани тасдиқҳоро идома медиҳад.

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд
Райс. 10. Пайрав дар брокери 3 аз ISR хориҷ карда мешавад

Брокер 1 поён меравад ва нақши роҳбарӣ ба брокери 3 бо гум шудани 15286 паём мегузарад! Истеҳсолкунанда паёми хатогии пайвастшавӣ мегирад. Гузариш ба пешвои берун аз ISR танҳо бо сабаби танзим имконпазир буд unclean.leader.election.enable=true. Агар дар он насб карда шуда бошад бардурӯғ, пас гузариш ба амал намеояд ва ҳама дархостҳои хондан ва навиштан рад карда мешаванд. Дар ин ҳолат, мо интизор мешавем, ки брокери 1 бо маълумоти беҳамтои худ дар реплика бармегардад, ки дубора роҳбариро ба ӯҳда мегирад.

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд
Райс. 11. Брокер 1 меафтад. Вақте ки нокомӣ рух медиҳад, шумораи зиёди паёмҳо гум мешаванд

Истеҳсолкунанда бо брокери охирин робита барқарор мекунад ва мебинад, ки ӯ ҳоло роҳбари секция аст. Вай фиристодани паёмҳоро ба брокери 3 оғоз мекунад.

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд
Райс. 12. Пас аз танаффуси кӯтоҳ, паёмҳо дубора ба бахши 0 фиристода мешаванд

Мо дидем, ки ба ғайр аз таваққуфҳои кӯтоҳ барои барқарор кардани робитаҳои нав ва ҷустуҷӯи роҳбари нав, истеҳсолкунанда пайваста паёмҳо мефиристад. Ин конфигуратсия дастрасиро аз ҳисоби мувофиқат (бехатарии маълумот) таъмин мекунад. Кафка ҳазорҳо паёмро гум кард, аммо қабули навиштаҳои навро идома дод.

Acks = ҳама ва ISR

Биёед ин сенарияро бори дигар такрор кунем, аммо бо acks = ҳама. Брокер 3 ба ҳисоби миёна XNUMX сония таъхир дорад. Истеҳсолкунанда паём мефиристад бо acks = ҳама, ва ҳоло ҷавоби зуд намегирад. Роҳбар мунтазири он аст, ки паём аз ҷониби ҳама репликаҳо дар ISR ҳифз карда шавад.

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд
Райс. 13. ISR бо се нусха. Яке суст аст, ки боиси таъхири сабт мегардад

Пас аз чор сонияи таъхири иловагӣ, брокери 2 акк мефиристад. Ҳама нусхаҳо ҳоло пурра нав карда шудаанд.

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд
Райс. 14. Ҳама репликаҳо паёмҳоро захира мекунанд ва акс мефиристанд

Брокер 3 акнун боз ҳам қафо мемонад ва аз ISR хориҷ карда мешавад. Вақти таъхир ба таври назаррас коҳиш ёфтааст, зеро дар ISR нусхаҳои суст боқӣ намондаанд. Брокер 2 ҳоло танҳо брокери 1-ро интизор аст ва ӯ ба ҳисоби миёна 500 мс ақибмонӣ дорад.

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд
Райс. 15. Нусхаи брокери 3 аз ISR хориҷ карда мешавад

Сипас брокери 2 меафтад ва роҳбарӣ бидуни талафоти паёмҳо ба брокери 1 мегузарад.

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд
Райс. 16. Брокер 2 меафтад

Истеҳсолкунанда пешвои нав пайдо мекунад ва ба ӯ паём фиристоданро оғоз мекунад. Вақти таъхир боз кам мешавад, зеро ISR ҳоло аз як нусха иборат аст! Бинобар ин, вариант acks = ҳама зиёдатӣ намедиҳад.

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд
Райс. 17. Реплика дар брокери 1 бидуни гум кардани паёмҳо пешсаф аст

Сипас брокери 1 ба садама дучор мешавад ва роҳбарӣ бо талафоти 3 паём ба брокери 14238 меравад!

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд
Райс. 18. Брокер 1 мемирад ва гузариши роҳбарӣ бо танзимоти нопок боиси талафоти васеъи маълумот мегардад

Мо вариантро насб карда натавонистем нопок.пешвои.интихобот.фаъол ба маъно ҳақиқӣ. Бо нобаёнӣ он баробар аст бардурӯғ. Танзимотҳо acks = ҳама с unclean.leader.election.enable=true дастрасиро бо баъзе амнияти иловагии додаҳо таъмин мекунад. Аммо тавре ки шумо мебинед, мо метавонем паёмҳоро аз даст диҳем.

Аммо агар мо хоҳем, ки амнияти маълумотро зиёд кунем? гузошта метавонед unclean.leader.election.enable = бардурӯғ, аммо ин моро ҳатман аз талафи маълумот муҳофизат намекунад. Агар роҳбар сахт афтода, маълумотро бо худ гирифта бошад, пас паёмҳо то ҳол гум мешаванд, илова бар ин, то он даме, ки администратор вазъро барқарор накунад, дастрасӣ аз даст меравад.

Беҳтар аст, ки ҳама паёмҳо зиёдатӣ бошанд ва дар акси ҳол сабтро партоед. Пас, ҳадди аққал аз нуқтаи назари брокер, талафи маълумот танҳо дар сурати ду ё зиёда нокомии ҳамзамон имконпазир аст.

Acks = ҳама, min.insync.replicas ва ISR

Бо конфигуратсияи мавзӯъ min.insync.replicas Мо сатҳи амнияти маълумотро баланд мебардорем. Биёед қисми охирини сенарияи қаблиро бори дигар гузаронем, аммо ин дафъа бо min.insync.replicas=2.

Ҳамин тавр, брокери 2 дорои пешвои реплика аст ва пайрави брокери 3 аз ISR хориҷ карда мешавад.

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд
Райс. 19. ISR аз ду нусха

Брокер 2 меафтад ва роҳбарӣ ба брокери 1 бе талафоти паём мегузарад. Аммо ҳоло ISR танҳо аз як нусха иборат аст. Ин ба шумораи ҳадди ақал барои гирифтани сабтҳо мувофиқат намекунад ва аз ин рӯ брокер ба кӯшиши навиштан бо хатогӣ ҷавоб медиҳад NotEnoughReplicas.

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд
Райс. 20. Шумораи ISR-ҳо нисбат ба нишондоди min.insync.replicas як кам аст

Ин конфигуратсия дастрасиро барои мувофиқат қурбон мекунад. Пеш аз қабули паём, мо боварӣ ҳосил мекунем, ки он ба ҳадди аққал ду нусха навишта шудааст. Ин ба истеҳсолкунанда эътимоди бештар медиҳад. Дар ин ҷо, талафоти паём танҳо дар сурате имконпазир аст, ки ду нусха дар як фосилаи кӯтоҳ ҳамзамон ноком шаванд, то он даме, ки паём ба пайрави иловагӣ такрор нашавад, ки ин аз эҳтимол дур нест. Аммо агар шумо параноид бошед, шумо метавонед омили такрориро ба 5 муқаррар кунед ва min.insync.replicas аз ҷониби 3. Дар ин ҷо се брокер бояд дар як вақт афтод, то аз даст рекорд! Албатта, шумо барои ин эътимоднокӣ дар таъхири иловагӣ пардохт мекунед.

Вақте ки дастрасӣ барои амнияти додаҳо зарур аст

Ба монанди парванда бо RabbitMQ, баъзан дастрасӣ барои амнияти додаҳо зарур аст. Ин аст он чизе ки шумо бояд дар бораи он фикр кунед:

  • Оё ношир метавонад хатогиро баргардонад ва хидмати болоӣ ё корбарро бигзорад, ки баъдтар дубора кӯшиш кунад?
  • Оё ношир метавонад паёмро ба таври маҳаллӣ ё дар пойгоҳи додаҳо захира кунад, то баъдтар бори дигар кӯшиш кунад?

Агар ҷавоб не бошад, пас оптимизатсияи дастрасӣ амнияти маълумотро беҳтар мекунад. Агар шумо дастрасиро ба ҷои сабт накардан интихоб кунед, шумо маълумоти камтарро аз даст медиҳед. Ҳамин тариқ, ҳама чиз ба дарёфти мувозинат вобаста аст ва қарор аз вазъияти мушаххас вобаста аст.

Маънии ISR

Маҷмӯаи ISR ба шумо имкон медиҳад, ки тавозуни оптималии байни амнияти додаҳо ва таъхирро интихоб кунед. Масалан, дастрасиро дар сурати нокомии аксарияти репликаҳо таъмин кунед, таъсири репликаҳои мурда ё сустро аз нуқтаи назари таъхир кам кунед.

Маъноро мо худамон интихоб мекунем replica.lag.time.max.ms мувофиқи ниёзҳои шумо. Аслан, ин параметр маънои онро дорад, ки мо чӣ қадар таъхирро кай қабул кардан мехоҳем acks = ҳама. Арзиши пешфарз даҳ сония аст. Агар ин барои шумо хеле дароз бошад, шумо метавонед онро кам кунед. Он гоҳ басомади тағирот дар ISR зиёд мешавад, зеро пайравон зуд-зуд хориҷ карда мешаванд ва илова карда мешаванд.

RabbitMQ танҳо маҷмӯи оинаҳост, ки бояд такрор шаванд. Оинаҳои суст таъхири иловагиро ҷорӣ мекунанд ва оинаҳои мурда метавонанд интизор шаванд, то пакетҳое, ки мавҷудияти ҳар як гиреҳро (тик) тафтиш мекунанд, посух диҳанд. ISR як роҳи ҷолиб барои пешгирӣ кардани ин мушкилоти таъхирнопазир аст. Аммо мо хатари аз даст додани шумораи зиёдатӣ дорем, зеро ISR метавонад танҳо ба пешво кам шавад. Барои пешгирӣ кардани ин хатар, танзимотро истифода баред min.insync.replicas.

Кафолати пайвасти муштарӣ

Дар танзимот bootstrap.servers истеҳсолкунанда ва истеъмолкунанда метавонанд брокерҳои сершуморро барои пайваст кардани мизоҷон муайян кунанд. Идея ин аст, ки вақте ки як гиреҳ аз кор меравад, якчанд гиреҳҳои эҳтиётӣ боқӣ мемонанд, ки муштарӣ метавонад пайвастро кушояд. Инҳо ҳатман роҳбарони бахш нестанд, балки танҳо як трамплин барои боркунии аввала мебошанд. Муштарӣ метавонад аз онҳо бипурсад, ки кадом гиреҳ пешвои қисмати хондан/навиштро дарбар мегирад.

Дар RabbitMQ, муштариён метавонанд ба ҳама гиреҳ пайваст шаванд ва масири дохилӣ дархостро ба ҷое, ки лозим аст, мефиристад. Ин маънои онро дорад, ки шумо метавонед дар назди RabbitMQ як мувозинати сарборӣ насб кунед. Кафка аз муштариён талаб мекунад, ки ба гиреҳе, ки пешвои бахшҳои мувофиқро ҷойгир мекунад, пайваст шаванд. Дар чунин вазъият, шумо наметавонед баланси сарборӣ насб кунед. Рӯйхат bootstrap.servers Муҳим аст, ки муштариён пас аз нокомӣ ба гиреҳҳои дуруст дастрасӣ пайдо кунанд ва пайдо кунанд.

Архитектураи консенсуси Кафка

То ҳол, мо баррасӣ накардаем, ки кластер дар бораи суқути брокер чӣ гуна огоҳ мешавад ва роҳбари нав чӣ гуна интихоб мешавад. Барои фаҳмидани он ки Кафка бо қисмҳои шабака чӣ гуна кор мекунад, шумо аввал бояд меъмории консенсусро фаҳмед.

Ҳар як кластери Кафка дар якҷоягӣ бо кластери Zookeeper ҷойгир карда мешавад, ки он як хидмати консенсуси тақсимшуда мебошад, ки ба система имкон медиҳад, ки дар баъзе ҳолати додашуда консенсус ба даст орад ва мувофиқатро аз мавҷудият авлавият диҳад. Барои тасдиқи амалиёти хондан ва навиштан розигии аксарияти гиреҳҳои Zookeeper лозим аст.

Zookeeper ҳолати кластерро нигоҳ медорад:

  • Рӯйхати мавзӯъҳо, бахшҳо, конфигуратсия, репликаҳои пешвои ҷорӣ, репликаҳои бартарӣ.
  • Аъзоёни кластер. Ҳар як брокер ба кластери Zookeeper пинг мекунад. Агар он дар муддати муайян пинг нагирад, Zookeeper брокерро ҳамчун дастнорас сабт мекунад.
  • Интихоби гиреҳҳои асосӣ ва эҳтиётӣ барои контроллер.

Гиреҳи контроллер яке аз брокерҳои Кафка мебошад, ки барои интихоби роҳбарони реплика масъул аст. Zookeeper ба нозир дар бораи узвияти кластер ва тағироти мавзӯъ огоҳинома мефиристад ва нозир бояд аз рӯи ин тағйирот амал кунад.

Масалан, биёед як мавзӯи навро бо даҳ қисм ва омили такрории 3 гирем. Назоратчӣ бояд барои ҳар як қисм роҳбар интихоб кунад ва кӯшиш кунад, ки пешвоҳоро дар байни брокерҳо оптималӣ тақсим кунад.

Барои ҳар як контролери бахш:

  • маълумотро дар Zookeeper дар бораи ISR ва пешво нав мекунад;
  • Ба ҳар як брокер, ки нусхаи ин қисмро дорад, LeaderAndISRCommand мефиристад ва ба брокерҳо дар бораи ISR ва пешво хабар медиҳад.

Вақте ки брокер бо роҳбар меафтад, зоопарк ба назоратчӣ огоҳинома мефиристад ва он роҳбари навро интихоб мекунад. Боз, контроллер аввал Zookeeper-ро навсозӣ мекунад ва сипас ба ҳар як брокер фармон мефиристад, ки онҳоро дар бораи тағирёбии роҳбарият огоҳ мекунад.

Ҳар як роҳбар барои ҷалби ISR масъул аст. Танзимотҳо replica.lag.time.max.ms муайян мекунад, ки кй ба он чо дохил мешавад. Вақте ки ISR тағир меёбад, роҳбар маълумоти навро ба Zookeeper интиқол медиҳад.

Зоопарк ҳамеша аз ҳама гуна тағирот огоҳ карда мешавад, то дар сурати нокомӣ, менеҷмент ба осонӣ ба роҳбари нав гузарад.

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд
Райс. 21. Консенсуси Кафка

Протоколи такрорӣ

Фаҳмидани ҷузъиёти такрорӣ ба шумо кӯмак мекунад, ки сенарияҳои эҳтимолии талафоти маълумотро беҳтар дарк кунед.

Дархостҳои интихоб, Log End Offset (LEO) ва Mark Highwater (HW)

Мо чунин мешуморем, ки пайравон давра ба давра ба пешво дархостҳои воридотӣ мефиристанд. Фосилаи пешфарз 500 мс аст. Ин аз RabbitMQ бо он фарқ мекунад, ки дар RabbitMQ такрорӣ на аз ҷониби оинаи навбат, балки аз ҷониби устод оғоз мешавад. Устод тағиротҳоро ба оинаҳо тела медиҳад.

Роҳбар ва ҳама пайравон тамғаи Log End Offset (LEO) ва Highwater (HW) -ро захира мекунанд. Тамғаи LEO ҷуброни паёми охиринро дар репликаи маҳаллӣ нигоҳ медорад ва HW ҷуброни охиринро нигоҳ медорад. Дар хотир доред, ки барои ҳолати иҷро, паём бояд дар тамоми репликаҳои ISR нигоҳ дошта шавад. Ин маънои онро дорад, ки LEO одатан аз HW каме пештар аст.

Вақте ки роҳбар паёмро қабул мекунад, онро ба таври маҳаллӣ нигоҳ медорад. Пайрав бо интиқоли LEO-и худ дархости дарёфт мекунад. Сипас роҳбар як қатор паёмҳоро аз ин LEO оғоз мекунад ва инчунин HW-и ҷорӣро интиқол медиҳад. Вақте ки роҳбар маълумот мегирад, ки ҳамаи репликаҳо паёмро дар офсети додашуда нигоҳ доштаанд, он аломати HW-ро бармеангезад. Танҳо роҳбар метавонад HW-ро интиқол диҳад ва аз ин рӯ ҳама пайравон арзиши кунуниро дар посух ба дархости худ медонанд. Ин маънои онро дорад, ки пайравон метавонанд ҳам дар паём ва ҳам дар дониши HW аз пешво қафо монанд. Истеъмолкунандагон танҳо то HW ҷорӣ паёмҳо мегиранд.

Аҳамият диҳед, ки "истеъмол" маънои ба хотира навишташударо дорад, на ба диск. Барои иҷрои кор, Кафка дар фосилаи муайян ба диск ҳамоҳанг мекунад. RabbitMQ низ чунин фосила дорад, аммо он танҳо пас аз он ки устод ва ҳама оинаҳо паёмро ба диск навиштанд, ба ношир изҳорот мефиристад. Таҳиягарони Кафка, бо сабабҳои кор, тасмим гирифтанд, ки пас аз навиштани паём ба хотира акк фиристанд. Кафка шарт мегузорад, ки зиёдатӣ хатари ба муддати кӯтоҳ нигоҳ доштани паёмҳои эътирофшударо танҳо дар хотира ҷуброн мекунад.

Нокомии роҳбар

Вақте ки роҳбар меафтад, зоопарк ба назоратчӣ хабар медиҳад ва он нусхаи пешвои навро интихоб мекунад. Роҳбари нав мувофиқи LEO-и худ тамғаи нави HW муқаррар мекунад. Пас аз он пайравон дар бораи роҳбари нав маълумот мегиранд. Вобаста аз версияи Кафка, пайрав яке аз ду сенарияро интихоб мекунад:

  1. Он сабти маҳаллиро ба HW маълум бурида хоҳад кард ва ба раҳбари нав дархост барои паёмҳо пас аз ин нишона мефиристад.
  2. Ба роҳбар дархост мефиристад, то дар вақти интихоб шуданаш ҲС-ро фаҳмад ва пас журналро ба ин офсет буред. Он гоҳ аз ин ҷуброн сар карда дархостҳои даврии дарёфтиро оғоз мекунад.

Пайрав метавонад бо сабабҳои зерин журналро буридан лозим ояд:

  • Вақте ки пешво ноком мешавад, пайрави аввалин дар маҷмӯи ISR, ки дар Zookeeper сабт шудааст, дар интихобот пирӯз мешавад ва пешво мешавад. Ҳама пайравони ISR, гарчанде ки "ҳамоҳангсозӣ" ҳисобида мешаванд, шояд нусхаҳои ҳама паёмҳоро аз раҳбари пешин нагирифтаанд. Ин комилан имконпазир аст, ки пайрави тавсифшуда нусхаи навтарин надошта бошад. Кафка кафолат медиҳад, ки байни репликаҳо фарқият вуҷуд надорад. Ҳамин тариқ, барои роҳ надодан ба ихтилофот, ҳар як пайрав бояд сабти худро ба арзиши HW раҳбари нав дар вақти интихоб шуданаш кӯтоҳ кунад. Ин як сабаби дигари танзим аст acks = ҳама барои мувофиқат хеле муҳим аст.
  • Паёмҳо давра ба давра ба диск навишта мешаванд. Агар ҳамаи гиреҳҳои кластер дар як вақт ноком шаванд, пас репликаҳо бо офсетҳои гуногун дар дискҳо нигоҳ дошта мешаванд. Мумкин аст, вақте ки брокерҳо ба интернет бармегарданд, роҳбари наве, ки интихоб шудааст, паси пайравони худ хоҳад буд, зеро вай пеш аз дигарон дар диск сабт шудааст.

Вохӯрӣ бо кластер

Ҳангоми ворид шудан ба кластер, репликаҳо ҳамон тавре, ки пешво ноком мешавад, амал мекунанд: онҳо репликаи пешворо тафтиш мекунанд ва сабти худро ба HW он (дар вақти интихобот) буридаанд. Дар муқоиса, RabbitMQ гиреҳҳои дубора муттаҳидшударо ҳамчун комилан нав мешуморад. Дар ҳарду ҳолат, брокер ҳама гуна ҳолати мавҷударо рад мекунад. Агар ҳамоҳангсозии автоматӣ истифода шавад, пас устод бояд комилан тамоми мундариҷаи ҷорӣро ба оинаи нав бо усули "тамоми ҷаҳон интизор шавад" такрор кунад. Устод дар давоми ин амалиёт ягон амалиёти хондан ё навиштанро қабул намекунад. Ин равиш дар навбатҳои калон мушкилот эҷод мекунад.

Кафка як журнали тақсимшуда аст ва дар маҷмӯъ он назар ба навбати RabbitMQ паёмҳои бештарро нигоҳ медорад, ки дар он маълумот пас аз хондани он аз навбат хориҷ карда мешавад. Навбатҳои фаъол бояд нисбатан хурд бошанд. Аммо Кафка як гузоришест, ки сиёсати нигоҳдории худро дорад, ки метавонад муддати рӯзҳо ё ҳафтаҳоро муқаррар кунад. Бастани навбат ва равиши синхронизатсияи пурра барои гузориши тақсимшуда комилан қобили қабул нест. Ба ҷои ин, пайравони Кафка, агар нусхаи онҳо аз пешво пештар бошад, сабти худро ба ҲВ-и пешво (дар вақти интихоб шудани ӯ) кӯтоҳ мекунанд. Дар сурати эҳтимоли бештар, вақте ки пайрав дар паси он қарор дорад, он танҳо аз LEO-и кунунии худ ба дархостҳои гирифтан шурӯъ мекунад.

Пайравони нав ё дубора ҳамроҳшуда берун аз ISR оғоз мекунанд ва дар ӯҳдадориҳо иштирок намекунанд. Онҳо танҳо дар паҳлӯи гурӯҳ кор мекунанд ва ҳарчи зудтар паёмҳоро мегиранд, то он даме, ки онҳо ба пешво расида, ба ISR ворид шаванд. Ҳеҷ гуна басташавӣ вуҷуд надорад ва лозим нест, ки ҳама маълумоти шуморо партояд.

Нобудшавии пайвастшавӣ

Кафка нисбат ба RabbitMQ ҷузъҳои бештар дорад, бинобар ин, вақте ки кластер ҷудо мешавад, маҷмӯи рафтори мураккабтар дорад. Аммо Кафка дар ибтидо барои кластерҳо тарҳрезӣ шуда буд, бинобар ин, ҳалли онҳо хеле хуб фикр карда шудаанд.

Дар зер якчанд сенарияи нокомии пайвастшавӣ оварда шудааст:

  • Сенарияи 1: Пайрав пешворо намебинад, аммо ба ҳар ҳол зоотехникро мебинад.
  • Сенарияи 2: Роҳбар ягон пайравонро намебинад, аммо ба ҳар ҳол зоопаркро мебинад.
  • Сенарияи 3: Пайрав пешворо мебинад, аммо зоотехникро намебинад.
  • Сенарияи 4: Роҳбар пайравонро мебинад, аммо зоопаркро намебинад.
  • Сенарияи 5: Пайрав аз дигар гиреҳҳои Кафка ва Zookeeper комилан ҷудо аст.
  • Сенарияи 6: Роҳбар аз дигар гиреҳҳои Кафка ва Zookeeper комилан ҷудо аст.
  • Сенарияи 7: гиреҳи контроллери Кафка дигар гиреҳи Кафкаро дида наметавонад.
  • Сенарияи 8: Нозири Кафка Zookeeper-ро намебинад.

Ҳар як сенария рафтори худро дорад.

Сенарияи 1: Пайрав пешворо намебинад, аммо зоопаркро мебинад

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд
Райс. 22. Сенарияи 1: ISR аз се нусха

Нокомии пайвастшавӣ брокери 3-ро аз брокерҳои 1 ва 2 ҷудо мекунад, аммо на аз Zookeeper. Брокер 3 дигар наметавонад дархостҳои воридотӣ фиристад. Пас аз гузашти вақт replica.lag.time.max.ms он аз ISR хориҷ карда шудааст ва дар қабули паёмҳо иштирок намекунад. Вақте ки пайвастшавӣ барқарор карда мешавад, он дархостҳоро дубора оғоз мекунад ва вақте ки ба пешво мерасад, ба ISR ҳамроҳ мешавад. Зоопарк қабули пингҳоро идома медиҳад ва гумон мекунад, ки брокер зинда ва хуб аст.

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд
Райс. 23. Сенарияи 1: Брокер аз ISR хориҷ карда мешавад, агар дар давоми фосилаи replica.lag.time.max.ms дархости дарёфти аз он гирифта нашавад

Ба монанди дар RabbitMQ таваққуф кардани мағзи сар ё гиреҳ вуҷуд надорад. Ба ҷои ин, зиёдатӣ кам карда мешавад.

Сенарияи 2: Роҳбар ягон пайравонро намебинад, аммо ба ҳар ҳол зоопаркро мебинад

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд
Райс. 24. Сенарияи 2. Пешво ва ду пайрав

Вайрон шудани пайвасти шабака пешворо аз пайравон ҷудо мекунад, аммо брокер то ҳол метавонад Zookeeper-ро бубинад. Тавре ки дар сенарияи аввал, ISR коҳиш меёбад, аммо ин дафъа танҳо ба пешво, зеро ҳама пайравон фиристодани дархостҳои дарёфтиро қатъ мекунанд. Боз ҳам, тақсимоти мантиқӣ вуҷуд надорад. Ба ҷои ин, то барқарор шудани пайвастшавӣ барои паёмҳои нав талафоти зиёдатӣ вуҷуд дорад. Зоопарк қабули пингҳоро идома медиҳад ва боварӣ дорад, ки брокер зинда ва хуб аст.

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд
Райс. 25. Сенарияи 2. ISR танҳо ба пешво кам шудааст

Сенарияи 3. Пайрав пешворо мебинад, аммо зоотехникро намебинад

Пайрав аз зоопарк ҷудо карда мешавад, аммо на аз брокер бо пешво. Дар натиҷа, пайравон идома додани дархостҳои воридотӣ ва узви ISR буданро идома медиҳад. Zookeeper дигар пингҳоро қабул намекунад ва садамаи брокерро ба қайд намегирад, аммо азбаски он танҳо пайрав аст, пас аз барқароршавӣ ҳеҷ гуна оқибате вуҷуд надорад.

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд
Райс. 26. Сенарияи 3: Пайрав фиристодани дархостҳои дарёфтиро ба пешво идома медиҳад

Сенарияи 4. Роҳбар пайравонро мебинад, аммо зоопаркро намебинад

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд
Райс. 27. Сенарияи 4. Пешво ва ду пайрав

Роҳбар аз зоопарк ҷудо карда шудааст, аммо на аз брокерҳои пайравон.

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд
Райс. 28. Сенарияи 4: Роҳбар аз зоопарк ҷудо карда шудааст

Пас аз чанд вақт, Zookeeper нокомии брокерро сабт мекунад ва дар ин бора контроллерро огоҳ мекунад. Вай аз байни пайравонаш пешвои нав интихоб мекунад. Бо вуҷуди ин, роҳбари аслӣ фикр карданро идома медиҳад, ки он пешво аст ва қабули вурудҳоро аз он идома медиҳад acks = 1. Пайравон дигар ба ӯ дархостҳои фиристодан намефиристанд, аз ин рӯ ӯ онҳоро мурда ҳисоб мекунад ва кӯшиш мекунад, ки ISR-ро ба худ кам кунад. Аммо азбаски он бо Zookeeper иртибот надорад, он наметавонад ин корро кунад ва дар он вақт қабули ҳама гуна вурудоти дигарро рад мекунад.

паёмҳои acks = ҳама тасдиқро қабул намекунад, зеро ISR аввал ҳама репликаҳоро фаъол мекунад ва паёмҳо ба онҳо намерасанд. Вақте ки роҳбари аслӣ кӯшиш мекунад, ки онҳоро аз ISR хориҷ кунад, вай ин корро карда наметавонад ва қабули ҳама гуна паёмҳоро тамоман қатъ мекунад.

Мизоҷон ба зудӣ тағирёбии роҳбарро пай мебаранд ва ба фиристодани сабтҳо ба сервери нав шурӯъ мекунанд. Вақте ки шабака барқарор карда мешавад, роҳбари аслӣ мебинад, ки он дигар пешво нест ва сабти худро ба арзиши HW, ки раҳбари нав дар лаҳзаи нокомӣ барои пешгирӣ кардани ихтилофи логҳо дошт, бур мекунад. Он гоҳ ба раҳбари нав фиристодани дархостҳои дарёфтиро оғоз мекунад. Ҳама сабтҳои пешвои аслӣ, ки ба раҳбари нав такрор намешаванд, гум мешаванд. Яъне паёмҳое, ки пешвои аслӣ дар он чанд сония, ки ду роҳбар кор мекарданд, эътироф накарданд, гум мешаванд.

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд
Райс. 29. Сенарияи 4. Пешвои брокери 1 пас аз барқарор шудани шабака пайрав мешавад

Сенарияи 5: Пайрав аз дигар гиреҳҳои Кафка ва Zookeeper комилан ҷудо аст

Пайрав аз дигар гиреҳҳои Кафка ва Zookeeper комилан ҷудо карда шудааст. Вай танҳо то барқарор шудани шабака худро аз ISR хориҷ мекунад ва сипас бо дигарон мерасад.

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд
Райс. 30. Сенарияи 5: Пайравони ҷудошуда аз ISR хориҷ карда мешаванд

Сенарияи 6: Роҳбар аз дигар гиреҳҳои Кафка ва Zookeeper комилан ҷудо аст

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд
Райс. 31. Сенарияи 6. Пешво ва ду пайрав

Роҳбар аз пайравонаш, назоратчӣ ва зоопарк комилан ҷудо карда шудааст. Дар муддати кӯтоҳ он қабули вурудҳоро аз он идома медиҳад acks = 1.

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд
Райс. 32. Сенарияи 6: Ҷудо кардани роҳбар аз дигар гиреҳҳои Кафка ва Zookeeper

Пас аз гузаштани мӯҳлат дархостҳо нагирифтаанд replica.lag.time.max.ms, он кӯшиш мекунад, ки ISR-ро ба худ кам кунад, аммо ин корро карда наметавонад, зеро ҳеҷ гуна иртибот бо Zookeeper вуҷуд надорад, он гоҳ қабули навиштаҷотро қатъ мекунад.

Дар ҳамин ҳол, зоопарк брокери ҷудошударо мурда қайд мекунад ва назоратчӣ роҳбари навро интихоб мекунад.

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд
Райс. 33. Сенарияи 6. Ду пешво

Роҳбари аслӣ метавонад барои чанд сония сабтҳоро қабул кунад, аммо баъд қабули ҳама гуна паёмҳоро қатъ мекунад. Мизоҷон ҳар 60 сония бо метамаълумоти охирин нав карда мешаванд. Онҳо дар бораи тағирёбии роҳбар огоҳ карда мешаванд ва ба фиристодани сабтҳо ба роҳбари нав шурӯъ мекунанд.

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд
Райс. 34. Сенарияи 6: Истеҳсолкунандагон ба роҳбари нав мегузаранд

Ҳама сабтҳои тасдиқшуда аз ҷониби роҳбари аслӣ пас аз гум шудани пайвастшавӣ гум мешаванд. Вақте ки шабака барқарор карда мешавад, роҳбари аслӣ тавассути Zookeeper мефаҳмад, ки он дигар пешво нест. Сипас, он сабти худро ба HW раҳбари нав дар вақти интихобот бур мекунад ва ба фиристодани дархостҳо ҳамчун пайрав оғоз мекунад.

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд
Райс. 35. Сенарияи 6: Пешвои аслӣ пас аз барқарор шудани пайвастшавӣ ба шабака пайрав мешавад

Дар ин ҳолат, ҷудошавии мантиқӣ метавонад барои як муддати кӯтоҳ ба амал ояд, аммо танҳо агар acks = 1 и min.insync.replicas инчунин 1. Ҷудокунии мантиқӣ ё пас аз барқарор шудани шабака ба таври худкор ба охир мерасад, вақте ки раҳбари аслӣ дарк мекунад, ки ӯ дигар пешво нест ва ё вақте ки ҳама муштариён дарк мекунанд, ки роҳбар иваз шудааст ва ба пешвои нав навиштан оғоз мекунанд - ҳар кадоме ки аввал рӯй диҳад. Дар ҳар сурат, баъзе паёмҳо гум мешаванд, аммо танҳо бо acks = 1.

Варианти дигари ин сенария вуҷуд дорад, ки дар он танҳо пеш аз тақсим шудани шабака, пайравон қафо монданд ва роҳбар ISR-ро танҳо ба худ фишурда кард. Он гоҳ аз сабаби гум шудани пайвастшавӣ ҷудо мешавад. Роҳбари нав интихоб мешавад, аммо роҳбари аслӣ ҳатто қабули сабтҳоро идома медиҳад acks = ҳама, зеро дар ISR гайр аз у каси дигар нест. Ин сабтҳо пас аз барқарор шудани шабака гум мешаванд. Ягона роҳи пешгирӣ аз ин интихоб аст min.insync.replicas = 2.

Сенарияи 7: гиреҳи нозири Кафка дигар гиреҳи Кафкаро дида наметавонад

Умуман, вақте ки пайвастшавӣ бо гиреҳи Кафка аз байн меравад, контроллер наметавонад ягон маълумоти тағирёбии пешворо ба он интиқол диҳад. Дар бадтарин ҳолат, ин ба ҷудоии кӯтоҳмуддати мантиқӣ оварда мерасонад, чуноне ки дар сенарияи 6. Бештар, брокер танҳо номзади роҳбарият намешавад, агар охирин ноком шавад.

Сенарияи 8: Нозири Кафка Zookeeper-ро намебинад

Зоопарк аз контролери афтода пинг қабул намекунад ва гиреҳи нави Кафкаро ҳамчун контроллер интихоб мекунад. Назоратчии аслӣ метавонад худро ҳамчун чунин муаррифӣ идома диҳад, аммо он аз Zookeeper огоҳинома намегирад, аз ин рӯ вай ягон вазифае барои иҷро нахоҳад дошт. Вақте ки шабака барқарор мешавад, ӯ дарк хоҳад кард, ки ӯ дигар контроллер нест, балки ба гиреҳи муқаррарии Кафка табдил ёфтааст.

Хулоса аз сенарияҳо

Мо мебинем, ки аз байн рафтани пайвасти пайравон боиси гум шудани паём намегардад, балки то барқарор шудани шабака муваққатан изофиятро кам мекунад. Ин, албатта, метавонад ба талафи маълумот оварда расонад, агар як ё якчанд гиреҳ гум шавад.

Агар пешво бо сабаби гум шудани пайвастшавӣ аз зоопарк ҷудо шавад, ин метавонад ба гум шудани паёмҳо оварда расонад. acks = 1. Набудани муошират бо Zookeeper боиси тақсимоти мухтасари мантиқӣ бо ду роҳбар мегардад. Ин масъала бо параметр ҳал карда мешавад acks = ҳама.

Параметр min.insync.replicas ба ду ё зиёда нусхабардорӣ кафолати иловагӣ медиҳад, ки чунин сенарияҳои кӯтоҳмуддат ба паёмҳои гумшуда, мисли сенарияи 6 оварда намерасонанд.

Хулосаи паёмҳои гумшуда

Биёед ҳамаи роҳҳои гум кардани маълумотро дар Кафка номбар кунем:

  • Ҳар гуна нокомии пешво, агар паёмҳо бо истифода аз тасдиқ карда шаванд acks = 1
  • Ҳар гуна гузариши нопоки роҳбарият, яъне ба пайрави берун аз ISR, ҳатто бо acks = ҳама
  • Ҷудо кардани пешво аз Zookeeper, агар паёмҳо бо истифода аз тасдиқ карда шаванд acks = 1
  • Бунбасти пурраи роҳбар, ки аллакай гурӯҳи ISR-ро ба худаш коҳиш додааст. Ҳама паёмҳо ҳатто гум мешаванд acks = ҳама. Ин танҳо дуруст аст, агар min.insync.replicas=1.
  • Нокомии ҳамзамон ҳамаи гиреҳҳои тақсимкунӣ. Азбаски паёмҳо аз хотира қабул карда мешаванд, баъзеи онҳо ҳанӯз ба диск навишта нашудаанд. Пас аз бозоғозкунии серверҳо, шояд баъзе паёмҳо гум шаванд.

Аз гузариши роҳбарияти нопок бо роҳи манъ кардани онҳо ё таъмини ҳадди аққал ду ихтисор шудан мумкин аст. Конфигуратсияи устувортарин комбинатсия мебошад acks = ҳама и min.insync.replicas зиёда аз 1.

Муқоисаи мустақими эътимоднокии RabbitMQ ва Кафка

Барои таъмини эътимоднокӣ ва дастрасии баланд, ҳарду платформа системаи такрории ибтидоӣ ва дуюмдараҷаро татбиқ мекунанд. Аммо, RabbitMQ пошнаи Ахиллес дорад. Ҳангоми дубора пайвастшавӣ пас аз нокомӣ, гиреҳҳо маълумоти худро мепартоянд ва ҳамоҳангсозӣ баста мешавад. Ин дучандии дукарата умри дарози навбатҳои калонро дар RabbitMQ зери шубҳа мегузорад. Ба шумо лозим меояд, ки шумораи ками зиёдатӣ ё вақти бастани дарозро қабул кунед. Кам кардани шумораи зиёдатӣ хатари талафоти азими маълумотро зиёд мекунад. Аммо агар навбатҳо хурд бошанд, пас ба хотири зиёдатӣ, бо истифода аз кӯшишҳои пайвастагии такрорӣ дар муддати кӯтоҳи дастнорасӣ (якчанд сония) ҳал карда мешавад.

Кафка ин мушкилот надорад. Он маълумотро танҳо аз нуқтаи фарқияти байни роҳбар ва пайрав хориҷ мекунад. Ҳама маълумоти муштарак захира карда мешаванд. Илова бар ин, такрорӣ системаро манъ намекунад. Раҳбар қабули паёмҳоро идома медиҳад, вақте ки пайрави нав ба он мерасад, барои девопҳо ҳамроҳ шудан ё дубора ҳамроҳ шудан ба кластер кори ночиз мегардад. Албатта, ҳанӯз ҳам мушкилот ба монанди фарохмаҷрои шабака ҳангоми такрорӣ вуҷуд доранд. Агар шумо дар як вақт пайравони сершумор илова кунед, шумо метавонед маҳдудияти фарохмаҷроро дучор шавед.

RabbitMQ аз ҷиҳати эътимоднокӣ аз Кафка болотар аст, вақте ки серверҳои сершумор дар кластер дар як вақт ноком мешаванд. Тавре ки мо аллакай гуфта будем, RabbitMQ тасдиқро ба ношир танҳо пас аз навиштани паём ба диск аз ҷониби устод ва ҳама оинаҳо мефиристад. Аммо ин бо ду сабаб таъхири иловагиро илова мекунад:

  • fsync ҳар чанд сад миллисония
  • Нокомии оинаро танҳо пас аз гузаштани мӯҳлати бастаҳое, ки мавҷудияти ҳар як гиреҳро тафтиш мекунанд, мушоҳида кардан мумкин аст. Агар оина суст шавад ё афтад, ин таъхирро илова мекунад.

Шарти Кафка дар он аст, ки агар паём дар саросари гиреҳҳои сершумор нигоҳ дошта шавад, он метавонад паёмҳоро ҳамон лаҳзае, ки онҳо ба хотира ворид мешаванд, эътироф кунанд. Аз ин сабаб, хатари гум кардани паёмҳои ҳама гуна намудҳо вуҷуд дорад (ҳатто acks = ҳама, min.insync.replicas=2) дар сурати дар як вакт ноком шудан.

Дар маҷмӯъ, Кафка иҷрои беҳтари нармафзорро намоиш медиҳад ва аз ибтидо барои кластерҳо тарҳрезӣ шудааст. Агар барои эътимоднокӣ зарур бошад, шумораи пайравон метавонад ба 11 зиёд карда шавад. Омили такрорӣ 5 ва шумораи ҳадди ақали репликаҳо дар ҳамоҳангсозӣ min.insync.replicas=3 талафоти паёмро як ҳодисаи хеле нодир хоҳад кард. Агар инфрасохтори шумо ин таносуби такрорӣ ва сатҳи зиёдатӣ дошта бошад, пас шумо метавонед ин интихобро интихоб кунед.

Кластеркунии RabbitMQ барои навбатҳои хурд хуб аст. Аммо ҳатто навбатҳои хурд метавонанд дар вақти зиёд будани трафик зуд афзоиш ёбанд. Вақте ки навбатҳо калон мешаванд, шумо бояд дар байни мавҷудият ва эътимоднокӣ интихоби сахт кунед. Кластерсозии RabbitMQ барои ҳолатҳои ғайримуқаррарӣ беҳтарин мувофиқ аст, ки бартариҳои чандирии RabbitMQ аз ҳама камбудиҳои кластерсозии он бартарӣ доранд.

Як зидди осебпазирии RabbitMQ ба навбатҳои калон тақсим кардани онҳо ба бисёр навбатҳои хурдтар аст. Агар шумо фармоиши пурраи тамоми навбатро талаб накунед, балки танҳо паёмҳои мувофиқро (масалан, паёмҳои муштарии мушаххас) талаб кунед ё умуман чизе фармоиш надиҳед, пас ин интихоб қобили қабул аст: ба лоиҳаи ман нигаред Барқароркунанда барои тақсим кардани навбат (лоиҳа ҳанӯз дар марҳилаи аввал аст).

Дар ниҳоят, дар бораи як қатор хатогиҳо дар механизмҳои кластерсозӣ ва такрории RabbitMQ ва Кафка фаромӯш накунед. Бо мурури замон, системаҳо баркамол ва устувортар шуданд, аммо ҳеҷ як паём ҳеҷ гоҳ аз талафот 100% бехатар нахоҳад буд! Илова бар ин, дар марказҳои додаҳо садамаҳои калон ба амал меоянд!

Агар ман чизеро аз даст додам, хато кардам ё шумо бо ягон нукта розӣ набошед, озодона шарҳ нависед ё бо ман тамос гиред.

Аз ман бисёр вақт мепурсанд: "Чӣ бояд интихоб кард, Кафка ё RabbitMQ?", "Кадом платформа беҳтар аст?". Ҳақиқат ин аст, ки ин воқеан аз вазъияти шумо, таҷрибаи ҷорӣ ва ғайра вобаста аст. Ман дар гуфтани андешаи худ дудила ҳастам, зеро тавсия додани як платформа барои ҳама ҳолатҳои истифода ва маҳдудиятҳои эҳтимолӣ аз ҳад зиёд содда карданист. Ман ин силсила мақолаҳоро навиштам, то шумо андешаи худро ташаккул диҳед.

Мехоҳам бигӯям, ки ҳарду система дар ин соҳа пешсафанд. Ман шояд каме ғаразнок бошам, зеро аз таҷрибаи худ бо лоиҳаҳо ман майл ба чизҳое, ба монанди фармоиши кафолати паёмҳо ва эътимоднокӣ қадр мекунам.

Ман технологияҳои дигареро мебинам, ки ин эътимоднокӣ ва фармоиши кафолатнок надоранд, пас ман ба RabbitMQ ва Кафка назар мекунам ва арзиши бебаҳои ҳардуи ин системаро дарк мекунам.

Манбаъ: will.com

Илова Эзоҳ