RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite nan gwoup

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite nan gwoup

Tolerans defo ak gwo disponiblite yo se gwo sijè, kidonk nou pral konsakre atik separe pou RabbitMQ ak Kafka. Atik sa a se sou RabbitMQ, ak pwochen an se sou Kafka, an konparezon ak RabbitMQ. Sa a se yon atik long, kidonk fè tèt ou konfòtab.

Ann gade nan estrateji tolerans fay, konsistans, ak disponiblite segondè (HA) ak konpwomi yo ke chak estrateji fè. RabbitMQ ka kouri sou yon gwoup nœuds - epi li klase kòm yon sistèm distribye. Lè li rive sistèm distribiye, nou souvan pale sou konsistans ak disponiblite.

Konsèp sa yo dekri ki jan yon sistèm konpòte lè li echwe. Echèk koneksyon rezo a, echèk sèvè, echèk kondwi difisil, indisponibilite tanporè sèvè akòz koleksyon fatra, pèt pake oswa ralantisman koneksyon rezo a. Tout bagay sa a ka mennen nan pèt done oswa konfli. Li sanble ke li se nòmalman enposib mete yon sistèm ki se tou de konplètman konsistan (pa gen okenn pèt done, pa gen okenn divergence done) ak ki disponib (ap aksepte lekti ak ekri) pou tout senaryo echèk.

Nou pral wè ke konsistans ak disponiblite yo nan bout opoze nan spectre la, epi ou bezwen chwazi ki fason yo optimize. Bon nouvèl la se ke ak RabbitMQ chwa sa a posib. Ou gen sa yo kalite "nerdy" levye yo chanje balans lan nan direksyon pou pi gwo konsistans oswa pi gwo aksè.

Nou pral peye atansyon espesyal sou ki konfigirasyon ki mennen nan pèt done akòz dosye konfime. Gen yon chèn responsablite ant piblikatè, koutye ak konsomatè yo. Yon fwa yo mesaj la transmèt bay koutye a, li se travay li pa pèdi mesaj la. Lè koutye a rekonèt ke piblikatè a resevwa mesaj la, nou pa atann pou l pèdi. Men, nou pral wè ke sa ka aktyèlman rive depann sou koutye ou ak konfigirasyon Piblikatè.

Primitif Rezilyans Single Node

Rezilyan Queuing/Routage

Gen de kalite ke moun kap kriye nan RabbitMQ: dirab ak ki pa dirab. Tout moun kap kriye yo sove nan baz done Mnesia. Ke moun kap kriye dirab yo re-piblisite nan demaraj ne e konsa siviv rekòmanse, aksidan sistèm, oswa aksidan sèvè (osi lontan ke done yo pèsiste). Sa vle di ke toutotan ou deklare routage (echanj) ak keu yo dwe fleksib, enfrastrikti keuing/routage a ap tounen sou entènèt.

Yo retire ke moun kap kriye temèt ak routage lè yo rekòmanse ne.

Mesaj ki pèsistan

Jis paske yon keu dirab pa vle di ke tout mesaj li yo pral siviv yon rekòmanse ne. Se sèlman mesaj ki mete pa Piblikatè a kòm dirab (pèsistan). Mesaj ki pèsistan kreye chaj adisyonèl sou koutye a, men si pèt mesaj se akseptab, Lè sa a, pa gen okenn lòt opsyon.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite nan gwoup
Diri. 1. Matris dirab

Clustering ak mirwar keu

Pou siviv pèt yon koutye, nou bezwen èkse. Nou ka konbine plizyè nœuds RabbitMQ nan yon gwoup, epi ajoute plis redondance lè nou repwodui ke moun kap kriye ant plizyè nœuds. Nan fason sa a, si yon sèl ne echwe, nou pa pèdi done epi yo rete disponib.

Miroir keu:

  • yon sèl keu prensipal (mèt), ki resevwa tout kòmandman ekri ak li
  • youn oswa plis miwa ki resevwa tout mesaj ak metadata ki soti nan keu prensipal la. Miwa sa yo pa la pou dekale, men piman pou redondance.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite nan gwoup
Diri. 2. keu mirwar

Mirroring mete pa politik ki apwopriye a. Nan li ou ka chwazi koyefisyan replikasyon an e menm nœuds yo kote keu a ta dwe chita. Egzanp:

  • ha-mode: all
  • ha-mode: exactly, ha-params: 2 (yon mèt ak yon glas)
  • ha-mode: nodes, ha-params: rabbit@node1, rabbit@node2

Konfimasyon Piblikatè

Pou reyalize anrejistreman ki konsistan, Konfimasyon Piblikatè yo obligatwa. San yo, gen yon risk pou mesaj yo te pèdi. Yo voye yon konfimasyon bay piblikatè a apre yo fin ekri mesaj la sou disk. RabbitMQ ekri mesaj sou disk pa lè li resevwa, men sou yon baz peryodik, nan rejyon an nan plizyè santèn milisgond. Lè yon keu reflete, yo voye yon rekonesans sèlman apre tout miwa yo te ekri kopi mesaj la tou sou disk. Sa vle di ke lè l sèvi avèk konfimasyon ajoute latansi, men si sekirite done enpòtan, Lè sa a, yo nesesè.

Nat failover

Lè yon koutye kite oswa fè aksidan, tout lidè keu (mèt) sou ne sa a aksidan ansanm ak li. Lè sa a, gwoup la chwazi miwa ki pi ansyen nan chak mèt epi li ankouraje li kòm nouvo mèt la.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite nan gwoup
Diri. 3. Miltip ke moun kap kriye miwa ak règleman yo

Koutye 3 desann. Remake byen ke keue C glas la sou Broker 2 yo te monte nan mèt. Epitou sonje ke yo te kreye yon nouvo glas pou Queue C sou Koutye 1. RabbitMQ toujou eseye kenbe faktè replikasyon ki espesifye nan règleman ou yo.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite nan gwoup
Diri. 4. Koutye 3 echwe, sa ki lakòz keu C echwe

Pwochen Koutye 1 tonbe! Nou gen sèlman yon koutye ki rete. Queue B Iwa a monte pou mèt.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite nan gwoup
Fig. Xnumx

Nou te retounen Koutye 1. Kèlkeswa kòman done yo siviv pèt ak rekiperasyon koutye a, tout mesaj keu reflete yo jete lè rekòmanse. Sa a se enpòtan sonje paske pral gen konsekans. Nou pral gade enplikasyon sa yo yon ti tan. Se konsa, Koutye 1 se kounye a yon manm nan gwoup la ankò, ak gwoup la ap eseye konfòme yo ak règleman yo ak Se poutèt sa kreye miwa sou Koutye 1.

Nan ka sa a, pèt la nan Koutye 1 te konplè, menm jan ak done yo, se konsa keu B a unmirrored te konplètman pèdi.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite nan gwoup
Diri. 6. Koutye 1 retounen nan sèvis

Koutye 3 tounen sou entènèt, kidonk ke moun kap kriye A ak B yo retounen miwa yo te kreye sou li pou satisfè règleman HA yo. Men koulye a, tout moun kap kriye prensipal yo sou yon sèl ne! Sa a se pa ideyal, yon distribisyon menm ant nœuds se pi bon. Malerezman, pa gen anpil opsyon isit la pou re-balanse mèt. Nou pral tounen sou pwoblèm sa a pita paske nou bezwen gade nan senkronizasyon keu an premye.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite nan gwoup
Diri. 7. Koutye 3 retounen nan sèvis. Tout ke moun kap kriye prensipal yo sou yon sèl ne!

Se konsa, kounye a ou ta dwe gen yon lide sou ki jan miwa bay redondance ak tolerans fay. Sa a asire disponiblite nan evènman an nan yon sèl echèk ne ak pwoteje kont pèt done. Men, nou poko fini, paske an reyalite li pi konplike.

Senkronizasyon

Lè w ap kreye yon nouvo glas, tout nouvo mesaj yo ap toujou repwodwi nan glas sa a ak nenpòt lòt. Kòm pou done yo ki deja egziste nan keu mèt la, nou ka repwodui li nan yon nouvo glas, ki vin tounen yon kopi konplè nan mèt la. Nou ka chwazi tou pou pa repwodui mesaj ki deja egziste epi kite keu prensipal la ak nouvo glas la konvèje nan tan, ak nouvo mesaj ki rive nan ke a ak mesaj ki deja egziste kite tèt keu prensipal la.

Se senkronizasyon sa a fèt otomatikman oswa manyèlman epi li jere lè l sèvi avèk yon politik keu. Ann gade yon egzanp.

Nou gen de ke moun kap kriye. Queu A senkronize otomatikman, epi keu B senkronize manyèlman. Tou de ke yo genyen dis mesaj.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite nan gwoup
Diri. 8. De ke moun kap kriye ak mòd senkronizasyon diferan

Kounye a nou ap pèdi Broker 3.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite nan gwoup
Diri. 9. Koutye 3 tonbe

Koutye 3 retounen nan sèvis. Gwoup la kreye yon glas pou chak keu sou nouvo ne epi otomatikman senkronize nouvo Queue A ak mèt la. Sepandan, glas nouvo Queue B la rete vid. Nan fason sa a nou gen redondance konplè sou keu A ak yon sèl glas pou mesaj keu B ki deja egziste.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite nan gwoup
Diri. 10. Nouvo miwa keu A resevwa tout mesaj ki deja egziste, men nouvo miwa keu B la pa resevwa.

Dis plis mesaj rive nan tou de ke moun kap kriye. Koutye 2 Lè sa a, aksidan ak keu A woule tounen nan pi ansyen glas la, ki se sou Koutye 1. Pa gen okenn pèt done lè li echwe. Nan keu B, gen ven mesaj nan mèt la ak sèlman dis nan glas la paske keu sa a pa janm repwodui dis mesaj orijinal yo.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite nan gwoup
Diri. 11. Queu A woule tounen nan Koutye 1 san yo pa pèdi mesaj

Dis plis mesaj rive nan tou de ke moun kap kriye. Koulye a, Broker 1 aksidan. Queue A fasil chanje nan glas la san yo pa pèdi mesaj. Sepandan, keu B gen pwoblèm. Nan pwen sa a nou ka optimize swa disponiblite oswa konsistans.

Si nou vle optimize aksè, Lè sa a, politik la ha-promote-sou-echèk ta dwe enstale nan toujou. Sa a se valè default, kidonk ou ka tou senpleman pa presize politik la ditou. Nan ka sa a, nou esansyèlman pèmèt echèk nan miwa ki pa senkronize. Sa a pral lakòz mesaj yo dwe pèdi, men keu la ap rete lizib ak ekri.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite nan gwoup
Diri. 12. Queu A tounen nan Broker 3 san li pa pèdi mesaj. Queue B woule tounen nan Broker 3 ak dis mesaj pèdi

Nou kapab tou enstale ha-promote-on-failure nan sans when-synced. Nan ka sa a, olye pou yo woule tounen nan glas la, keu la ap tann jiskaske Broker 1 ak done li yo retounen nan mòd sou entènèt. Apre li retounen, keu prensipal la tounen sou Broker 1 san okenn pèt done. Disponibilite sakrifye pou sekirite done yo. Men, sa a se yon mòd ki riske ki ka menm mennen nan pèt done konplè, ki nou pral gade nan yon ti tan.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite nan gwoup
Diri. 13. File B rete pa disponib apre li pèdi Koutye 1

Ou ka mande, "Èske li pi bon pou pa janm itilize senkronizasyon otomatik?" Repons lan se ke senkronizasyon se yon operasyon bloke. Pandan senkronizasyon, keu prensipal la pa ka fè okenn operasyon lekti oswa ekri!

Ann gade yon egzanp. Koulye a, nou gen ke moun kap kriye trè long. Ki jan yo ka grandi nan yon gwosè konsa? Pou plizyè rezon:

  • File yo pa itilize aktivman
  • Sa yo se ke moun kap kriye gwo vitès, epi kounye a konsomatè yo ralanti
  • Li nan gwo vitès ke moun kap kriye, te gen yon glitch ak konsomatè yo ap ratrape

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite nan gwoup
Diri. 14. De gwo ke moun kap kriye ak mòd senkronizasyon diferan

Koulye a, Broker 3 tonbe.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite nan gwoup
Diri. 15. Koutye 3 tonbe, kite yon mèt ak glas nan chak keu

Broker 3 tounen sou entènèt epi yo kreye nouvo miwa. Keu Prensipal A kòmanse repwodui mesaj ki egziste deja nan nouvo glas la, epi pandan tan sa a keu la pa disponib. Li pran de zè de tan pou repwodui done yo, sa ki lakòz de zè de tan D' pou keu sa a!

Sepandan, keu B rete disponib pandan tout peryòd la. Li te sakrifye kèk redondances pou aksè.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite nan gwoup
Diri. 16. Keu rete pa disponib pandan senkronizasyon

Apre dezèdtan, File A vin disponib tou epi li ka kòmanse aksepte lekti ak ekri ankò.

Dènye Nouvèl

Konpòtman bloke sa a pandan senkronizasyon fè li difisil pou mete ajou grap yo ak gwo ke moun kap kriye. Nan kèk pwen, ne mèt la bezwen rekòmanse, ki vle di swa chanje nan yon glas oswa enfimite keu la pandan y ap sèvè a ke yo te modènize. Si nou chwazi tranzisyon, nou pral pèdi mesaj si miwa yo pa senkronize. Pa default, pandan yon pann koutye, yon failover nan yon glas ki pa senkronize pa fèt. Sa vle di ke le pli vit ke koutye a retounen, nou pa pèdi okenn mesaj, domaj la sèlman se te yon keu senp. Règ sou konpòtman lè yon koutye dekonekte se règleman ki tabli ha-promote-on-shutdown. Ou ka mete youn nan de valè:

  • always= tranzisyon nan miwa ki pa senkronize pèmèt
  • when-synced= tranzisyon nan yon glas senkronize sèlman, otreman keu la vin lizibl ak enskrib. Nat la retounen nan sèvis le pli vit ke koutye a retounen

Yon fason oswa yon lòt, ak gwo ke ou gen yo chwazi ant pèt done ak indisponibilité.

Lè Disponibilite Amelyore Sekirite Done

Gen yon lòt konplikasyon pou konsidere anvan ou pran yon desizyon. Pandan ke senkronizasyon otomatik pi bon pou redondance, ki jan li afekte sekirite done yo? Natirèlman, ak pi bon redondance, RabbitMQ gen mwens chans pou pèdi mesaj ki deja egziste, men e nouvo mesaj ki soti nan piblikatè yo?

Isit la ou bezwen konsidere bagay sa yo:

  • Èske Piblikatè a ta ka tou senpleman retounen yon erè epi fè sèvis en oswa itilizatè a eseye ankò pita?
  • Èske piblikatè a ka sove mesaj la lokalman oswa nan yon baz done pou eseye ankò pita?

Si Piblikatè a ka sèlman jete mesaj la, Lè sa a, an reyalite, amelyore aksè tou amelyore sekirite done yo.

Kidonk, yo dwe chèche yon balans, epi solisyon an depann sou sitiyasyon an espesifik.

Pwoblèm ak ha-promote-on-failure = lè-senkronize

Lide ha-promote-sou-echèk= lè-senkronize se ke nou anpeche chanje nan yon glas ki pa senkronize epi kidonk evite pèt done. Nat la rete lizib oswa ekri. Olye de sa, nou eseye refè koutye a te fè aksidan ak done li yo entak pou ke li ka rekòmanse fonksyone kòm yon mèt san pèt done.

Men (e sa a se yon gwo men) si koutye a te pèdi done li, Lè sa a, nou gen yon gwo pwoblèm: keu la pèdi! Tout done yo ale! Menm si ou gen miwa ki sitou ratrape ak keu prensipal la, miwa sa yo yo jete tou.

Pou re-ajoute yon ne ki gen menm non an, nou di gwoup la bliye ne ki pèdi a (ak lòd la rabbitmqctl forget_cluster_node) epi kòmanse yon nouvo koutye ak menm non host la. Pandan ke gwoup la sonje ne pèdi a, li sonje ansyen keu la ak miwa ki pa senkronize. Lè yo di yon gwoup pou l bliye yon ne òfelen, keu sa a bliye tou. Koulye a, nou bezwen re-deklare li. Nou pèdi tout done yo, byenke nou te gen miwa ak yon seri pasyèl nan done. Li ta pi bon pou chanje nan yon glas ki pa senkronize!

Se poutèt sa, manyèl senkronizasyon (ak echèk nan senkronize) an konbinezon ak ha-promote-on-failure=when-synced, nan opinyon mwen, byen riske. Dok yo di opsyon sa a egziste pou sekirite done, men li se yon kouto doub bò.

Mèt re-balanse

Kòm te pwomèt la, nou retounen nan pwoblèm nan nan akimilasyon nan tout mèt sou youn oswa plizyè nœuds. Sa a ka menm rive kòm yon rezilta aktyalizasyon gwoup woule. Nan yon gwoup twa-nœuds, tout moun kap kriye mèt pral akimile sou youn oubyen de nœuds.

Rebalansman mèt yo ka pwoblèm pou de rezon:

  • Pa gen okenn bon zouti pou fè re-balanse
  • Queu senkronizasyon

Gen yon twazyèm pati pou rebalancing Plugin, ki pa ofisyèlman sipòte. Konsènan grefon twazyèm pati nan manyèl RabbitMQ la te di: "Plugin la bay kèk zouti adisyonèl pou konfigirasyon ak rapò, men ekip RabbitMQ la pa sipòte oswa verifye. Sèvi ak pwòp risk ou."

Gen yon lòt Trick pou deplase keu prensipal la atravè règleman HA. Manyèl la mansyone script pou sa. Li travay tankou sa a:

  • Retire tout miwa lè l sèvi avèk yon politik tanporè ki gen yon pi gwo priyorite pase politik HA ki egziste deja.
  • Chanje politik tanporè HA pou itilize mòd ne, ki espesifye ne kote keu mèt la ta dwe transfere.
  • Senkronize keu la pou migrasyon pouse.
  • Apre migrasyon an fini, efase politik tanporè a. Règ inisyal HA a anvigè epi yo kreye kantite miwa ki nesesè yo.

Inconvénient la se ke apwòch sa a ka pa travay si ou gen gwo ke moun kap kriye oswa egzijans redondance strik.

Koulye a, ann wè ki jan gwoup RabbitMQ travay ak patisyon rezo yo.

Pèt koneksyon

Nœuds yo nan yon sistèm distribiye yo konekte pa lyen rezo, ak lyen rezo yo ka epi yo pral dekonekte. Frekans nan pann yo depann de enfrastrikti lokal la oswa fyab nan nwaj la chwazi a. Nan nenpòt ka, sistèm distribiye yo dwe kapab fè fas ak yo. Yon fwa ankò nou gen yon chwa ant disponiblite ak konsistans, epi ankò bon nouvèl la se ke RabbitMQ bay tou de opsyon (jis pa an menm tan).

Avèk RabbitMQ nou gen de opsyon prensipal:

  • Pèmèt divizyon lojik (sèvo divize). Sa a asire disponiblite, men li ka lakòz pèt done.
  • Enfim separasyon lojik. Ka lakòz pèt disponiblite a kout tèm depann sou fason kliyan konekte ak gwoup la. Kapab tou mennen nan indisponibilite konplè nan yon gwoup de-nœuds.

Men, ki sa ki lojik separasyon? Sa a se lè yon gwoup divize an de akòz pèt koneksyon rezo a. Sou chak bò, miwa yo monte nan yon mèt, se konsa ke gen evantyèlman plizyè mèt pou chak keu.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite nan gwoup
Diri. 17. Keu prensipal ak de miwa, yo chak sou yon ne separe. Lè sa a, yon echèk rezo rive ak yon glas vin detache. Nœud la separe wè ke lòt de yo te tonbe epi li ankouraje miwa li yo bay mèt la. Koulye a, nou gen de ke moun kap kriye prensipal, tou de ekri ak lizib.

Si piblikatè yo voye done bay tou de mèt, nou fini ak de kopi divèjan keu la.

Diferan mòd RabbitMQ yo bay swa disponiblite oswa konsistans.

Ignore mòd (default)

Mòd sa a asire aksè. Apre pèt la nan koneksyon, yon separasyon lojik rive. Apre koneksyon yo retabli, administratè a dwe deside ki patisyon yo bay priyorite. Bò pèdi a pral rekòmanse ak tout done akimile sou bò sa a pral pèdi.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite nan gwoup
Diri. 18. Twa piblikatè yo asosye ak twa koutye. Entènman, gwoup la voye tout demann nan keu prensipal la sou Broker 2.

Koulye a, nou ap pèdi Koutye 3. Li wè ke lòt koutye te tonbe epi li fè pwomosyon glas li bay mèt la. Sa a se ki jan yon separasyon lojik rive.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite nan gwoup
Diri. 19. Divizyon lojik (sèvo fann). Dosye yo antre nan de ke moun kap kriye prensipal yo, ak de kopi yo diverge.

Koneksyon retabli, men separasyon lojik rete. Administratè a dwe manyèlman chwazi bò pèdi a. Nan ka ki anba a, administratè a rdemare Koutye 3. Tout mesaj ke li pa t 'jere transmèt yo pèdi.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite nan gwoup
Diri. 20. Administratè a enfim Koutye 3.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite nan gwoup
Diri. 21. Administratè a kòmanse Broker 3 epi li rantre nan gwoup la, li pèdi tout mesaj ki te rete la.

Pandan pèt koneksyon an ak apre restorasyon li, gwoup la ak keu sa a te disponib pou lekti ak ekri.

Mòd Autoheal

Travay menm jan ak Ignore mòd, eksepte ke gwoup la li menm otomatikman chwazi bò pèdi apre divize ak restore koneksyon. Bò ki pèdi a retounen nan gwoup la vid, epi nat la pèdi tout mesaj ki te voye sèlman sou bò sa a.

Pòz mòd minorite

Si nou pa vle pèmèt patisyon lojik, Lè sa a, sèl opsyon nou an se jete lekti ak ekri sou bò ki pi piti apre patisyon an gwoup. Lè koutye a wè ke li se sou bò ki pi piti a, li sispann travay, se sa ki, li fèmen tout koneksyon ki deja egziste epi li refize nenpòt ki nouvo. Yon fwa pa segonn li tcheke pou restorasyon koneksyon. Yon fwa koneksyon yo retabli, li rekòmanse operasyon ak rantre nan gwoup la.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite nan gwoup
Diri. 22. Twa piblikatè yo asosye ak twa koutye. Entènman, gwoup la voye tout demann nan keu prensipal la sou Broker 2.

Koutye 1 ak 2 Lè sa a, separe de Koutye 3. Olye pou yo pwomouvwa glas yo bay mèt, Koutye 3 sispann epi li vin pa disponib.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite nan gwoup
Diri. 23. Koutye 3 pran poz, dekonekte tout kliyan, epi rejte demann koneksyon.

Yon fwa koneksyon yo retabli, li retounen nan gwoup la.

Ann gade nan yon lòt egzanp kote keu prensipal la se sou Koutye 3.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite nan gwoup
Diri. 24. Keu prensipal sou Koutye 3.

Lè sa a, menm pèt koneksyon an rive. Koutye 3 pran poz paske li sou bò ki pi piti a. Nan lòt bò a, nœuds yo wè ke Broker 3 te tonbe, se konsa glas la ki pi gran soti nan Koutye 1 ak 2 monte nan mèt.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite nan gwoup
Diri. 25. Tranzisyon pou Koutye 2 si Koutye 3 pa disponib.

Lè koneksyon an retabli, Broker 3 pral rantre nan gwoup la.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite nan gwoup
Diri. 26. Gwoup la te retounen nan operasyon nòmal.

Sa ki enpòtan pou w konprann isit la se ke nou jwenn konsistans, men nou ka jwenn disponiblite tou, si Nou pral transfere avèk siksè kliyan nan pi fò nan seksyon an. Pou pifò sitiyasyon, mwen pèsonèlman ta chwazi mòd Pause Minorite a, men li vrèman depann de ka endividyèl la.

Pou asire disponiblite, li enpòtan pou asire ke kliyan yo avèk siksè konekte ak lame a. Ann gade nan opsyon nou yo.

Asire Koneksyon Kliyan

Nou gen plizyè opsyon pou kijan pou dirije kliyan yo nan pati prensipal gwoup la oswa nan nœuds k ap travay (apre yon nœud echwe) apre yon pèt koneksyon. Premyèman, ann sonje ke yon keu espesifik òganize sou yon ne espesifik, men routage ak règleman yo repwodui atravè tout nœuds. Kliyan yo ka konekte nan nenpòt ne, ak routage entèn pral dirije yo kote yo bezwen ale. Men, lè yon ne sispann, li rejte koneksyon, kidonk kliyan yo dwe konekte nan yon lòt ne. Si ne a tonbe, li pa ka fè anyen.

Opsyon nou yo:

  • Yo jwenn aksè nan gwoup la lè l sèvi avèk yon balanse chaj ki tou senpleman sikile nan nœuds yo ak kliyan yo reeseye konekte jiskaske yo reyisi. Si yon ne desann oswa sispann, lè sa a tantativ pou konekte ak ne sa a ap echwe, men tantativ ki vin apre yo pral ale nan lòt sèvè (nan yon mòd wonn-robin). Sa a se apwopriye pou yon pèt kout tèm nan koneksyon oswa yon sèvè ki tonbe ki pral byen vit pote tounen moute.
  • Aksede gwoup la atravè yon balans chaj epi retire nœuds ki sispann/echwe nan lis la le pli vit ke yo detekte. Si nou fè sa byen vit, epi si kliyan yo kapab reesye koneksyon an, Lè sa a, nou pral reyalize disponiblite konstan.
  • Bay chak kliyan yon lis tout nœuds, epi kliyan an chwazi youn nan yo owaza lè w konekte. Si li resevwa yon erè lè li ap eseye konekte, li deplase nan pwochen ne nan lis la jiskaske li konekte.
  • Retire trafik nan yon ne ki echwe/sispann lè l sèvi avèk DNS. Sa a se fè lè l sèvi avèk yon ti TTL.

Jwenn

RabbitMQ clustering gen avantaj ak dezavantaj li yo. Dezavantaj ki pi grav yo se ke:

  • lè yo rantre nan yon gwoup, nœuds jete done yo;
  • bloke senkronizasyon lakòz keu la vin pa disponib.

Tout desizyon difisil soti nan de karakteristik sa yo achitekti. Si RabbitMQ te kapab sove done lè gwoup la rejwenn, Lè sa a, senkronizasyon ta pi vit. Si li te kapab senkronizasyon ki pa bloke, li ta pi byen sipòte gwo ke moun kap kriye. Ranje de pwoblèm sa yo ta anpil amelyore pèfòmans RabbitMQ a kòm yon teknoloji messagerie ki toleran fay ak trè disponib. Mwen ta ezite rekòmande RabbitMQ ak clustering nan sitiyasyon sa yo:

  • Rezo enfidèl.
  • Depo enfidèl.
  • Trè long ke moun kap kriye.

Lè li rive anviwònman disponiblite segondè, konsidere bagay sa yo:

  • ha-promote-on-failure=always
  • ha-sync-mode=manual
  • cluster_partition_handling=ignore (Oswa autoheal)
  • mesaj ki pèsistan
  • asire kliyan konekte ak ne aktif lè kèk ne echwe

Pou konsistans (sekirite done), konsidere paramèt sa yo:

  • Konfime Piblikatè ak Rekonesans Manyèl sou bò konsomatè yo
  • ha-promote-on-failure=when-synced, si piblikatè yo ka eseye ankò pita epi si ou gen depo trè serye! Sinon mete =always.
  • ha-sync-mode=automatic (men pou gwo moun kap kriye inaktif mòd manyèl yo ka obligatwa; konsidere tou si indisponibilite pral lakòz mesaj yo pèdi)
  • Pòz mòd minorite
  • mesaj ki pèsistan

Nou poko kouvri tout pwoblèm tolerans ak gwo disponiblite; pa egzanp, kijan pou fè pwosedi administratif yo an sekirite (tankou mizajou woule). Nou bezwen tou pale de federasyon ak plugin Shovel la.

Si mwen te rate nenpòt lòt bagay, tanpri fè m 'konnen.

Gade tou mwen pòs, kote mwen fè ravaj sou yon gwoup RabbitMQ lè l sèvi avèk Docker ak Blockade pou teste kèk nan senaryo pèt mesaj ki dekri nan atik sa a.

Atik anvan yo nan seri a:
nimewo 1 - habr.com/ru/company/itsumma/blog/416629
nimewo 2 - habr.com/ru/company/itsumma/blog/418389
nimewo 3 - habr.com/ru/company/itsumma/blog/437446

Sous: www.habr.com

Add nouvo kòmantè