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

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

Таҳаммулпазирии хатогиҳо ва дастрасии баланд мавзӯъҳои бузурганд, аз ин рӯ мо мақолаҳои алоҳидаро ба RabbitMQ ва Кафка мебахшем. Ин мақола дар бораи RabbitMQ ва мақолаи дигар дар бораи Кафка дар муқоиса бо RabbitMQ аст. Ин мақолаи дароз аст, бинобар ин худро роҳат кунед.

Биёед ба стратегияҳои таҳаммулпазирӣ, пайдарпайӣ ва дастрасии баланд (HA) ва фоидаҳое, ки ҳар як стратегия месозад, бубинем. RabbitMQ метавонад дар кластери гиреҳҳо кор кунад ва сипас ҳамчун системаи тақсимшуда тасниф карда мешавад. Вақте ки сухан дар бораи системаҳои тақсимшуда меравад, мо аксар вақт дар бораи мувофиқат ва мавҷудият гап мезанем.

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

Мо мебинем, ки мувофиқат ва мавҷудият дар канори муқобили спектр ҳастанд ва шумо бояд кадом роҳи оптимизатсияро интихоб кунед. Хабари хуш ин аст, ки бо RabbitMQ ин интихоб имконпазир аст. Шумо ин гуна фишангҳои "аслӣ" доред, то тавозунро ба сӯи мувофиқати бештар ё дастрасии бештар гузаронед.

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

Примитивҳои устувории гиреҳи ягона

Навбатҳои устувор / масир

Дар RabbitMQ ду намуди навбат мавҷуд аст: пойдору устувор. Ҳама навбатҳо дар базаи Mnesia захира карда мешаванд. Навбатҳои пойдор ҳангоми оғозёбии гиреҳ дубора таблиғ карда мешаванд ва аз ин рӯ, аз бозоғозӣ, садамаҳои система ё суқути сервер зинда мемонанд (то даме ки маълумот нигоҳ дошта мешавад). Ин маънои онро дорад, ки то он даме, ки шумо масир (мубодилаи) ва навбатро устувор эълон мекунед, инфрасохтори навбат/маршрут ба онлайн бармегардад.

Навбатҳои ноустувор ва масир ҳангоми аз нав оғоз кардани гиреҳ хориҷ карда мешаванд.

Паёмҳои доимӣ

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

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

Кластеркунӣ бо инъикоси навбат

Барои аз даст додани брокер наҷот ёфтан, ба мо зиёдатӣ лозим аст. Мо метавонем гиреҳҳои сершумори RabbitMQ-ро ба кластер муттаҳид созем ва сипас тавассути такрор кардани навбатҳо дар байни гиреҳҳои сершумор изофаи иловагӣ илова кунем. Ҳамин тавр, агар як гиреҳ ноком шавад, мо маълумотро гум намекунем ва дастрас мемонем.

Инъикоси навбат:

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

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

Зеркашӣ аз ҷониби сиёсати мувофиқ муқаррар карда мешавад. Дар он шумо метавонед коэффисиенти такрорӣ ва ҳатто гиреҳҳоеро интихоб кунед, ки дар он навбат бояд ҷойгир бошад. Мисолҳо:

  • ha-mode: all
  • ha-mode: exactly, ha-params: 2 (як усто ва як оина)
  • ha-mode: nodes, ha-params: rabbit@node1, rabbit@node2

Тасдиқи ношир

Барои ноил шудан ба сабти пайваста, тасдиқи Publisher лозим аст. Бе онҳо, хатари гум шудани паёмҳо вуҷуд дорад. Пас аз навиштани паём ба диск, тасдиқ ба ношир фиристода мешавад. RabbitMQ паёмҳоро ба диск на пас аз гирифтани, балки дар асоси давра ба давра, дар ҳудуди чандсад миллисония менависад. Ҳангоми инъикоси навбат, тасдиқ танҳо пас аз он фиристода мешавад, ки ҳамаи оинаҳо нусхаи паёмро ба диск навиштаанд. Ин маънои онро дорад, ки истифодаи тасдиқҳо таъхирро илова мекунад, аммо агар амнияти додаҳо муҳим бошад, пас онҳо заруранд.

Навбати нопурра

Вақте ки брокер аз кор мебарояд ё суқут мекунад, ҳама пешвоёни навбат (устодон) дар он гиреҳ ҳамроҳи он меафтанд. Сипас кластер оинаи қадимтарини ҳар як устодро интихоб мекунад ва онро ҳамчун устоди нав пешбарӣ мекунад.

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

Брокер 3 поён меравад. Аҳамият диҳед, ки оинаи Queue C дар Broker 2 ба устод пешбарӣ карда мешавад. Инчунин қайд кунед, ки оинаи нав барои Queue C дар Broker 1 сохта шудааст. RabbitMQ ҳамеша кӯшиш мекунад, ки омили такрории дар сиёсатҳои шумо зикршударо нигоҳ дорад.

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

Брокери навбатӣ 1 меафтад! Мо танҳо як брокер дорем. Оинаи Queue B ба устодӣ пешбарӣ карда мешавад.

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

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

Дар ин ҳолат, талафоти брокери 1, ба монанди маълумот, пурра буд, бинобар ин, навбати B-и беинсоф комилан гум шуд.

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

Брокер 3 дубора онлайн шуд, аз ин рӯ навбатҳои A ва B оинаҳои дар он сохташударо барои қонеъ кардани сиёсати HA-и худ бармегардонанд. Аммо ҳоло ҳама навбатҳои асосӣ дар як гиреҳ ҳастанд! Ин беҳтарин нест, тақсимоти баробар байни гиреҳҳо беҳтар аст. Мутаассифона, дар ин ҷо барои барқарорсозии устодон имконоти зиёд вуҷуд надорад. Мо баъдтар ба ин масъала бармегардем, зеро мо бояд аввал ба ҳамоҳангсозии навбат назар кунем.

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

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

Ҳамоҳангсозӣ

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

Ин ҳамоҳангсозӣ ба таври худкор ё дастӣ иҷро карда мешавад ва бо истифода аз сиёсати навбат идора карда мешавад. Биёед як мисолро дида бароем.

Мо ду навбати оинадор дорем. Навбати A ба таври худкор ҳамоҳанг карда мешавад ва навбати B дастӣ ҳамоҳанг карда мешавад. Ҳарду навбат даҳ паёмро дар бар мегиранд.

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

Ҳоло мо Broker 3-ро аз даст медиҳем.

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

Брокер 3 ба хидмат бармегардад. Кластер барои ҳар як навбат дар гиреҳи нав оина эҷод мекунад ва навбати нави А-ро бо усто ба таври худкор ҳамоҳанг мекунад. Аммо оинаи навбати нави В холй мемонад. Ҳамин тариқ, мо дар навбати А пурра зиёдатӣ дорем ва танҳо як оина барои паёмҳои мавҷудаи Навбати В дорем.

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд дар кластерҳо
Райс. 10. Оинаи нави навбати А ҳамаи паёмҳои мавҷударо қабул мекунад, аммо оинаи нави навбати B қабул намекунад.

Дар ҳарду навбат даҳ паёми дигар меоянд. Брокер 2 пас аз садама дучор мешавад ва Навбати A ба оинаи қадимтарин, ки дар брокери 1 ҷойгир аст, бармегардад. Вақте ки он ноком мешавад, талафоти маълумот вуҷуд надорад. Дар навбати В, дар устод бист паём ва дар оина ҳамагӣ даҳ паём мавҷуд аст, зеро ин навбат ҳеҷ гоҳ даҳ паёми аслиро такрор намекард.

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

Дар ҳарду навбат даҳ паёми дигар меоянд. Ҳоло Брокер 1 садама мезанад Навбати A бе гум кардани паёмҳо ба осонӣ ба оина мегузарад. Бо вуҷуди ин, навбати B мушкилот дорад. Дар ин лаҳза мо метавонем дастрасиро ё мувофиқатро оптимизатсия кунем.

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

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд дар кластерҳо
Райс. 12. Навбати А бе гум кардани паёмҳо ба брокери 3 бармегардад. Навбати B бо даҳ паёми гумшуда ба Broker 3 бармегардад

Мо инчунин метавонем насб кунем ha-promote-on-failure ба маъно when-synced. Дар ин ҳолат, ба ҷои бозгашт ба оина, навбат интизор мешавад, то брокери 1 бо маълумоташ ба ҳолати онлайн баргардад. Пас аз баргардонидани он, навбати асосӣ дар Брокер 1 бе талафи маълумот бармегардад. Дастрасӣ барои амнияти додаҳо қурбон карда мешавад. Аммо ин як ҳолати хатарнок аст, ки ҳатто метавонад ба талафоти пурраи маълумот оварда расонад, ки мо ба зудӣ дида мебароем.

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

Шумо метавонед пурсед: "Оё беҳтар аст, ки ҳеҷ гоҳ ҳамоҳангсозии автоматиро истифода набаред?" Ҷавоб ин аст, ки синхронизатсия амалиёти басташавӣ аст. Ҳангоми ҳамоҳангсозӣ, навбати асосӣ ягон амалиёти хондан ё навиштанро иҷро карда наметавонад!

Биёед як мисолро дида бароем. Холо мо навбатхои хеле дароз дорем. Чӣ тавр онҳо метавонанд ба ин андоза калон шаванд? Бо якчанд сабаб:

  • Навбатхо фаъолона истифода намешаванд
  • Инҳо навбатҳои баландсуръатанд ва ҳоло истеъмолкунандагон сустанд
  • Ин навбатҳои баландсуръат аст, хатогӣ ба вуҷуд омадааст ва истеъмолкунандагон ба онҳо расида истодаанд

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

Ҳоло Broker 3 меафтад.

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

Брокер 3 ба онлайн бармегардад ва оинаҳои нав сохта мешаванд. Навбати асосӣ A такрори паёмҳои мавҷударо ба оинаи нав оғоз мекунад ва дар ин муддат навбат дастрас нест. Барои такрори маълумот ду соат вақт лозим аст, ки дар натиҷа ду соат бекор мондани ин навбат мешавад!

Бо вуҷуди ин, навбати B дар тамоми давра дастрас боқӣ мемонад. Вай барои дастрасӣ каме изофӣ қурбон кард.

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

Пас аз ду соат, навбати А низ дастрас мешавад ва метавонад дубора қабули хондан ва навиштанро оғоз кунад.

Updates

Ин рафтори басташавӣ ҳангоми ҳамоҳангсозӣ навсозии кластерҳоро бо навбатҳои хеле калон мушкил месозад. Дар баъзе лаҳзаҳо, гиреҳи асосӣ бояд аз нав оғоз карда шавад, ки маънои гузаштан ба оина ё ғайрифаъол кардани навбат ҳангоми навсозӣ кардани сервер аст. Агар мо гузаришро интихоб кунем, агар оинаҳо ҳамоҳанг нашаванд, паёмҳоро аз даст медиҳем. Бо нобаёнӣ, ҳангоми қатъи брокер, интиқол ба оинаи ҳамоҳангнашуда иҷро намешавад. Ин маънои онро дорад, ки ҳамин ки брокер бармегардад, мо ягон паёмро аз даст намедиҳем, танҳо зарар як навбати оддӣ буд. Қоидаҳои рафтор ҳангоми қатъ шудани брокер аз ҷониби сиёсат муқаррар карда мешавад ha-promote-on-shutdown. Шумо метавонед яке аз ду арзишро таъин кунед:

  • always= гузариш ба оинаҳои ҳамоҳангнашуда фаъол аст
  • when-synced= гузариш танҳо ба оинаи ҳамоҳангшуда, вагарна навбат хондан ва навиштан ғайриимкон мегардад. Навбат баробари баргаштани брокер ба хидмат бармегардад

Бо ин ё он роҳ, бо навбатҳои калон шумо бояд байни талафоти маълумот ва дастнорасӣ интихоб кунед.

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

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

Дар ин ҷо шумо бояд чизҳои зеринро ба назар гиред:

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

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

Ҳамин тариқ, мувозинатро бояд ҷустуҷӯ кард ва роҳи ҳалли он ба вазъияти мушаххас вобаста аст.

Мушкилот бо ha-promote-on-failure=when-синхронизатсия

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

Аммо (ва ин калон аст, аммо), агар брокер маълумоти худро гум карда бошад, пас мо як мушкили калон дорем: навбат гум шудааст! Ҳама маълумот нест шуд! Ҳатто агар шумо оинаҳое дошта бошед, ки асосан ба навбати асосӣ мерасад, он оинаҳо низ партофта мешаванд.

Барои аз нав илова кардани гиреҳ бо ҳамон ном, мо ба кластер мегӯем, ки гиреҳи гумшударо фаромӯш кунад (бо фармон rabbitmqctl leave_cluster_node) ва брокери навро бо ҳамон номи мизбон оғоз кунед. Дар ҳоле ки кластер гиреҳи гумшударо дар хотир дорад, он навбати кӯҳна ва оинаҳои ҳамоҳангнашударо дар хотир дорад. Вақте ки ба кластер гуфта мешавад, ки гиреҳи ятимро фаромӯш кунад, он навбат низ фаромӯш мешавад. Акнун мо бояд онро дубора эълон кунем. Мо ҳама маълумотро аз даст додем, гарчанде ки мо оинаҳо бо маҷмӯи қисман маълумот доштем. Бехтараш ба оинаи синхроннашуда гузаред!

Аз ин рӯ, ҳамоҳангсозии дастӣ (ва нокомии ҳамоҳангсозӣ) дар якҷоягӣ бо ha-promote-on-failure=when-synced, ба назари ман, хеле хатарнок аст. Ҳуҷҷатҳо мегӯянд, ки ин хосият барои амнияти додаҳо мавҷуд аст, аммо ин корди дудама аст.

Мувозинати усто

Чунон ки ваъда дода будем, мо ба масъалаи дар як ё якчанд гирех чамъ шудани хамаи устохо бармегардем. Ин метавонад ҳатто дар натиҷаи навсозии кластер рӯй диҳад. Дар кластери се гиреҳ, ҳама навбатҳои асосӣ дар як ё ду гиреҳ ҷамъ мешаванд.

Мувозинати устоҳо бо ду сабаб метавонад мушкил бошад:

  • Асбоби хубе барои иҷрои мувозинат вуҷуд надорад
  • Синхронизатсияи навбат

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

Боз як ҳиллаест, ки навбати асосиро тавассути сиёсати HA интиқол медиҳад. Дар дастур зикр ёфтааст скрипт барои ин. Ин чунин кор мекунад:

  • Ҳама оинаҳоро бо истифода аз сиёсати муваққатӣ, ки нисбат ба сиёсати мавҷудаи HA афзалияти баландтар дорад, хориҷ мекунад.
  • Сиёсати муваққатии HA-ро барои истифодаи реҷаи гиреҳ тағир медиҳад, ки гиреҳеро, ки навбати асосӣ бояд интиқол дода шавад, муайян мекунад.
  • Навбатро барои интиқоли пахш ҳамоҳанг мекунад.
  • Пас аз анҷоми муҳоҷират, сиёсати муваққатиро нест мекунад. Сиёсати ибтидоии HA эътибор пайдо мекунад ва шумораи зарурии оинаҳо эҷод карда мешавад.

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

Акнун биёед бубинем, ки кластерҳои RabbitMQ бо қисмҳои шабака чӣ гуна кор мекунанд.

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

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

Бо RabbitMQ мо ду имконоти асосӣ дорем:

  • Ба тақсимоти мантиқӣ иҷозат диҳед (тақсимоти майна). Ин дастрасиро таъмин мекунад, аммо метавонад боиси талафи маълумот гардад.
  • Ҷудокунии мантиқиро ғайрифаъол кунед. Вобаста аз он ки чӣ тавр муштариён ба кластер пайваст мешаванд, метавонад боиси аз даст додани дастрасии кӯтоҳ гардад. Инчунин метавонад ба дастнорасии пурра дар кластери ду гиреҳ оварда расонад.

Аммо ҷудоии мантиқӣ чист? Ин вақтест, ки кластер аз сабаби гум шудани пайвастҳои шабакавӣ ба ду тақсим мешавад. Дар ҳар тараф, оинаҳо ба устодӣ пешбарӣ карда мешаванд, то дар ниҳоят дар як навбат якчанд усто пайдо шавад.

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд дар кластерҳо
Райс. 17. Навбати асосӣ ва ду оина, ки ҳар як дар гиреҳи алоҳида. Пас аз он нокомии шабака рух медиҳад ва як оина ҷудо мешавад. Гирехи ҷудошуда мебинад, ки дуи дигар афтодаанд ва оинаҳояшро ба устод пешбарӣ мекунанд. Ҳоло мо ду навбати асосӣ дорем, ҳам навиштан ва ҳам хондан.

Агар ноширон ба ҳарду устод маълумот фиристанд, мо бо ду нусхаи мухталифи навбат ба даст меорем.

Усулҳои гуногуни RabbitMQ мавҷудият ё мувофиқатро таъмин мекунанд.

Ҳолати нодида гирифтан (пешфарз)

Ин режим дастрасиро таъмин мекунад. Пас аз гум шудани пайвастшавӣ, ҷудоии мантиқӣ ба амал меояд. Пас аз барқарор шудани пайвастшавӣ, администратор бояд қарор кунад, ки ба кадом қисмат афзалият диҳад. Ҷониби гумшуда аз нав оғоз мешавад ва тамоми маълумоти ҷамъшуда дар он тараф гум мешавад.

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

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

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд дар кластерҳо
Райс. 19. Тақсимоти мантиқӣ (мағзи сар). Сабтҳо ба ду навбати асосӣ ворид мешаванд ва ду нусха аз ҳам ҷудо мешаванд.

Пайвастшавӣ барқарор мешавад, аммо ҷудоии мантиқӣ боқӣ мемонад. Администратор бояд тарафи гумшударо дастӣ интихоб кунад. Дар ҳолати зер, администратор Broker 3-ро аз нав оғоз мекунад. Ҳама паёмҳое, ки ба ӯ интиқол дода натавонистанд, гум мешаванд.

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд дар кластерҳо
Райс. 20. Администратор Broker 3-ро ғайрифаъол мекунад.

RabbitMQ против Кафка: Таҳаммулпазирии хатогиҳо ва дастрасии баланд дар кластерҳо
Райс. 21. Администратор Broker 3-ро оғоз мекунад ва он ба кластер ҳамроҳ мешавад ва ҳамаи паёмҳои дар он ҷо мондаро гум мекунад.

Ҳангоми аз байн рафтани пайвастшавӣ ва пас аз барқарор шудани он кластер ва ин навбат барои хондан ва навиштан дастрас буданд.

Реҷаи худкорсозӣ

Ба ҳолати "Игнор" монанд кор мекунад, ба истиснои ин ки кластер пас аз тақсим кардан ва барқарор кардани пайвастшавӣ ба таври худкор тарафи гумшударо интихоб мекунад. Ҷониби гумшуда ба кластер холӣ бармегардад ва навбат ҳама паёмҳоеро, ки танҳо ба он тараф фиристода шудаанд, гум мекунад.

Таваққуфи ҳолати ақаллиятҳо

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

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

Брокерҳои 1 ва 2 пас аз брокери 3 ҷудо мешаванд. Ба ҷои он ки оинаи худро ба устод пешбарӣ кунанд, Брокер 3 боздошта мешавад ва дастнорас мешавад.

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

Пас аз барқарор кардани пайвастшавӣ, он ба кластер бармегардад.

Биёед мисоли дигареро бубинем, ки дар он навбати асосӣ дар Broker 3 ҷойгир аст.

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

Сипас ҳамон талафоти пайвастшавӣ ба амал меояд. Брокер 3 таваққуф мекунад, зеро он дар тарафи хурдтар аст. Аз тарафи дигар, гиреҳҳо мебинанд, ки Брокер 3 афтодааст, аз ин рӯ оинаи кӯҳна аз Брокерҳои 1 ва 2 ба устод пешбарӣ карда мешавад.

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

Вақте ки пайвастшавӣ барқарор карда мешавад, Broker 3 ба кластер ҳамроҳ мешавад.

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

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

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

Таъмини пайвасти муштариён

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

Имкониятҳои мо:

  • Ба кластер бо истифода аз мувозинати сарборӣ дастрасӣ пайдо мешавад, ки танҳо тавассути гиреҳҳо давр мезанад ва муштариён то муваффақ шудан ба пайвастшавӣ дубора кӯшиш мекунанд. Агар гиреҳ қатъ ё боздошта бошад, он гоҳ кӯшиши пайвастшавӣ ба он гиреҳ ноком мешавад, аммо кӯшишҳои минбаъда ба серверҳои дигар мераванд (бо усули даврӣ). Ин барои талафоти кӯтоҳмуддати пайвастшавӣ ё сервери харобшуда, ки зуд барқарор карда мешавад, мувофиқ аст.
  • Ба кластер тавассути мувозинати сарборӣ дастрасӣ пайдо кунед ва гиреҳҳои боздошташуда/нокомро аз рӯйхат зудтар хориҷ кунед, ки онҳо ошкор карда мешаванд. Агар мо ин корро зуд анҷом диҳем ва агар мизоҷон тавонанд пайвастшавиро дубора санҷанд, мо ба дастрасии доимӣ ноил хоҳем шуд.
  • Ба ҳар як муштарӣ рӯйхати ҳамаи гиреҳҳоро диҳед ва муштарӣ ҳангоми пайвастшавӣ яке аз онҳоро ба таври тасодуфӣ интихоб мекунад. Агар он ҳангоми кӯшиши пайвастшавӣ хатогӣ гирад, он ба гиреҳи навбатии рӯйхат то пайваст шуданаш мегузарад.
  • Трафикро аз гиреҳи ноком/ боздошташуда бо истифода аз DNS хориҷ кунед. Ин бо истифода аз TTL хурд анҷом дода мешавад.

натиҷаҳои

Кластерсозии RabbitMQ афзалиятҳо ва нуқсонҳои худро дорад. Камбудиҳои ҷиддитарин инҳоянд:

  • ҳангоми пайвастан ба кластер гиреҳҳо маълумоти худро мепартоянд;
  • бастани синхронизатсия боиси дастнорас шудани навбат мегардад.

Ҳама қарорҳои душвор аз ин ду хусусияти меъморӣ бармеоянд. Агар RabbitMQ метавонист маълумотро ҳангоми пайвастшавии кластер захира кунад, синхронизатсия тезтар мешавад. Агар он қодир ба синхронизатсияи ғайрибандӣ мебуд, он беҳтар аст, ки навбатҳои калонро дастгирӣ кунад. Ислоҳи ин ду масъала метавонад кори RabbitMQ-ро ҳамчун технологияи паёмнависии ба хатоҳо таҳаммулпазир ва дастрас хеле беҳтар кунад. Ман дудила хоҳам буд, ки RabbitMQ-ро бо кластер дар ҳолатҳои зерин тавсия диҳам:

  • Шабакаи беэътимод.
  • Захираи беэътимод.
  • Навбатҳои хеле дароз.

Вақте ки сухан дар бораи танзимоти дастрасии баланд меравад, инҳоро ба назар гиред:

  • ha-promote-on-failure=always
  • ha-sync-mode=manual
  • cluster_partition_handling=ignoreautoheal)
  • паёмҳои доимӣ
  • боварӣ ҳосил кунед, ки муштариён ба гиреҳи фаъол ҳангоми нокомии баъзе гиреҳ пайваст шаванд

Барои мувофиқат (амнияти маълумот), танзимоти зеринро баррасӣ кунед:

  • Ношир тасдиқ ва тасдиқи дастӣ дар тарафи истеъмолкунанда
  • ha-promote-on-failure=when-synced, агар ноширон дертар бори дигар кӯшиш кунанд ва агар шумо захираи хеле боэътимод дошта бошед! Дар акси ҳол гузоред =always.
  • ha-sync-mode=automatic (вале барои навбатҳои калон ғайрифаъол режими дастӣ метавонад талаб карда шавад; инчунин фикр кунед, ки оё дастнорасӣ боиси гум шудани паёмҳо мегардад)
  • Таваққуфи ҳолати ақаллиятҳо
  • паёмҳои доимӣ

Мо то ҳол ҳамаи масъалаҳои таҳаммулпазирӣ ба хатогиҳо ва дастрасии баландро фаро нагирифтаем; масалан, чӣ тавр ба таври бехатар иҷро кардани расмиёти маъмурӣ (ба монанди навсозиҳои навсозӣ). Мо инчунин бояд дар бораи федератсия ва плагини Shovel сӯҳбат кунем.

Агар ман чизи дигареро гум карда бошам, лутфан ба ман хабар диҳед.

Ба ман низ нигаред пост, ки дар он ман бо истифода аз Docker ва Blockade кластери RabbitMQ-ро вайрон мекунам, то баъзе сенарияҳои талафоти паёмҳоро, ки дар ин мақола тавсиф шудаанд, санҷед.

Мақолаҳои қаблӣ дар силсила:
№ 1 - habr.com/ru/company/itsumma/blog/416629
№ 2 - habr.com/ru/company/itsumma/blog/418389
№ 3 - habr.com/ru/company/itsumma/blog/437446

Манбаъ: will.com

Хостинги боэътимодро барои сайтҳо бо муҳофизати DDoS, серверҳои VPS VDS харед 🔥 Харидани хостинги боэътимоди вебсайт бо муҳофизати DDoS, серверҳои VPS VDS | ProHoster