Nissuġġerixxi li taqra t-traskrizzjoni tal-lecture "Hadoop. ZooKeeper" mis-serje "Metodi għall-ipproċessar imqassam ta 'volumi kbar ta' dejta f'Hadoop"
X'inhu ZooKeeper, il-post tiegħu fl-ekosistema Hadoop. Mhux veritajiet dwar kompjuters distribwiti. Dijagramma ta' sistema distribwita standard. Diffikultà fil-koordinazzjoni tas-sistemi distribwiti. Problemi ta' koordinazzjoni tipiċi. Il-prinċipji wara d-disinn ta 'ZooKeeper. Mudell tad-dejta ZooKeeper. bnadar znode. Sessjonijiet. Klijent API. Primittivi (konfigurazzjoni, sħubija fi grupp, serraturi sempliċi, elezzjoni tal-mexxej, qfil mingħajr effett merħla). Arkitettura ZooKeeper. ZooKeeper DB. ZAB. Maniġer tar-rikjesti.


Illum se nitkellmu dwar ZooKeeper. Din il-ħaġa hija utli ħafna. Huwa, bħal kull prodott Apache Hadoop, għandu logo. Hija turi raġel.
Qabel dan, tkellimna prinċipalment dwar kif id-dejta tista 'tiġi pproċessata hemmhekk, kif taħżenha, jiġifieri, kif tużaha b'xi mod u taħdem magħha b'xi mod. U llum nixtieq nitkellem ftit dwar il-bini ta' applikazzjonijiet imqassma. U ZooKeeper hija waħda minn dawk l-affarijiet li tippermettilek tissimplifika din il-kwistjoni. Dan huwa tip ta 'servizz li huwa maħsub għal xi tip ta' koordinazzjoni tal-interazzjoni ta 'proċessi f'sistemi distribwiti, f'applikazzjonijiet distribwiti.
Il-ħtieġa għal applikazzjonijiet bħal dawn qed issir aktar u aktar kuljum, dan huwa dak li l-kors tagħna huwa kollu dwar. Min-naħa waħda, MapReduce u dan il-qafas lest jippermettilek li tilivella din il-kumplessità u teħles lill-programmatur mill-kitba primittivi bħall-interazzjoni u l-koordinazzjoni tal-proċessi. Iżda min-naħa l-oħra, ħadd ma jiggarantixxi li dan mhux se jkollu jsir xorta waħda. MapReduce jew oqfsa lesti oħra mhux dejjem jissostitwixxu kompletament xi każijiet li ma jistgħux jiġu implimentati bl-użu ta 'dan. Inkluż MapReduce innifsu u mazz ta 'proġetti Apache oħra huma, fil-fatt, huma wkoll mqassma applikazzjonijiet. U biex il-kitba tkun aktar faċli, kitbu ZooKeeper.
Bħall-applikazzjonijiet kollha relatati ma' Hadoop, ġie żviluppat minn Yahoo! Issa hija wkoll applikazzjoni uffiċjali tal-Apache. Mhuwiex żviluppat b'mod attiv daqs HBase. Jekk tmur għand JIRA HBase, allura kuljum hemm mazz ta 'rapporti ta' bug, mazz ta 'proposti biex tottimizza xi ħaġa, jiġifieri l-ħajja fil-proġett għaddejja kontinwament. U ZooKeeper, min-naħa waħda, huwa prodott relattivament sempliċi, u min-naħa l-oħra, dan jiżgura l-affidabbiltà tiegħu. U huwa pjuttost faċli biex tużah, u huwa għalhekk li sar standard fl-applikazzjonijiet fi ħdan l-ekosistema Hadoop. Għalhekk ħsibt li jkun utli li tirrevediha biex tifhem kif taħdem u kif tużaha.

Din hija stampa minn xi lecture li kellna. Nistgħu ngħidu li huwa ortogonali għal dak kollu li kkunsidrajna s'issa. U dak kollu li huwa indikat hawn, sa grad jew ieħor, jaħdem ma 'ZooKeeper, jiġifieri, huwa servizz li juża dawn il-prodotti kollha. La HDFS u lanqas MapReduce ma jiktbu s-servizzi simili tagħhom stess li jaħdmu speċifikament għalihom. Għaldaqstant, jintuża ZooKeeper. U dan jissimplifika l-iżvilupp u xi affarijiet relatati mal-iżbalji.

Minn fejn ġej dan kollu? Jidher li nedejna żewġ applikazzjonijiet b'mod parallel fuq kompjuters differenti, konnessihom bi spag jew f'malja, u kollox jaħdem. Iżda l-problema hija li n-Netwerk mhuwiex affidabbli, u jekk xammejt it-traffiku jew ħares lejn dak li qed jiġri hemmhekk f'livell baxx, kif il-klijenti jinteraġixxu fuq in-Netwerk, ħafna drabi tista 'tara li xi pakketti jintilfu jew jerġgħu jintbagħtu. Mhux ta 'xejn li ġew ivvintati protokolli TCP, li jippermettulek tistabbilixxi ċerta sessjoni u jiggarantixxu l-kunsinna ta' messaġġi. Iżda fi kwalunkwe każ, anke TCP mhux dejjem jista 'jsalvak. Kollox għandu timeout. In-netwerk jista 'sempliċement jaqa' għal xi żmien. Jista 'biss teptip. U dan kollu jwassal għall-fatt li ma tistax tistrieħ fuq li n-Netwerk ikun affidabbli. Din hija d-differenza ewlenija mill-kitba ta 'applikazzjonijiet paralleli li jaħdmu fuq kompjuter wieħed jew fuq superkompjuter wieħed, fejn m'hemm l-ebda Netwerk, fejn hemm xarabank ta' skambju ta 'dejta aktar affidabbli fil-memorja. U din hija differenza fundamentali.
Fost affarijiet oħra, meta tuża n-Netwerk, dejjem ikun hemm ċerta latenza. Id-disk għandu wkoll, iżda n-Netwerk għandu aktar minnu. Il-latenza hija xi żmien ta' dewmien, li jista' jkun jew żgħir jew pjuttost sinifikanti.
It-topoloġija tan-netwerk qed tinbidel. X'inhi topoloġija - dan huwa t-tqegħid tat-tagħmir tan-netwerk tagħna. Hemm ċentri tad-dejta, hemm xtillieri li joqgħodu hemm, hemm xemgħat. Dan kollu jista' jerġa' jiġi konness, imċaqlaq, eċċ. Dan kollu jeħtieġ ukoll li jittieħed kont. L-ismijiet tal-IP jinbidlu, ir-rotot li minnu jivvjaġġa t-traffiku tagħna jinbidel. Dan jeħtieġ li jitqies ukoll.
In-netwerk jista' jinbidel ukoll f'termini ta' tagħmir. Mill-prattika, nista 'ngħid li l-inġiniera tan-netwerk tagħna verament jixtiequ jaġġornaw perjodikament xi ħaġa fuq ix-xemgħat. F'daqqa waħda ħareġ firmware ġdid u ma kinux partikolarment interessati f'xi cluster Hadoop. Għandhom ix-xogħol tagħhom. Għalihom, il-ħaġa prinċipali hija li n-Netwerk jaħdem. Għaldaqstant, iridu jerġgħu jtellgħu xi ħaġa hemmhekk, jagħmlu jteptep fuq il-ħardwer tagħhom, u l-ħardwer jinbidel ukoll perjodikament. Dan kollu b'xi mod jeħtieġ li jitqies. Dan kollu jaffettwa l-applikazzjoni mqassma tagħna.
Normalment in-nies li jibdew jaħdmu b'ammonti kbar ta 'dejta għal xi raġuni jemmnu li l-Internet huwa illimitat. Jekk hemm fajl ta 'diversi terabytes hemmhekk, allura tista' teħodha fuq is-server jew il-kompjuter tiegħek u tiftaħha billi tuża qattus u għassa. Żball ieħor jinsab fi vim ħares lejn il-zkuk. Qatt tagħmel dan għax huwa ħażin. Għax Vim jipprova jbafer kollox, jgħabbi kollox fil-memorja, speċjalment meta nibdew nimxu minn dan il-ġurnal u nfittxu xi ħaġa. Dawn huma affarijiet li huma minsija, iżda ta 'min jikkunsidrah.

Huwa aktar faċli li tikteb programm wieħed li jaħdem fuq kompjuter wieħed bi proċessur wieħed.
Meta s-sistema tagħna tikber, irridu nipparallelizzaw dan kollu, u niparallellizzawh mhux biss fuq kompjuter, iżda wkoll fuq cluster. Tqum il-mistoqsija: kif tikkoordina din il-kwistjoni? L-applikazzjonijiet tagħna jistgħu lanqas jinteraġixxu ma 'xulxin, iżda għamilna diversi proċessi b'mod parallel fuq diversi servers. U kif tissorvelja li kollox sejjer tajjeb għalihom? Pereżempju, jibagħtu xi ħaġa fuq l-Internet. Għandhom jiktbu dwar l-istat tagħhom x'imkien, pereżempju, f'xi tip ta 'database jew log, imbagħad jiġbru dan il-log u mbagħad janalizzawh x'imkien. Barra minn hekk, irridu nqisu li l-proċess kien qed jaħdem u jaħdem, f'daqqa waħda deher xi żball fih jew ġġarraf, allura kemm se nsiru nafu dwaru malajr?
Huwa ċar li dan kollu jista 'jiġi mmonitorjat malajr. Dan huwa tajjeb ukoll, iżda l-monitoraġġ huwa ħaġa limitata li tippermettilek tissorvelja xi affarijiet fl-ogħla livell.
Meta rridu li l-proċessi tagħna jibdew jinteraġixxu ma 'xulxin, pereżempju, biex jibagħtu xi dejta lil xulxin, allura tqum ukoll il-mistoqsija - kif se jiġri dan? Se jkun hemm xi tip ta 'kundizzjoni ta' razza, se jissostitwixxu lil xulxin, id-data tasal b'mod korrett, xi ħaġa se tintilef tul it-triq? Irridu niżviluppaw xi tip ta’ protokoll, eċċ.
Il-koordinazzjoni ta’ dawn il-proċessi kollha mhijiex xi ħaġa trivjali. U jġiegħel lill-iżviluppatur jinżel għal livell saħansitra aktar baxx, u jikteb sistemi jew mill-bidu, jew mhux pjuttost mill-bidu, iżda dan mhux daqshekk sempliċi.
Jekk toħroġ b'algoritmu kriptografiku jew saħansitra timplimentah, imbagħad armih immedjatament, għax x'aktarx mhux se taħdem għalik. X'aktarx ikun fih għadd ta' żbalji li insejt tipprovdi għalihom. Qatt tużah għal xi ħaġa serja għax x'aktarx se tkun instabbli. Minħabba li l-algoritmi kollha li jeżistu ġew ittestjati biż-żmien għal żmien twil ħafna. Huwa bugged mill-komunità. Dan huwa suġġett separat. U hawn l-istess. Jekk huwa possibbli li ma timplimentax xi tip ta 'sinkronizzazzjoni tal-proċess lilek innifsek, allura huwa aħjar li ma tagħmilx dan, minħabba li hija pjuttost ikkumplikata u twassalk fit-triq dgħajfa ta' tfittxija kontinwa għal żbalji.
Illum qed nitkellmu dwar ZooKeeper. Min-naħa waħda, huwa qafas, min-naħa l-oħra, huwa servizz li jagħmel il-ħajja aktar faċli għall-iżviluppatur u jissimplifika kemm jista 'jkun l-implimentazzjoni tal-loġika u l-koordinazzjoni tal-proċessi tagħna.

Ejja niftakru kif tista' tidher sistema distribwita standard. Dan huwa dak li tkellimna dwar - HDFS, HBase. Hemm proċess Master li jamministra l-ħaddiema u l-proċessi tal-iskjavi. Huwa responsabbli għall-koordinazzjoni u d-distribuzzjoni tal-kompiti, il-bidu mill-ġdid tal-ħaddiema, it-tnedija ta 'oħrajn ġodda, u d-distribuzzjoni tat-tagħbija.

Ħaġa aktar avvanzata hija s-Servizz ta 'Koordinazzjoni, jiġifieri, iċċaqlaq il-kompitu ta' koordinazzjoni innifsu fi proċess separat, flimkien ma 'xi tip ta' backup jew Master stanby b'mod parallel, minħabba li l-Kaptan jista 'jfalli. U jekk jaqa 'l-Imgħallem, allura s-sistema tagħna ma taħdimx. Qed inħaddmu backup. Xi stati li l-Kaptan jeħtieġ li jiġi replikat għall-backup. Dan jista' wkoll jiġi fdat lis-Servizz ta' Koordinazzjoni. Iżda f'din id-dijagramma, il-Kaptan innifsu huwa responsabbli għall-koordinazzjoni tal-ħaddiema hawnhekk is-servizz qed jikkoordina l-attivitajiet ta 'replikazzjoni tad-dejta;

Għażla aktar avvanzata hija meta l-koordinazzjoni kollha tiġi mmaniġġjata mis-servizz tagħna, kif isir normalment. Huwa jieħu r-responsabbiltà li jiżgura li kollox jaħdem. U jekk xi ħaġa ma taħdimx, insiru nafu dwarha u nippruvaw nersqu din is-sitwazzjoni. Fi kwalunkwe każ, nibqgħu b'Master li b'xi mod jinteraġixxi mal-iskjavi u jista 'jibgħat data, informazzjoni, messaġġi, eċċ permezz ta' xi servizz.

Hemm skema saħansitra aktar avvanzata, meta ma jkollniex Master, in-nodi kollha huma skjavi kaptan, differenti fl-imġieba tagħhom. Iżda xorta jridu jinteraġixxu ma 'xulxin, għalhekk għad fadal xi servizz biex jikkoordina dawn l-azzjonijiet. Probabbilment, Cassandra, li taħdem fuq dan il-prinċipju, taqbel ma 'din l-iskema.
Huwa diffiċli li wieħed jgħid liema minn dawn l-iskemi taħdem aħjar. Kull wieħed għandu l-vantaġġi u l-iżvantaġġi tiegħu.

U m’hemmx għalfejn nibżgħu minn xi affarijiet mal-Imgħallem, għax, kif turi l-prattika, mhux daqshekk suxxettibbli li jaqdi kontinwament. Il-ħaġa prinċipali hawnhekk hija li tagħżel is-soluzzjoni t-tajba biex tospita dan is-servizz fuq node qawwi separat, sabiex ikollu biżżejjed riżorsi, sabiex jekk possibbli, l-utenti ma jkollhomx aċċess hemm, sabiex ma joqtlux dan il-proċess aċċidentalment. Iżda fl-istess ħin, fi skema bħal din huwa ħafna aktar faċli li timmaniġġja l-ħaddiema mill-proċess tal-Master, jiġifieri din l-iskema hija aktar sempliċi mil-lat tal-implimentazzjoni.

U din l-iskema (hawn fuq) hija probabbilment aktar kumplessa, iżda aktar affidabbli.

Il-problema ewlenija hija l-fallimenti parzjali. Pereżempju, meta nibagħtu messaġġ fuq in-Netwerk, iseħħ xi tip ta 'inċident, u dak li bagħat il-messaġġ ma jkunx jaf jekk il-messaġġ tiegħu ġiex irċevut u x'ġara min-naħa tar-riċevitur, ma jkunx jaf jekk il-messaġġ kienx ipproċessat b'mod korrett , jiġifieri ma jirċievi ebda konferma.
Għaldaqstant, irridu nipproċessaw din is-sitwazzjoni. U l-aktar ħaġa sempliċi hija li nibagħtu mill-ġdid dan il-messaġġ u nistennew sakemm nirċievu tweġiba. F'dan il-każ, ma jitqiesx jekk l-istat tar-riċevitur inbidilx. Nistgħu nibagħtu messaġġ u nżidu l-istess data darbtejn.
ZooKeeper joffri modi kif nittrattaw rifjuti bħal dawn, li jagħmlulna wkoll ħajjitna aktar faċli.

Kif issemma ftit qabel, dan huwa simili għall-kitba ta 'programmi b'ħafna ħajt, iżda d-differenza ewlenija hija li f'applikazzjonijiet distribwiti li nibnu fuq magni differenti, l-uniku mod biex nikkomunikaw huwa n-Netwerk. Essenzjalment, din hija arkitettura kondiviża-xejn. Kull proċess jew servizz li jaħdem fuq magna waħda għandu l-memorja tiegħu, id-diska tiegħu, il-proċessur tiegħu, li ma jaqsam ma 'ħadd.
Jekk niktbu programm b'ħafna kamini fuq kompjuter wieħed, allura nistgħu nużaw memorja kondiviża biex niskambjaw data. Għandna swiċċ tal-kuntest hemmhekk, il-proċessi jistgħu jaqilbu. Dan jaffettwa l-prestazzjoni. Min-naħa waħda, m'hemm l-ebda ħaġa bħal din fil-programm fuq cluster, iżda hemm problemi man-Netwerk.

Għaldaqstant, il-problemi ewlenin li jinqalgħu meta tikteb sistemi mqassma huma l-konfigurazzjoni. Qed niktbu xi tip ta' applikazzjoni. Jekk huwa sempliċi, allura aħna hardcode kull xorta ta 'numri fil-kodiċi, iżda dan huwa inkonvenjenti, għaliex jekk niddeċiedu li minflok timeout ta' nofs sekonda rridu timeout ta 'sekonda waħda, allura jeħtieġ li nikkompilaw mill-ġdid l-applikazzjoni u roll out kollox mill-ġdid. Hija ħaġa waħda meta tkun fuq magna waħda, meta tista 'sempliċement terġa' tibda, imma meta jkollna ħafna magni, irridu nikkopjaw kollox kontinwament. Irridu nippruvaw nagħmlu l-applikazzjoni konfigurabbli.
Hawnhekk qed nitkellmu dwar konfigurazzjoni statika għall-proċessi tas-sistema. Dan mhux għal kollox, forsi mil-lat tas-sistema operattiva, jista 'jkun konfigurazzjoni statika għall-proċessi tagħna, jiġifieri din hija konfigurazzjoni li ma tistax sempliċement tittieħed u tiġi aġġornata.
Hemm ukoll konfigurazzjoni dinamika. Dawn huma l-parametri li rridu nbiddlu fuq il-fly sabiex jinġabru hemm.
X'inhi l-problema hawn? Aġġornajna l-konfigurazzjoni, ħarġajna, allura xiex? Il-problema tista 'tkun li min-naħa l-waħda aħna rolled out il-konfigurazzjoni, iżda nesa dwar il-ħaġa ġdida, il-konfigurazzjoni baqgħet hemm. It-tieni nett, waqt li konna qed ngħaddu, il-konfigurazzjoni ġiet aġġornata f'xi postijiet, iżda mhux f'oħrajn. U xi proċessi tal-applikazzjoni tagħna li jaħdmu fuq magna waħda reġgħu nbdew b'konfigurazzjoni ġdida, u x'imkien b'waħda qadima. Dan jista 'jirriżulta fl-applikazzjoni mqassma tagħna tkun inkonsistenti minn perspettiva ta' konfigurazzjoni. Din il-problema hija komuni. Għal konfigurazzjoni dinamika, hija aktar rilevanti minħabba li timplika li tista 'tiġi mibdula fuq il-fly.
Problema oħra hija s-sħubija fil-grupp. Dejjem għandna xi sett ta’ ħaddiema, dejjem irridu nkunu nafu min minnhom huwa ħaj, min minnhom huwa mejjet. Jekk hemm Kaptan, allura jrid jifhem liema ħaddiema jistgħu jiġu ridiretti lejn il-klijenti sabiex imexxu kalkoli jew jaħdmu bid-dejta, u liema ma jistgħux. Problema li tqum kontinwament hija li rridu nkunu nafu min qed jaħdem fil-cluster tagħna.
Problema tipika oħra huma l-elezzjonijiet tal-mexxejja, meta rridu nkunu nafu min hu responsabbli. Eżempju wieħed huwa r-replikazzjoni, meta jkollna xi proċess li jirċievi operazzjonijiet ta 'kitba u mbagħad jirreplikahom fost proċessi oħra. Hu se jkun il-mexxej, kulħadd jobdih, jimxi warajh. Huwa meħtieġ li tagħżel proċess sabiex ma jkunx ambigwu għal kulħadd, sabiex ma jirriżultax li jintgħażlu żewġ mexxejja.
Hemm ukoll aċċess reċiprokament esklużiv. Il-problema hawnhekk hija aktar kumplessa. Hemm xi ħaġa bħal mutex, meta tikteb programmi b'ħafna kamini u trid aċċess għal xi riżorsa, pereżempju, ċellula tal-memorja, li tkun limitata u mwettqa b'ħajt wieħed biss. Hawnhekk ir-riżorsa tista' tkun xi ħaġa aktar astratta. U applikazzjonijiet differenti minn nodi differenti tan-Netwerk tagħna għandhom jirċievu biss aċċess esklussiv għal riżors partikolari, u mhux sabiex kulħadd ikun jista' jibdelha jew jikteb xi ħaġa hemmhekk. Dawn huma l-hekk imsejħa serraturi.
ZooKeeper jippermettilek issolvi dawn il-problemi kollha sa grad jew ieħor. U ser nuri b'eżempji kif tippermettilek tagħmel dan.

M'hemm l-ebda primitives imblukkar. Meta nibdew nużaw xi ħaġa, dan il-primittiv mhux se jistenna li jseħħ xi avveniment. Probabbilment, din il-ħaġa taħdem b'mod asinkroniku, u b'hekk tippermetti li l-proċessi ma jiddendlux waqt li jkunu qed jistennew xi ħaġa. Din hija ħaġa utli ħafna.
It-talbiet kollha tal-klijenti huma pproċessati fl-ordni tal-kju ġenerali.
U l-klijenti għandhom l-opportunità li jirċievu notifika dwar bidliet f'xi stat, dwar bidliet fid-dejta, qabel ma l-klijent jara d-dejta mibdula huma stess.

ZooKeeper jista' jopera f'żewġ modi. L-ewwel wieħed huwa waħdu, fuq node wieħed. Dan huwa konvenjenti għall-ittestjar. Jista' jopera wkoll fil-modalità ta' cluster, fuq kwalunkwe numru ta' nodes. serversJekk ikollna cluster ta' 100 magna, mhux bilfors irid jaħdem fuq 100 magna. Huwa biżżejjed li nallokaw ftit magni fejn ZooKeeper jista' jaħdem. U jaderixxi mal-prinċipju ta' disponibbiltà għolja. ZooKeeper jaħżen kopja sħiħa tad-dejta fuq kull istanza li tkun qed taħdem. Se nispjega kif jagħmel dan aktar tard. Ma jifredx jew jaqsamx id-dejta. Minn naħa waħda, dan huwa żvantaġġ għax ma nistgħux naħżnu ħafna, iżda min-naħa l-oħra, mhux neċessarju. Mhuwiex iddisinjat għal dan; mhuwiex database.
Id-data tista 'tiġi cached fuq in-naħa tal-klijent. Dan huwa prinċipju standard sabiex ma ninterrompux is-servizz u ma tagħbijahx bl-istess talbiet. Klijent intelliġenti normalment ikun jaf dwar dan u jżommha fil-caches.
Per eżempju, xi ħaġa inbidlet hawn. Hemm xi tip ta 'applikazzjoni. Ġie elett mexxej ġdid, li huwa responsabbli, pereżempju, għall-ipproċessar tal-operazzjonijiet tal-kitba. U rridu nirreplikaw id-data. Soluzzjoni waħda hija li tpoġġiha f'linja. U aħna kontinwament niddubitaw is-servizz tagħna - xi ħaġa nbidlet? It-tieni għażla hija aktar ottimali. Dan huwa mekkaniżmu ta 'għassa li jippermettilek tinnotifika lill-klijenti li xi ħaġa inbidlet. Dan huwa metodu inqas għali f'termini ta 'riżorsi u aktar konvenjenti għall-klijenti.

Klijent huwa l-utent li juża ZooKeeper.
Server huwa l-proċess ZooKeeper innifsu.
Znode huwa l-ħaġa ewlenija f'ZooKeeper. Iż-znodes kollha huma maħżuna fil-memorja minn ZooKeeper u huma organizzati fil-forma ta 'dijagramma ġerarkika, fil-forma ta' siġra.
Hemm żewġ tipi ta 'operazzjonijiet. L-ewwel huwa aġġornament/kitba, meta xi operazzjoni tbiddel l-istat tas-siġra tagħna. Is-siġra hija komuni.
U huwa possibbli li l-klijent ma jlestix talba waħda u jiġi skonnettjat, iżda jista 'jistabbilixxi sessjoni li permezz tagħha jinteraġixxi ma' ZooKeeper.

Il-mudell tad-dejta ta’ ZooKeeper jixbaħ sistema ta’ fajls. Hemm għerq standard u mbagħad morna daqslikieku permezz tad-direttorji li jmorru mill-għerq. U mbagħad il-katalgu tal-ewwel livell, it-tieni livell. Dan kollu huwa znodes.
Kull znode jista 'jaħżen xi data, ġeneralment mhux kbir ħafna, pereżempju, 10 kilobytes. U kull znode jista 'jkollu ċertu numru ta' tfal.

Znodes jidħlu f'diversi tipi. Jistgħu jinħolqu. U meta noħolqu znode, aħna nispeċifikaw it-tip li għandu jappartjeni għalih.
Hemm żewġ tipi. L-ewwel hija l-bandiera effimera. Znode jgħix f'sessjoni. Pereżempju, il-klijent stabbilixxa sessjoni. U sakemm din is-sessjoni tkun ħajja, se teżisti. Dan huwa meħtieġ sabiex ma tipproduċix xi ħaġa mhux meħtieġa. Dan huwa adattat ukoll għal mumenti meta huwa importanti għalina li naħżnu primittivi tad-dejta f'sessjoni.
It-tieni tip huwa bandiera sekwenzjali. Hija żżid il-counter fit-triq lejn iż-znode. Per eżempju, kellna direttorju bl-applikazzjoni 1_5. U meta ħloqna l-ewwel node, irċieva p_1, it-tieni - p_2. U meta nsejħu dan il-metodu kull darba, aħna ngħaddu l-mogħdija sħiħa, li tindika biss parti mill-mogħdija, u dan in-numru huwa awtomatikament inkrementat għaliex aħna nindikaw it-tip ta 'node - sekwenzjali.
Znode regolari. Hija dejjem tgħix u jkollha l-isem li ngħidulha.

Ħaġa oħra utli hija l-bandiera tal-għassa. Jekk ninstallawha, allura l-klijent jista 'jabbona għal xi avvenimenti għal nodu speċifiku. Ser nuruk aktar tard b’eżempju kif dan isir. ZooKeeper innifsu jinnotifika lill-klijent li d-dejta fuq in-node nbidlet. Madankollu, in-notifiki ma jiggarantixxux li tkun waslet xi data ġdida. Huma sempliċiment jgħidu li xi ħaġa nbidlet, għalhekk għad trid tqabbel id-dejta aktar tard ma 'sejħiet separati.
U kif diġà għedt, l-ordni tad-dejta hija determinata minn kilobytes. M'hemm l-ebda ħtieġa li tinħażen data ta 'test kbir hemmhekk, minħabba li mhix database, hija server ta' koordinazzjoni ta 'azzjoni.

Ħa ngħidilkom ftit dwar is-sessjonijiet. Jekk għandna diversi servers, nistgħu nibdlu b'mod trasparenti minn server għal ieħor. server, bl-użu tal-ID tas-sessjoni. Dan huwa pjuttost konvenjenti.
Kull sessjoni għandha xi tip ta 'timeout. Sessjoni hija definita minn jekk il-klijent jibgħatx xi ħaġa lis-server matul dik is-sessjoni. Jekk ma trasmetta xejn matul il-timeout, is-sessjoni taqa ', jew il-klijent jista' jagħlaqha hu stess.

M'għandux daqshekk karatteristiċi, iżda tista' tagħmel affarijiet differenti b'din l-API. Dik is-sejħa li rajna toħloq toħloq znode u tieħu tliet parametri. Din hija t-triq lejn iż-znode, u għandha tkun speċifikata b'mod sħiħ mill-għerq. U wkoll din hija xi data li rridu nittrasferixxu hemm. U t-tip ta 'bandiera. U wara l-ħolqien jirritorna t-triq lejn iż-znode.
It-tieni, tista 'tħassarha. Il-trick hawnhekk huwa li t-tieni parametru, minbarra l-mogħdija għall-znode, jista 'jispeċifika l-verżjoni. Għaldaqstant, dak znode jitħassar jekk il-verżjoni tiegħu li ttrasferijna hija ekwivalenti għal dik li fil-fatt teżisti.
Jekk ma rridux niċċekkjaw din il-verżjoni, allura sempliċement ngħaddu l-argument "-1".

It-tielet, jiċċekkja għall-eżistenza ta 'znode. Jirritorna veru jekk in-nodu jeżisti, falz inkella.
U mbagħad tidher l-għassa tal-bandiera, li tippermettilek tissorvelja dan in-node.
Tista' tissettja din il-bandiera anke fuq node ineżistenti u tirċievi notifika meta tidher. Dan jista 'jkun utli wkoll.
Ftit sfidi oħra huma getData. Huwa ċar li nistgħu nirċievu data permezz ta 'znode. Tista 'wkoll tuża għassa tal-bandiera. F'dan il-każ, mhux se jinstalla jekk ma jkunx hemm node. Għalhekk, trid tifhem li teżisti, u mbagħad tirċievi data.

Hemm ukoll SetData. Hawnhekk ngħaddu verżjoni. U jekk ngħaddu dan, id-dejta fuq iż-znode ta 'ċerta verżjoni tiġi aġġornata.
Tista' wkoll tispeċifika "-1" biex teskludi dan il-kontroll.
Metodu ieħor utli huwa getChildren. Nistgħu wkoll tikseb lista ta 'znodes kollha li jappartjenu għaliha. Nistgħu nissorveljaw dan billi nissettjaw l-għassa tal-bandiera.
U metodu sync jippermetti li l-bidliet kollha jintbagħtu f'daqqa, u b'hekk jiġi żgurat li jiġu ssejvjati u d-dejta kollha nbidlet kompletament.
Jekk niġbdu analoġiji ma 'programmazzjoni konvenzjonali, allura meta tuża metodi bħall-kitba, li tikteb xi ħaġa fuq disk, u wara li tirritorna tweġiba lilek, m'hemm l-ebda garanzija li ktibt id-data fuq id-disk. U anke meta s-sistema operattiva tkun kunfidenti li kollox inkiteb, hemm mekkaniżmi fid-disk innifsu fejn il-proċess jgħaddi minn saffi ta 'buffers, u biss wara li d-data titqiegħed fuq id-diska.

L-aktar sejħiet asinkroniċi huma użati. Dan jippermetti lill-klijent jaħdem b'mod parallel ma 'talbiet differenti. Tista 'tuża l-approċċ sinkroniku, iżda huwa inqas produttiv.
Iż-żewġ operazzjonijiet li tkellimna dwarhom huma aġġornament/kitba, li jibdlu d-dejta. Dawn huma toħloq, setData, sync, ħassar. U aqra hija teżisti, getData, getChildren.

Issa ftit eżempji ta 'kif tista' tagħmel primitives biex taħdem f'sistema distribwita. Per eżempju, relatat mal-konfigurazzjoni ta 'xi ħaġa. Deher ħaddiem ġdid. Żidna l-magna u bdejna l-proċess. U hemm it-tliet mistoqsijiet li ġejjin. Kif tistaqsi lil ZooKeeper għall-konfigurazzjoni? U jekk irridu nbiddlu l-konfigurazzjoni, kif nibdluha? U wara li biddilna, kif jiksbuha dawk il-ħaddiema li kellna?
ZooKeeper jagħmel dan relattivament faċli. Pereżempju, hemm is-siġra znode tagħna. Hemm node għall-applikazzjoni tagħna hawn, noħolqu node addizzjonali fih, li fih data mill-konfigurazzjoni. Dawn jistgħu jew ma jistgħux ikunu parametri separati. Peress li d-daqs huwa żgħir, id-daqs tal-konfigurazzjoni ġeneralment ikun żgħir ukoll, għalhekk huwa pjuttost possibbli li tinħażen hawn.
Qed tuża l-metodu getData biex tikseb il-konfigurazzjoni għall-ħaddiem min-node. Issettja għal vera. Jekk għal xi raġuni dan in-node ma jeżistix, inkunu infurmati dwaru meta jidher, jew meta jinbidel. Jekk irridu nkunu nafu li xi ħaġa nbidlet, allura nissettjawha għal vera. U jekk id-dejta f'dan in-node tinbidel, inkunu nafu dwarha.
SetData. Aħna nissettjaw id-dejta, issettjaw "-1", jiġifieri ma niċċekkjawx il-verżjoni, nassumu li dejjem għandna konfigurazzjoni waħda, m'għandniex bżonn naħżnu ħafna konfigurazzjonijiet. Jekk għandek bżonn taħżen ħafna, ser ikollok bżonn iżżid livell ieħor. Hawnhekk nemmnu li hemm waħda biss, għalhekk naġġornaw l-aħħar waħda biss, sabiex ma niċċekkjawx il-verżjoni. F'dan il-mument, il-klijenti kollha li jkunu abbonaw qabel jirċievu notifika li xi ħaġa nbidlet f'dan in-node. U wara li jkunu rċevewha, għandhom ukoll jitolbu d-dejta mill-ġdid. In-notifika hija li ma jirċevux id-dejta nnifisha, iżda biss notifika tal-bidliet. Wara dan iridu jitolbu dejta ġdida.

It-tieni għażla għall-użu tal-primittiv hija sħubija fi grupp. Għandna applikazzjoni mqassma, hemm mazz ħaddiema u rridu nifhmu li huma kollha f'posthom. Għalhekk, għandhom jirreġistraw lilhom infushom li jaħdmu fl-applikazzjoni tagħna. U rridu nsiru nafu wkoll, jew mill-proċess tal-Master jew xi mkien ieħor, dwar il-ħaddiema attivi kollha li għandna bħalissa.
Kif nagħmlu dan? Għall-applikazzjoni, noħolqu node tal-ħaddiema u nżidu sottolivell hemm billi tuża l-metodu tal-ħolqien. Għandi żball fuq il-pjastra. Hawnhekk għandek bżonn sekwenzjali speċifika, allura l-ħaddiema kollha se jinħolqu wieħed wieħed. U l-applikazzjoni, li titlob id-dejta kollha dwar it-tfal ta 'dan in-node, tirċievi l-ħaddiema attivi kollha li jeżistu.


Din hija tali implimentazzjoni terribbli ta 'kif dan jista' jsir fil-kodiċi Java. Nibdew mill-aħħar, bil-metodu prinċipali. Din hija l-klassi tagħna, ejja noħolqu l-metodu tagħha. Bħala l-ewwel argument nużaw host, fejn qed nikkonnettjaw, jiġifieri nissettjawha bħala argument. U t-tieni argument huwa l-isem tal-grupp.
Kif isseħħ il-konnessjoni? Dan huwa eżempju sempliċi tal-API li tintuża. Kollox huwa relattivament sempliċi hawn. Hemm ZooKeeper klassi standard. Aħna ngħaddu hosts lilha. U ssettja l-timeout, pereżempju, għal 5 sekondi. U għandna membru msejjaħ ConnectedSignal. Essenzjalment, noħolqu grupp tul it-triq trażmessa. Aħna ma niktbux data hemmhekk, għalkemm xi ħaġa setgħet inkitbet. U n-nodu hawnhekk huwa tat-tip persistenti. Essenzjalment, dan huwa node regolari ordinarju li se jeżisti l-ħin kollu. Dan huwa fejn tinħoloq is-sessjoni. Din hija l-implimentazzjoni tal-klijent innifsu. Il-klijent tagħna perjodikament jirrapporta li s-sessjoni hija ħajja. U meta ntemmu s-sessjoni, insejħu qrib u hekk, is-sessjoni taqa’. Dan f’każ li xi ħaġa taqa’ għalina, sabiex ZooKeeper isir jaf biha u jaqta’ s-sessjoni.

Kif tissakkar riżorsa? Hawnhekk kollox huwa ftit aktar ikkumplikat. Għandna sett ta 'ħaddiema, hemm xi riżors li rridu nissakkar. Biex tagħmel dan, noħolqu node separat, pereżempju, imsejjaħ lock1. Jekk konna kapaċi noħolquha, allura aħna ltqajna lock hawn. U jekk ma konniex kapaċi noħolquha, allura l-ħaddiem jipprova jikseb getData minn hawn, u peress li n-nodu diġà nħoloq, allura npoġġu watcher hawn u l-mument li l-istat ta 'dan in-nodu jinbidel, inkunu nafu dwaru. U nistgħu nippruvaw ikollna ħin biex nirrekrejawha. Jekk ħadna dan in-node, ħadna dan il-lock, allura wara li m'għadniex bżonn is-serratura, se nabbandunawha, peress li n-nodu jeżisti biss fis-sessjoni. Għaldaqstant, se jisparixxi. U klijent ieħor, fil-qafas ta 'sessjoni oħra, se jkun jista' jieħu l-lock fuq dan in-node, jew aħjar, jirċievi notifika li xi ħaġa nbidlet u jista 'jipprova jagħmel dan fil-ħin.

Eżempju ieħor ta’ kif tista’ tagħżel il-mexxej ewlieni. Dan huwa ftit aktar ikkumplikat, iżda wkoll relattivament sempliċi. X'qed jiġri hawn? Hemm nodu ewlieni li jiġbor il-ħaddiema kollha. Qed nippruvaw niksbu data dwar il-mexxej. Jekk dan ġara b'suċċess, jiġifieri rċevejna xi dejta, allura l-ħaddiem tagħna jibda jsegwi lil dan il-mexxej. Jemmen li diġà hemm mexxej.
Jekk il-mexxej miet għal xi raġuni, pereżempju, waqa ', allura nippruvaw noħolqu mexxej ġdid. U jekk nirnexxu, allura l-ħaddiem tagħna jsir il-mexxej. U jekk xi ħadd f'dan il-mument irnexxielu joħloq mexxej ġdid, allura nippruvaw nifhmu min hu u mbagħad isegwuh.
Hawnhekk iqum l-hekk imsejjaħ effett tal-merħla, jiġifieri l-effett tal-merħla, għax meta jmut mexxej, dak li jkun l-ewwel fiż-żmien isir il-mexxej.

Meta taqbad riżorsa, tista 'tipprova tuża approċċ kemmxejn differenti, li huwa kif ġej. Per eżempju, irridu nġibu lock, iżda mingħajr l-effett hert. Se tikkonsisti fil-fatt li l-applikazzjoni tagħna titlob listi tal-ids kollha tan-nodi għal nodu diġà eżistenti b'serratura. U jekk qabel dak in-node li għalih ħloqna lock huwa l-iżgħar mis-sett li rċevejna, allura dan ifisser li qbidna l-lock. Aħna niċċekkjaw li rċevejna lock. Bħala kontroll, se jkun hemm kundizzjoni li l-id li rċevejna meta ħloqna serratura ġdida tkun minima. U jekk irċevejna, allura naħdmu aktar.
Jekk hemm ċerta id li hija iżgħar mill-lock tagħna, allura aħna npoġġu watcher fuq dan l-avveniment u nistennew għan-notifika sakemm xi ħaġa tinbidel. Jiġifieri rċevejna din is-serratura. U sakemm jaqa ', mhux se nsiru l-id minimu u mhux se nirċievu l-lock minimu, u b'hekk inkunu nistgħu nilloggjaw. U jekk din il-kundizzjoni ma tiġix sodisfatta, allura immedjatament immorru hawn u nippruvaw nerġgħu niksbu dan is-serratura, għax xi ħaġa setgħet inbidlet matul dan iż-żmien.

Fiex jikkonsisti ZooKeeper? Hemm 4 affarijiet ewlenin. Dan huwa proċessi ta 'proċessar - Talba. U wkoll ZooKeeper Atomic Broadcast. Hemm Commit Log fejn jiġu rreġistrati l-operazzjonijiet kollha. U l-In-memory Replicated DB innifsu, jiġifieri d-database nnifisha fejn tinħażen din is-siġra kollha.
Ta 'min jinnota li l-operazzjonijiet kollha ta' kitba jgħaddu mill-Proċessur tat-Talba. U l-operazzjonijiet tal-qari jmorru direttament fid-database fil-memorja.

Id-database innifsu huwa replikat bis-sħiħ. L-istanzi kollha ta' ZooKeeper jaħżnu kopja sħiħa tad-dejta.
Sabiex tirrestawra d-database wara ħabta, hemm reġistru tal-Impenn. Il-prattika standard hija li qabel id-data tidħol fil-memorja, tkun miktuba hemmhekk sabiex jekk tiġġarraf, dan il-log jista 'jindaqq lura u l-istat tas-sistema jista' jiġi rrestawrat. U snapshots perjodiċi tad-database huma wkoll użati.

ZooKeeper Atomic Broadcast hija ħaġa li tintuża biex tinżamm data replikata.
ZAB jagħżel internament mexxej mil-lat tan-node ZooKeeper. Nodi oħra jsiru segwaċi tagħha u jistennew xi azzjonijiet mingħandha. Jekk jirċievu daħliet, jgħadduhom kollha lill-mexxej. L-ewwel jagħmel operazzjoni ta’ kitba u mbagħad jibgħat messaġġ dwar dak li nbidel lis-segwaċi tiegħu. Dan, fil-fatt, għandu jsir atomikament, jiġifieri l-operazzjoni ta 'reġistrazzjoni u xandir tal-ħaġa sħiħa għandha titwettaq atomikament, u b'hekk tiggarantixxi l-konsistenza tad-dejta.
Jipproċessa biss it-talbiet tal-kitba. Il-kompitu ewlieni tiegħu huwa li jittrasforma l-operazzjoni f'aġġornament transazzjonali. Din hija talba ġġenerata apposta.
U hawn ta 'min jinnota li l-idempotenza ta' aġġornamenti għall-istess operazzjoni hija garantita. X'inhu? Din il-ħaġa, jekk tiġi eżegwita darbtejn, ikollha l-istess stat, jiġifieri t-talba nnifisha ma tinbidelx. U dan jeħtieġ li jsir sabiex f'każ ta 'ħabta, tista' terġa 'tibda l-operazzjoni, u b'hekk tirreġġa' lura l-bidliet li waqgħu fil-mument. F'dan il-każ, l-istat tas-sistema se jsir l-istess, jiġifieri m'għandux ikun il-każ li serje ta 'l-istess, pereżempju, proċessi ta' aġġornament, wasslu għal stati finali differenti tas-sistema.








Sors: www.habr.com
