RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja fi Raggruppamenti

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja fi Raggruppamenti

It-tolleranza għall-ħsarat u d-disponibbiltà għolja huma suġġetti kbar, għalhekk aħna ser niddedikaw artikli separati għal RabbitMQ u Kafka. Dan l-artikolu huwa dwar RabbitMQ, u dak li jmiss huwa dwar Kafka, meta mqabbel ma 'RabbitMQ. Dan huwa artiklu twil, għalhekk agħmel lilek innifsek komdu.

Ejja nħarsu lejn l-istrateġiji tat-tolleranza tal-ħsarat, il-konsistenza u d-disponibbiltà għolja (HA) u l-kompromessi li tagħmel kull strateġija. RabbitMQ jista' jaħdem fuq grupp ta' nodi - u mbagħad jiġi kklassifikat bħala sistema distribwita. Meta niġu għal sistemi distribwiti, ħafna drabi nitkellmu dwar il-konsistenza u d-disponibbiltà.

Dawn il-kunċetti jiddeskrivu kif sistema taġixxi meta tfalli. Ħsara fil-konnessjoni tan-netwerk, ħsara fis-server, ħsara fil-hard drive, indisponibbiltà temporanja tas-server minħabba ġbir taż-żibel, telf ta' pakketti, jew tnaqqis fil-konnessjoni tan-netwerk. Dan kollu jista 'jwassal għal telf ta' data jew kunflitti. Jirriżulta li huwa prattikament impossibbli li titwaqqaf sistema li hija kemm kompletament konsistenti (l-ebda telf ta 'data, l-ebda diverġenza ta' data) u disponibbli (se jaċċetta l-qari u l-kitba) għax-xenarji kollha ta 'falliment.

Ser naraw li l-konsistenza u d-disponibbiltà huma fuq truf opposti tal-ispettru, u trid tagħżel liema mod tottimizza. L-aħbar it-tajba hija li b'RabbitMQ din l-għażla hija possibbli. Għandek dawn it-tip ta 'lievi "nerdy" biex tbiddel il-bilanċ lejn konsistenza akbar jew aċċessibbiltà akbar.

Aħna se nagħtu attenzjoni speċjali għal liema konfigurazzjonijiet iwasslu għal telf ta 'dejta minħabba rekords ikkonfermati. Hemm katina ta’ responsabbiltà bejn il-pubblikaturi, is-sensara u l-konsumaturi. Ladarba l-messaġġ jiġi trażmess lis-sensar, huwa xogħolu li ma jitlifx il-messaġġ. Meta sensar jirrikonoxxi li rċieva messaġġ lill-pubblikatur, ma nistennewx li jintilef. Imma naraw li dan jista' fil-fatt jiġri skont il-konfigurazzjoni tas-sensar u tal-pubblikatur tiegħek.

Primittivi ta' Reżiljenza ta' Nodu Uniku

Kju Reżiljenti/Rotot

Hemm żewġ tipi ta 'kjuwijiet f'RabbitMQ: durabbli u mhux dejjiema. Il-kjuwijiet kollha jiġu salvati fid-database tal-Mnesia. Kjuwijiet dejjiema jiġu reklamati mill-ġdid fl-istartjar tan-node u b'hekk jibqgħu ħajjin mill-ġdid, ħabtiet tas-sistema, jew ħabtiet tas-server (sakemm id-dejta tibqa'). Dan ifisser li sakemm tiddikjara r-rotot (skambju) u l-kju bħala reżiljenti, l-infrastruttura tal-kju/rotot terġa’ tiġi online.

Il-kjuwijiet u r-rotot volatili jitneħħew meta n-node jerġa' jinbeda.

Messaġġi persistenti

Sempliċement għax kju huwa dejjiemi ma jfissirx li l-messaġġi kollha tiegħu se jgħix minn restart tan-node. Messaġġi biss stabbiliti mill-pubblikatur bħala sostenibbli (persistenti). Messaġġi persistenti joħolqu tagħbija addizzjonali fuq is-sensar, imma jekk it-telf tal-messaġġi huwa inaċċettabbli, allura m'hemm l-ebda għażla oħra.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja fi Raggruppamenti
Ross. 1. Matriċi ta' sostenibbiltà

Raggruppament b'mirror tal-kju

Biex ngħixu mit-telf ta 'sensar, għandna bżonn is-sensja. Nistgħu ngħaqqdu nodi multipli RabbitMQ fi cluster, u mbagħad inżidu redundancy addizzjonali billi nirreplikaw kjuwijiet bejn nodi multipli. Dan il-mod, jekk node wieħed ifalli, ma nitilfux id-dejta u nibqgħu disponibbli.

Mirror tal-kju:

  • kju ewlieni wieħed (master), li jirċievi l-kmandi kollha tal-kitba u l-qari
  • mera waħda jew aktar li jirċievu l-messaġġi u l-metadata kollha mill-kju prinċipali. Dawn il-mirja mhumiex hemm għall-iskala, iżda purament għal redundancy.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja fi Raggruppamenti
Ross. 2. Mirror tal-kju

Mirroring huwa stabbilit mill-politika xierqa. Fiha tista 'tagħżel il-koeffiċjent ta' replikazzjoni u anke n-nodi li fuqhom għandu jkun jinsab il-kju. Eżempji:

  • ha-mode: all
  • ha-mode: exactly, ha-params: 2 (kaptan wieħed u mera waħda)
  • ha-mode: nodes, ha-params: rabbit@node1, rabbit@node2

Konferma tal-pubblikatur

Biex tinkiseb reġistrazzjoni konsistenti, huma meħtieġa l-Konferma tal-Pubblikatur. Mingħajrhom, hemm riskju li jintilfu messaġġi. Tintbagħat konferma lill-pubblikatur wara li l-messaġġ jinkiteb fuq id-diska. RabbitMQ jikteb messaġġi fuq disk mhux mal-wasla, iżda fuq bażi perjodika, fir-reġjun ta 'diversi mijiet ta' millisekondi. Meta kju jiġi rifless, rikonoxximent jintbagħat biss wara li l-mirja kollha jkunu kitbu wkoll il-kopja tagħhom tal-messaġġ fuq disk. Dan ifisser li l-użu tal-konfermi jżid il-latenza, iżda jekk is-sigurtà tad-dejta hija importanti, allura huma meħtieġa.

Kju ta' failover

Meta sensar jieqaf jew jiġġarraf, il-mexxejja kollha tal-kju (kaptani) fuq dak in-node jiġġarrfu flimkien miegħu. Il-cluster imbagħad jagħżel l-eqdem mera ta 'kull kaptan u jippromwoviha bħala l-kaptan il-ġdid.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja fi Raggruppamenti
Ross. 3. Kjuwijiet multipli riflessi u l-politiki tagħhom

Broker 3 jinżel. Innota li l-mera tal-Queue C fuq Broker 2 qed tiġi promossa għal kaptan. Innota wkoll li nħolqot mera ġdida għall-Kju C fuq Broker 1. RabbitMQ dejjem jipprova jżomm il-fattur ta' replikazzjoni speċifikat fil-politiki tiegħek.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja fi Raggruppamenti
Ross. 4. Is-sensar 3 ifalli, u jikkawża li l-kju Ċ ifalli

Is-sensar li jmiss 1 jaqa'! Fadal biss sensar wieħed. Il-mera tal-Kju B hija promossa għal kaptan.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja fi Raggruppamenti
Fig. 5

Aħna rritornajna Broker 1. Irrispettivament minn kemm id-dejta tibqa' ħajja mit-telf u l-irkupru tas-sensar, il-messaġġi kollha tal-kju riflessi jintremew mal-bidu mill-ġdid. Dan huwa importanti li wieħed jinnota għaliex se jkun hemm konsegwenzi. Aħna ser inħarsu lejn dawn l-implikazzjonijiet dalwaqt. Allura Broker 1 issa huwa membru tal-cluster mill-ġdid, u l-cluster jipprova jikkonforma mal-politiki u għalhekk joħloq mirja fuq Broker 1.

F'dan il-każ, it-telf ta 'Broker 1 kien komplut, kif kienet id-data, għalhekk il-Kju B mhux mirrorat intilef kompletament.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja fi Raggruppamenti
Ross. 6. Broker 1 jerġa' lura għas-servizz

Broker 3 reġa’ reġa’ jinsab online, u għalhekk il-kjuwijiet A u B jerġgħu jiksbu l-mirja maħluqa fuqu biex jissodisfaw il-politiki HA tagħhom. Imma issa l-kjuwijiet ewlenin kollha huma fuq node wieħed! Dan mhux ideali, distribuzzjoni uniformi bejn in-nodi hija aħjar. Sfortunatament, hawn m'hemmx ħafna għażliet għall-ibbilanċjar mill-ġdid tal-kaptani. Ser nerġgħu lura għal din il-kwistjoni aktar tard għaliex l-ewwel irridu nħarsu lejn is-sinkronizzazzjoni tal-kju.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja fi Raggruppamenti
Ross. 7. Broker 3 jerġa' lura għas-servizz. Il-kjuwijiet ewlenin kollha fuq nodu wieħed!

Allura issa għandu jkollok idea ta 'kif il-mirja jipprovdu redundancy u tolleranza għall-ħsarat. Dan jiżgura d-disponibbiltà fil-każ ta 'falliment ta' nodu wieħed u jipproteġi kontra t-telf tad-dejta. Imma għadna ma tlestiex, għax fir-realtà kollox huwa ħafna aktar ikkumplikat.

Sinkronizzazzjoni

Meta tinħoloq mera ġdida, il-messaġġi l-ġodda kollha dejjem ikunu replikati għal din il-mera u kwalunkwe oħra. Fir-rigward tad-dejta eżistenti fil-kju prinċipali, nistgħu nirreplikawha għal mera ġdida, li ssir kopja sħiħa tal-kaptan. Nistgħu wkoll nagħżlu li ma nirreplikawx messaġġi eżistenti u nħallu l-kju prinċipali u l-mera l-ġdida jikkonverġu fil-ħin, b'messaġġi ġodda jaslu f'denb u messaġġi eżistenti li jħallu l-kap tal-kju prinċipali.

Din is-sinkronizzazzjoni titwettaq awtomatikament jew manwalment u hija ġestita permezz ta' politika tal-kju. Ejja nħarsu lejn eżempju.

Għandna żewġ kjuwijiet riflessi. Kju A huwa sinkronizzat awtomatikament, u Kju B huwa sinkronizzat manwalment. Iż-żewġ kjuwijiet fihom għaxar messaġġi.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja fi Raggruppamenti
Ross. 8. Żewġ kjuwijiet b'modi ta 'sinkronizzazzjoni differenti

Issa qed nitilfu Broker 3.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja fi Raggruppamenti
Ross. 9. Broker 3 waqa

Broker 3 jerġa' lura għas-servizz. Il-cluster joħloq mera għal kull kju fuq in-nodu l-ġdid u awtomatikament jissinkronizza l-Kju A l-ġdid mal-kaptan. Madankollu, il-mera tal-Kju B il-ġdid tibqa' vojta. Dan il-mod ikollna redundancy sħiħa fuq Kju A u mera waħda biss għall-messaġġi eżistenti tal-Kju B.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja fi Raggruppamenti
Ross. 10. Il-mera l-ġdida tal-Kju A tirċievi l-messaġġi eżistenti kollha, iżda l-mera l-ġdida tal-Kju B le.

Għaxar messaġġi oħra jaslu fiż-żewġ kjuwijiet. Broker 2 imbagħad jiġġarraf u Kju A jmur lura għall-eqdem mera, li hija fuq Broker 1. M'hemm l-ebda telf ta 'dejta meta jonqos. Fil-Kju B, hemm għoxrin messaġġ fil-kaptan u għaxra biss fil-mera għaliex dan il-kju qatt ma replika l-għaxar messaġġi oriġinali.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja fi Raggruppamenti
Ross. 11. Il-Kju A jmur lura għal Broker 1 mingħajr ma jitlef il-messaġġi

Għaxar messaġġi oħra jaslu fiż-żewġ kjuwijiet. Issa Broker 1 jikkraxxja l-Kju A faċilment jaqleb għall-mera mingħajr ma jitlef il-messaġġi. Madankollu, Kju B qed ikollu problemi. F'dan il-punt nistgħu ottimizzaw jew id-disponibbiltà jew il-konsistenza.

Jekk irridu nottimizzaw l-aċċessibilità, allura l-politika ha-promozzjoni-fuq-falliment għandhom jiġu installati fi dejjem. Dan huwa l-valur default, għalhekk tista 'sempliċement ma tispeċifikax il-politika xejn. F'dan il-każ, essenzjalment qed inħallu fallimenti f'mirja mhux sinkronizzati. Dan jikkawża li jintilfu messaġġi, iżda l-kju jibqa’ jinqara u jinkiteb.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja fi Raggruppamenti
Ross. 12. Il-kju A jitreġġa' lura għal Broker 3 mingħajr ma jitlef il-messaġġi. Il-kju B jerġa' lura għal Broker 3 b'għaxar messaġġi mitlufa

Nistgħu wkoll ninstallaw ha-promote-on-failure fis-sens when-synced. F'dan il-każ, minflok ma jmur lura lejn il-mera, il-kju jistenna sakemm Broker 1 bid-dejta tiegħu jerġa' lura għall-modalità onlajn. Wara li jirritorna, il-kju prinċipali jerġa 'lura fuq Broker 1 mingħajr ebda telf ta' data. Id-disponibbiltà hija sagrifikata għas-sigurtà tad-dejta. Iżda din hija modalità riskjuża li tista 'saħansitra twassal għal telf sħiħ ta' data, li se nħarsu lejha dalwaqt.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja fi Raggruppamenti
Ross. 13. Il-kju B jibqa’ mhux disponibbli wara li jitlef il-Broker 1

Tista' tistaqsi, "Huwa aħjar li qatt ma tuża sinkronizzazzjoni awtomatika?" It-tweġiba hija li s-sinkronizzazzjoni hija operazzjoni ta 'imblukkar. Waqt is-sinkronizzazzjoni, il-kju prinċipali ma jista 'jwettaq l-ebda operazzjoni ta' qari jew tikteb!

Ejja nħarsu lejn eżempju. Issa għandna kjuwijiet twal ħafna. Kif jistgħu jikbru għal daqs bħal dan? Għal diversi raġunijiet:

  • Il-kjuwijiet mhumiex użati b'mod attiv
  • Dawn huma kjuwijiet ta’ veloċità għolja, u bħalissa l-konsumaturi qegħdin bil-mod
  • Huwa kjuwijiet ta 'veloċità għolja, kien hemm glitch u l-konsumaturi qed ilaħħqu

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja fi Raggruppamenti
Ross. 14. Żewġ kjuwijiet kbar b'modi ta 'sinkronizzazzjoni differenti

Issa Broker 3 jaqa '.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja fi Raggruppamenti
Ross. 15. Broker 3 jaqa ', li jħalli kaptan wieħed u mera f'kull kju

Broker 3 jerġa’ jiġi online u jinħolqu mirja ġodda. Il-Kju Prinċipali A jibda jirreplika messaġġi eżistenti fuq il-mera l-ġdida, u matul dan iż-żmien il-Kju ma jkunx disponibbli. Tieħu sagħtejn biex tirreplika d-dejta, li tirriżulta f'sagħtejn ta' waqfien għal dan il-Kju!

Madankollu, Kju B jibqa' disponibbli matul il-perjodu kollu. Hija ssagrifikat xi redundancy għall-aċċessibbiltà.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja fi Raggruppamenti
Ross. 16. Il-kju jibqa' mhux disponibbli waqt is-sinkronizzazzjoni

Wara sagħtejn, il-Kju A jsir disponibbli wkoll u jista' jerġa' jibda jaċċetta l-qari u l-kitba.

Aġġornamenti

Din l-imġieba ta 'imblukkar waqt is-sinkronizzazzjoni tagħmilha diffiċli biex taġġorna clusters bi kjuwijiet kbar ħafna. F'xi punt, in-node prinċipali jeħtieġ li jerġa 'jinbeda, li jfisser jew jimxi għal mera jew iddiżattiva l-kju waqt li s-server ikun qed jiġi aġġornat. Jekk nagħżlu li nagħmlu tranżizzjoni, nitilfu l-messaġġi jekk il-mirja ma jkunux sinkronizzati. B'mod awtomatiku, waqt qtugħ ta' sensar, ma jitwettaqx failover għal mera mhux sinkronizzata. Dan ifisser li hekk kif is-sensar jirritorna, ma nitilfu l-ebda messaġġ, l-unika ħsara kienet biss kju sempliċi. Ir-regoli tal-imġieba meta sensar jiġi skonnettjat huma stabbiliti mill-politika ha-promote-on-shutdown. Tista' tissettja wieħed minn żewġ valuri:

  • always= it-tranżizzjoni għal mirja mhux sinkronizzati hija attivata
  • when-synced= tranżizzjoni għal mera sinkronizzata biss, inkella l-kju isir ma jinqarax u ma jistax jinkiteb. Il-kju jerġa' lura għas-servizz hekk kif is-sensar jerġa' lura

Mod jew ieħor, bi kjuwijiet kbar trid tagħżel bejn it-telf tad-dejta u n-nuqqas ta’ disponibbiltà.

Meta d-Disponibbiltà Ittejjeb is-Sigurtà tad-Dejta

Hemm kumplikazzjoni oħra li trid tikkunsidra qabel ma tieħu deċiżjoni. Filwaqt li s-sinkronizzazzjoni awtomatika hija aħjar għal redundancy, kif għandha impatt fuq is-sigurtà tad-dejta? Naturalment, b'redundancy aħjar, RabbitMQ huwa inqas probabbli li jitlef messaġġi eżistenti, imma xi ngħidu dwar messaġġi ġodda mill-pubblikaturi?

Hawnhekk trid tikkunsidra dan li ġej:

  • Jista' l-pubblikatur sempliċement jirritorna żball u jkollu s-servizz upstream jew l-utent jerġa' jipprova aktar tard?
  • Jista' l-pubblikatur isalva l-messaġġ lokalment jew f'database biex jerġa' jipprova aktar tard?

Jekk il-pubblikatur jista 'jwarrab il-messaġġ biss, allura fil-fatt, it-titjib tal-aċċessibbiltà jtejjeb ukoll is-sigurtà tad-dejta.

Għalhekk, għandu jiġi mfittex bilanċ, u s-soluzzjoni tiddependi fuq is-sitwazzjoni speċifika.

Problemi b'ha-promote-on-failure=meta-sinkronizzat

Idea ha-promozzjoni-fuq-falliment= meta-sinkronizzat huwa li aħna jipprevjenu jaqilbu għal mera mhux sinkronizzata u b'hekk nevitaw it-telf tad-data. Il-kju jibqa' ma jinqarax jew jinkiteb. Minflok, nippruvaw nirkupraw is-sensar li ġġarraf bid-dejta tiegħu intatta sabiex ikun jista 'jerġa' jibda jaħdem bħala kaptan mingħajr telf ta 'dejta.

Iżda (u din hija imma kbira) jekk is-sensar tilef id-dejta tiegħu, allura għandna problema kbira: il-kju jintilef! Id-dejta kollha marret! Anke jekk għandek mirja li l-aktar ilaħħqu mal-kju prinċipali, dawk il-mirja jintremew ukoll.

Biex terġa 'żżid node bl-istess isem, ngħidu lill-cluster biex jinsa n-nodu mitluf (bil-kmand rabbitmqctl forget_cluster_node) u ibda sensar ġdid bl-istess hostname. Filwaqt li l-cluster jiftakar in-nodu mitluf, jiftakar il-kju l-antik u l-mirja mhux sinkronizzati. Meta cluster jingħad li jinsa node orfni, dak il-kju jintesa wkoll. Issa rridu niddikjarawha mill-ġdid. Tlifna d-dejta kollha, għalkemm kellna mirja b'sett parzjali ta 'dejta. Ikun aħjar li taqleb għal mera mhux sinkronizzata!

Għalhekk, sinkronizzazzjoni manwali (u nuqqas ta 'sinkronizzazzjoni) flimkien ma' ha-promote-on-failure=when-synced, fl-opinjoni tiegħi, pjuttost riskjużi. Id-doks jgħidu li din l-għażla teżisti għas-sigurtà tad-data, iżda hija sikkina b'żewġ truf.

Ibbilanċjar mill-ġdid tal-kaptan

Kif imwiegħed, nirritornaw għall-problema tal-akkumulazzjoni tal-kaptani kollha fuq nodi wieħed jew diversi. Dan jista 'saħansitra jiġri bħala riżultat ta' aġġornament ta 'cluster rolling. Fi cluster bi tliet nodi, il-kjuwijiet prinċipali kollha se jakkumulaw fuq nodu wieħed jew tnejn.

Ir-ribilanċjar tal-kaptani jista' jkun problematiku għal żewġ raġunijiet:

  • M'hemm l-ebda għodda tajba biex twettaq l-ibbilanċjar mill-ġdid
  • Sinkronizzazzjoni tal-kju

Hemm parti terza għall-ibbilanċjar mill-ġdid plugin, li mhix appoġġjata uffiċjalment. Rigward plugins ta’ partijiet terzi fil-manwal RabbitMQ qal: “Il-plugin jipprovdi xi konfigurazzjoni addizzjonali u għodod ta’ rappurtar, iżda mhuwiex appoġġjat jew ivverifikat mit-tim RabbitMQ. Uża għar-riskju tiegħek."

Hemm trick ieħor biex iċċaqlaq il-kju prinċipali permezz ta 'politiki HA. Il-manwal isemmi iskrittura għal din. Taħdem hekk:

  • Tneħħi l-mirja kollha billi tuża politika temporanja li għandha prijorità ogħla mill-politika eżistenti tal-HA.
  • Tibdel il-politika temporanja HA biex tuża l-modalità tan-node, u tispeċifika n-nodu li għalih għandu jiġi trasferit il-kju prinċipali.
  • Jissinkronizza l-kju għall-migrazzjoni push.
  • Wara li titlesta l-migrazzjoni, tħassar il-politika temporanja. Il-politika inizjali HA tidħol fis-seħħ u jinħoloq in-numru meħtieġ ta' mirja.

L-iżvantaġġ huwa li dan l-approċċ jista 'ma jaħdimx jekk għandek kjuwijiet kbar jew rekwiżiti stretti ta' redundancy.

Issa ejja naraw kif RabbitMQ clusters jaħdmu ma 'diviżorji tan-netwerk.

Telf ta' konnettività

In-nodi ta 'sistema mqassma huma konnessi b'konnessjonijiet tan-netwerk, u l-konnessjonijiet tan-netwerk jistgħu u se jiġu skonnettjati. Il-frekwenza tal-qtugħ tiddependi fuq l-infrastruttura lokali jew l-affidabbiltà tas-sħab magħżul. Fi kwalunkwe każ, is-sistemi distribwiti għandhom ikunu kapaċi jlaħħqu magħhom. Għal darb'oħra għandna għażla bejn id-disponibbiltà u l-konsistenza, u għal darb'oħra l-aħbar tajba hija li RabbitMQ jipprovdi ż-żewġ għażliet (sempliċement mhux fl-istess ħin).

Bil RabbitMQ għandna żewġ għażliet ewlenin:

  • Ħalli diviżjoni loġika (split-brain). Dan jiżgura d-disponibbiltà, iżda jista 'jikkawża telf ta' data.
  • Iddiżattiva separazzjoni loġika. Jista 'jirriżulta f'telf ta' disponibbiltà għal żmien qasir skont kif il-klijenti jikkonnettjaw mal-cluster. Jista 'jwassal ukoll għal indisponibbiltà sħiħa fi cluster b'żewġ nodi.

Imma x'inhi separazzjoni loġika? Dan huwa meta cluster jinqasam fi tnejn minħabba telf ta 'konnessjonijiet tan-netwerk. Fuq kull naħa, il-mirja jiġu promossi għal kaptan, sabiex eventwalment ikun hemm diversi kaptani għal kull kju.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja fi Raggruppamenti
Ross. 17. Kju prinċipali u żewġ mirja, kull wieħed fuq node separat. Imbagħad iseħħ falliment tan-netwerk u mera waħda tinqala'. In-nodu separat jara li t-tnejn l-oħra waqgħu u jippromwovi l-mirja tiegħu lill-kaptan. Issa għandna żewġ kjuwijiet ewlenin, kemm jistgħu jinkitbu kif ukoll jinqraw.

Jekk il-pubblikaturi jibagħtu data liż-żewġ kaptani, nispiċċaw b'żewġ kopji diverġenti tal-kju.

Il-modi differenti ta' RabbitMQ jipprovdu jew disponibbiltà jew konsistenza.

Injora l-mod (default)

Din il-modalità tiżgura aċċessibbiltà. Wara t-telf tal-konnettività, isseħħ separazzjoni loġika. Wara li l-konnettività tiġi restawrata, l-amministratur għandu jiddeċiedi liema partizzjoni jagħti prijorità. In-naħa li titlef se terġa 'tibda u d-data kollha akkumulata fuq dik in-naħa tintilef.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja fi Raggruppamenti
Ross. 18. Tliet pubblikaturi huma assoċjati ma' tliet sensara. Internament, il-cluster iwassal it-talbiet kollha lejn il-kju prinċipali fuq Broker 2.

Issa qed nitilfu Broker 3. Huwa jara li sensara oħra waqgħu u jippromwovi l-mera tiegħu lill-kaptan. Hekk isseħħ separazzjoni loġika.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja fi Raggruppamenti
Ross. 19. Diviżjoni loġika (split-brain). Ir-rekords jidħlu f'żewġ kjuwijiet ewlenin, u ż-żewġ kopji jvarjaw.

Il-konnettività hija restawrata, iżda s-separazzjoni loġika tibqa '. L-amministratur għandu jagħżel manwalment in-naħa li titlef. Fil-każ hawn taħt, l-amministratur jerġa 'jibda Broker 3. Il-messaġġi kollha li ma rnexxilux jittrasmetti jintilfu.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja fi Raggruppamenti
Ross. 20. L-amministratur jiskonnettja Broker 3.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja fi Raggruppamenti
Ross. 21. L-amministratur jibda Broker 3 u jingħaqad mal-cluster, u jitlef il-messaġġi kollha li tħallew hemm.

Matul it-telf tal-konnettività u wara r-restawr tagħha, il-cluster u dan il-kju kienu disponibbli għall-qari u l-kitba.

Modalità Autoheal

Jaħdem b'mod simili għall-mod Injora, ħlief li l-cluster innifsu jagħżel awtomatikament in-naħa li titlef wara li jaqsam u jirrestawra l-konnettività. In-naħa telliefa terġa' lura fil-cluster vojta, u l-kju jitlef il-messaġġi kollha li ntbagħtu biss lil dik in-naħa.

Pawża Modalità Minoranza

Jekk ma rridux nippermettu qsim loġiku, allura l-unika għażla tagħna hija li narmi jaqra u jikteb fuq in-naħa l-iżgħar wara l-partizzjoni tal-cluster. Meta s-sensar jara li jinsab fuq in-naħa l-iżgħar, jissospendi x-xogħol, jiġifieri jagħlaq il-konnessjonijiet eżistenti kollha u jirrifjuta xi oħrajn ġodda. Darba kull sekonda jiċċekkja għar-restawr tal-konnettività. Ladarba l-konnettività tiġi restawrata, terġa 'tibda t-tħaddim u tingħaqad mal-cluster.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja fi Raggruppamenti
Ross. 22. Tliet pubblikaturi huma assoċjati ma' tliet sensara. Internament, il-cluster iwassal it-talbiet kollha lejn il-kju prinċipali fuq Broker 2.

Brokers 1 u 2 imbagħad jinqasam minn Broker 3. Minflok jippromwovi l-mera tagħhom għall-kaptan, Broker 3 jissospendi u ma jkunx disponibbli.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja fi Raggruppamenti
Ross. 23. Is-sensar 3 iwaqqaf, jiskonnettja l-klijenti kollha, u jirrifjuta t-talbiet għall-konnessjoni.

Ladarba l-konnettività tiġi restawrata, terġa 'lura għall-cluster.

Ejja nħarsu lejn eżempju ieħor fejn il-kju ewlieni jinsab fuq Broker 3.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja fi Raggruppamenti
Ross. 24. Kju prinċipali fuq Broker 3.

Imbagħad iseħħ l-istess telf ta 'konnettività. Broker 3 jieqaf għax jinsab fuq in-naħa l-iżgħar. Min-naħa l-oħra, in-nodi jaraw li Broker 3 waqa ', għalhekk il-mera anzjani minn Brokers 1 u 2 hija promossa għall-kaptan.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja fi Raggruppamenti
Ross. 25. Transizzjoni għal Broker 2 jekk Broker 3 ma jkunx disponibbli.

Meta l-konnettività tiġi restawrata, Broker 3 se jingħaqad mal-cluster.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja fi Raggruppamenti
Ross. 26. Il-cluster reġa' lura għall-operat normali.

L-importanti li nifhmu hawnhekk hija li jkollna konsistenza, iżda nistgħu wkoll niksbu disponibbiltà, jekk Aħna se nittrasferixxu b'suċċess klijenti fil-biċċa l-kbira tat-taqsima. Għall-biċċa l-kbira tas-sitwazzjonijiet, jien personalment nagħżel il-modalità Pause Minority, iżda verament jiddependi fuq il-każ individwali.

Biex tiġi żgurata d-disponibbiltà, huwa importanti li jiġi żgurat li l-klijenti jikkonnettjaw b'suċċess mal-host. Ejja nħarsu lejn l-għażliet tagħna.

L-iżgurar tal-Konnettività tal-Klijent

Għandna diversi għażliet dwar kif nidderieġu lill-klijenti lejn il-parti prinċipali tal-cluster jew lejn in-nodi tax-xogħol (wara li nodu wieħed ifalli) wara telf ta 'konnettività. L-ewwel, ejja niftakru li kju speċifiku huwa ospitat fuq node speċifiku, iżda r-rotot u l-politiki huma replikati fin-nodi kollha. Il-klijenti jistgħu jgħaqqdu ma 'kwalunkwe nodu, u r-rotot intern jidderieġihom fejn għandhom bżonn imorru. Iżda meta nodu jiġi sospiż, jirrifjuta l-konnessjonijiet, u għalhekk il-klijenti jridu jgħaqqdu ma 'nodu ieħor. Jekk in-nodu jaqa ', ftit li xejn jista' jagħmel.

L-għażliet tagħna:

  • Il-cluster huwa aċċessat bl-użu ta 'load balancer li sempliċement iċekkel fin-nodi u l-klijenti jerġgħu jippruvaw jgħaqqdu sakemm jirnexxu. Jekk node jkun imniżżel jew sospiż, allura tentattivi ta' konnessjoni ma' dak in-nodu jfallu, iżda tentattivi sussegwenti jmorru għal servers oħra (b'mod round-robin). Dan huwa adattat għal telf ta 'konnettività għal żmien qasir jew server imwaqqa' li se jittella' lura malajr.
  • Aċċessa għar-raggruppament permezz ta 'load balancer u neħħi n-nodi sospiżi/falluti mil-lista hekk kif jiġu skoperti. Jekk nagħmlu dan malajr, u jekk il-klijenti jkunu jistgħu jerġgħu jippruvaw il-konnessjoni, allura niksbu disponibbiltà kostanti.
  • Agħti lil kull klijent lista tan-nodi kollha, u l-klijent jagħżel b'mod każwali wieħed minnhom meta jgħaqqad. Jekk jirċievi żball meta jipprova jgħaqqad, jimxi lejn in-nodu li jmiss fil-lista sakemm jgħaqqad.
  • Neħħi t-traffiku minn nodu fallut/sospiż billi tuża d-DNS. Dan isir bl-użu ta 'TTL żgħir.

Sejbiet

RabbitMQ clustering għandu l-vantaġġi u l-iżvantaġġi tiegħu. L-iżvantaġġi l-aktar serji huma li:

  • meta jingħaqdu ma 'cluster, in-nodi jarmu d-dejta tagħhom;
  • l-imblukkar tas-sinkronizzazzjoni jikkawża li l-kju ma jkunx disponibbli.

Id-deċiżjonijiet diffiċli kollha joħorġu minn dawn iż-żewġ karatteristiċi arkitettoniċi. Jekk RabbitMQ jista 'jiffranka d-dejta meta l-cluster jerġa' jingħaqad, allura s-sinkronizzazzjoni tkun aktar mgħaġġla. Kieku kien kapaċi li ma jimblokkax sinkronizzazzjoni, ikun jappoġġa aħjar kjuwijiet kbar. L-iffissar ta' dawn iż-żewġ kwistjonijiet itejjeb bil-kbir il-prestazzjoni ta' RabbitMQ bħala teknoloġija ta' messaġġi tolleranti għall-ħsarat u disponibbli ħafna. Inkun lura milli nirrakkomanda RabbitMQ bi clustering fis-sitwazzjonijiet li ġejjin:

  • Netwerk mhux affidabbli.
  • Ħażna mhux affidabbli.
  • Kjuwijiet twal ħafna.

Meta niġu għall-issettjar ta’ disponibbiltà għolja, ikkunsidra dan li ġej:

  • ha-promote-on-failure=always
  • ha-sync-mode=manual
  • cluster_partition_handling=ignore (Jew autoheal)
  • messaġġi persistenti
  • tiżgura li l-klijenti jgħaqqdu man-node attiv meta xi nodu jfalli

Għal konsistenza (sigurtà tad-dejta), ikkunsidra s-settings li ġejjin:

  • Il-Pubblikatur Jikkonferma u Rikonoxximenti Manwali min-naħa tal-konsumatur
  • ha-promote-on-failure=when-synced, jekk il-pubblikaturi jistgħu jerġgħu jippruvaw aktar tard u jekk għandek ħażna affidabbli ħafna! Inkella tpoġġi =always.
  • ha-sync-mode=automatic (iżda għal kjuwijiet kbar inattivi jista' jkun meħtieġ il-mod manwali; ikkunsidra wkoll jekk in-nuqqas ta' disponibbiltà jikkawżax li jintilfu messaġġi)
  • Pawża modalità minoranza
  • messaġġi persistenti

Għadna ma koprejnax il-kwistjonijiet kollha tat-tolleranza tal-ħsarat u d-disponibbiltà għolja; pereżempju, kif twettaq b'mod sigur proċeduri amministrattivi (bħal aġġornamenti rolling). Għandna bżonn ukoll nitkellmu dwar il-federazzjoni u l-plugin Shovel.

Jekk tlift xi ħaġa oħra, jekk jogħġbok għarrafni.

Ara wkoll tiegħi wara, fejn inwettaq havoc fuq cluster RabbitMQ bl-użu ta 'Docker u Blockade biex nittestja xi wħud mix-xenarji ta' telf ta 'messaġġi deskritti f'dan l-artikolu.

Artikli preċedenti fis-serje:
Nru 1 - habr.com/ru/company/itsumma/blog/416629
Nru 2 - habr.com/ru/company/itsumma/blog/418389
Nru 3 - habr.com/ru/company/itsumma/blog/437446

Sors: www.habr.com

Ixtri hosting affidabbli għal siti bi protezzjoni DDoS, servers VPS VDS 🔥 Ixtri hosting ta' websajts affidabbli bi protezzjoni DDoS, servers VPS VDS | ProHoster