Mwen sijere ou li transkripsyon konferans "Hadoop. ZooKeeper" ki soti nan seri "Metòd pou distribiye pwosesis gwo volim done nan Hadoop".
Ki sa ki ZooKeeper, plas li nan ekosistèm Hadoop la. Men manti sou distribye informatique. Dyagram yon sistèm distribiye estanda. Difikilte pou kowòdone sistèm distribiye yo. Pwoblèm kowòdinasyon tipik. Prensip ki dèyè konsepsyon ZooKeeper. Modèl done ZooKeeper. drapo znode. Sesyon yo. Kliyan API. Primitif (konfigirasyon, manm gwoup, kadna senp, eleksyon lidè, bloke san efè twoupo). Achitekti ZooKeeper. ZooKeeper DB. ZAB. Mande okipe.


Jodi a nou pral pale sou ZooKeeper. Bagay sa a trè itil. Li, tankou nenpòt pwodwi Apache Hadoop, gen yon logo. Li dekri yon nonm.
Anvan sa, nou sitou te pale sou ki jan done yo ka trete la, ki jan yo estoke li, se sa ki, ki jan yo sèvi ak li yon jan kanmenm ak travay avèk li yon jan kanmenm. Ak jodi a mwen ta renmen pale yon ti kras sou bati aplikasyon distribiye. Epi ZooKeeper se youn nan bagay sa yo ki pèmèt ou senplifye zafè sa a. Sa a se yon kalite sèvis ki gen entansyon pou kèk kalite kowòdinasyon nan entèraksyon an nan pwosesis nan sistèm distribiye, nan aplikasyon distribiye.
Bezwen pou aplikasyon sa yo ap vin pi plis ak plis chak jou, se sa ki kou nou an se tout sou. Sou yon bò, MapReduce ak kad ki pare sa a pèmèt ou nivo konpleksite sa a epi libere pwogramè a soti nan ekri primitif tankou entèraksyon ak kowòdinasyon nan pwosesis. Men, nan lòt men an, pèsonn pa garanti ke sa a pa pral oblije fè de tout fason. MapReduce oswa lòt kad pare yo pa toujou konplètman ranplase kèk ka ki pa ka aplike lè l sèvi avèk sa a. Ki gen ladan MapReduce tèt li ak yon pakèt lòt Apache pwojè yo, an reyalite, yo tou distribye aplikasyon yo. Ak pou fè ekri pi fasil, yo te ekri ZooKeeper.
Tankou tout aplikasyon ki gen rapò ak Hadoop, li te devlope pa Yahoo! Li se tou kounye a yon aplikasyon ofisyèl Apache. Li pa devlope aktivman tankou HBase. Si ou ale nan JIRA HBase, Lè sa a, chak jou gen yon pakèt rapò sou ensèk, yon pakèt moun sou pwopozisyon yo optimize yon bagay, sa vle di lavi nan pwojè a toujou ap pase. Ak ZooKeeper, sou yon bò, se yon pwodwi relativman senp, ak sou lòt men an, sa a asire fyab li yo. Epi li se byen fasil yo sèvi ak, ki se poukisa li te vin yon estanda nan aplikasyon nan ekosistèm Hadoop la. Se konsa, mwen te panse li ta itil yo revize li yo konprann ki jan li fonksyone ak ki jan yo sèvi ak li.

Sa a se yon foto nan kèk konferans nou te fè. Nou ka di ke li orthogonal ak tout sa nou te konsidere jiska prezan. Ak tout sa ki endike isit la, nan yon degre oswa yon lòt, travay ak ZooKeeper, sa vle di, li se yon sèvis ki sèvi ak tout pwodwi sa yo. Ni HDFS ni MapReduce ekri pwòp sèvis menm jan an ki ta espesyalman travay pou yo. An konsekans, yo itilize ZooKeeper. Lè sa a senplifye devlopman ak kèk bagay ki gen rapò ak erè.

Ki kote tout bagay sa yo soti? Li ta sanble ke nou te lanse de aplikasyon an paralèl sou òdinatè diferan, konekte yo ak yon fisèl oswa nan yon may, ak tout bagay ap travay. Men, pwoblèm nan se ke Rezo a pa fyab, epi si ou santi trafik la oswa gade sa k ap pase la a yon nivo ki ba, ki jan kliyan kominike sou Rezo a, ou ka souvan wè ke kèk pake yo pèdi oswa re-voye. Se pa pou anyen ke pwotokòl TCP yo te envante, ki pèmèt ou etabli yon sesyon sèten epi garanti livrezon mesaj yo. Men, nan nenpòt ka, menm TCP pa ka toujou sove ou. Tout bagay gen yon timeout. Rezo a ka tou senpleman tonbe pou yon ti tan. Li ta ka jis bat. Lè sa a tout mennen nan lefèt ke ou pa ka konte sou Rezo a ke yo te serye. Sa a se diferans prensipal la nan ekri aplikasyon paralèl ki kouri sou yon sèl òdinatè oswa sou yon sèl supercomputer, kote pa gen Rezo, kote gen yon otobis echanj done ki pi serye nan memwa. Ak sa a se yon diferans fondamantal.
Pami lòt bagay, lè w ap itilize Rezo a, toujou gen yon sèten latansi. Disk la tou gen li, men Rezo a gen plis nan li. Latansi se kèk tan reta, ki ka swa ti oswa byen enpòtan.
Topoloji rezo a ap chanje. Ki sa ki topoloji - sa a se plasman nan ekipman rezo nou an. Gen sant done, gen etajè ki kanpe la, gen bouji. Tout bagay sa yo ka rekonekte, deplase, elatriye. Sa a tout bezwen tou dwe pran an kont. Non IP yo chanje, wout trafik nou an ap vwayaje chanje. Sa a tou bezwen pran an konsiderasyon.
Rezo a ka chanje tou an tèm de ekipman. Soti nan pratik, mwen ka di ke enjenyè rezo nou yo reyèlman renmen mete ajou detanzantan yon bagay sou bouji yo. Toudenkou yon nouvo firmwèr te soti epi yo pa te patikilyèman enterese nan kèk gwoup Hadoop. Yo gen pwòp travay yo. Pou yo, bagay prensipal la se ke rezo a ap travay. An konsekans, yo vle re-upload yon bagay la, fè yon flache sou pyès ki nan konpitè yo, ak pyès ki nan konpitè tou chanje detanzantan. Tout bagay sa a yon jan kanmenm bezwen pran an kont. Tout bagay sa yo afekte aplikasyon distribiye nou an.
Anjeneral moun ki kòmanse travay ak gwo kantite done pou kèk rezon kwè ke entènèt la se illimité. Si gen yon dosye ki gen plizyè teraoctet la, Lè sa a, ou ka pran li sou sèvè ou oswa òdinatè epi louvri li lè l sèvi avèk chat epi gade. Yon lòt erè se nan Vim gade mòso bwa yo. Pa janm fè sa paske li move. Paske Vim eseye tampon tout bagay, chaje tout bagay nan memwa, sitou lè nou kòmanse deplase nan boutèy sa a epi chèche yon bagay. Sa yo se bagay ki bliye, men vo konsidere.

Li pi fasil pou ekri yon pwogram ki kouri sou yon òdinatè ak yon sèl processeur.
Lè sistèm nou an ap grandi, nou vle paralelize li tout, epi paralelize li pa sèlman sou yon òdinatè, men tou sou yon gwoup. Kesyon an rive: ki jan yo kowòdone pwoblèm sa a? Aplikasyon nou yo ka pa menm kominike youn ak lòt, men nou te kouri plizyè pwosesis an paralèl sou plizyè serveurs. Ak ki jan yo kontwole ke tout bagay ap mache byen pou yo? Pou egzanp, yo voye yon bagay sou entènèt la. Yo dwe ekri sou eta yo yon kote, pou egzanp, nan yon kalite baz done oswa yon boutèy demi lit, Lè sa a, yo rasanble mòso sa a epi analize li yon kote. Anplis de sa, nou bezwen pran an kont ke pwosesis la te travay ak travay, toudenkou kèk erè parèt nan li oswa li te fè aksidan, Lè sa a, konbyen vit nou pral jwenn enfòmasyon sou li?
Li klè ke tout bagay sa yo ka byen vit kontwole. Sa a tou bon, men siveyans se yon bagay limite ki pèmèt ou kontwole kèk bagay nan nivo ki pi wo.
Lè nou vle pwosesis nou yo kòmanse kominike youn ak lòt, pou egzanp, youn voye lòt kèk done, Lè sa a, kesyon an tou rive - ki jan sa pral rive? Èske pral gen yon kalite kondisyon ras, yo pral ranplase youn ak lòt, èske done yo rive kòrèkteman, èske anyen pral pèdi sou wout la? Nou bezwen devlope yon kalite pwotokòl, elatriye.
Kowòdinasyon nan tout pwosesis sa yo se pa yon bagay trivial. Epi li fòse pwomotè a desann nan yon nivo menm pi ba, epi ekri sistèm swa nan grate, oswa pa byen nan grate, men sa a se pa tèlman senp.
Si ou vini ak yon algorithm kriptografik oswa menm aplike li, Lè sa a, jete li imedyatman, paske gen plis chans li pa pral travay pou ou. Li pral gen plis chans gen yon pakèt erè ke ou bliye bay pou. Pa janm sèvi ak li pou anyen ki grav paske li pral gen plis chans enstab. Paske tout algoritm ki egziste yo te teste pa tan pou yon tan trè lontan. Li se ensèk pa kominote a. Sa a se yon sijè separe. Epi se menm bagay la tou isit la. Si li posib pa aplike kèk kalite senkronizasyon pwosesis tèt ou, Lè sa a, li pi bon pa fè sa, paske li se byen konplike epi mennen ou desann chemen an enstab nan toujou ap chèche erè.
Jodi a nou ap pale de ZooKeeper. Sou yon bò, li se yon kad, nan lòt men an, li se yon sèvis ki fè lavi pi fasil pou pwomotè a ak senplifye aplikasyon an nan lojik ak kowòdinasyon nan pwosesis nou yo otank posib.

Ann sonje ki jan yon sistèm distribiye estanda ta ka sanble. Sa a se sa nou te pale sou - HDFS, HBase. Gen yon pwosesis Mèt ki jere travayè ak pwosesis esklav. Li responsab pou kowòdone ak distribye travay, rekòmanse travayè yo, lanse nouvo, ak distribye chay la.

Yon bagay ki pi avanse se Sèvis Kowòdinasyon an, se sa ki, deplase travay la kowòdinasyon tèt li nan yon pwosesis separe, plis kouri kèk kalite backup oswa stanby Mèt nan paralèl, paske Mèt la ka echwe. Men, si Mèt la tonbe, Lè sa a, sistèm nou an pa pral travay. Nou ap kouri backup. Gen kèk eta ke Mèt la gen bezwen yo dwe repwodui nan backup. Sa a kapab tou konfye nan Sèvis Kowòdinasyon an. Men, nan dyagram sa a, Mèt la li menm ki responsab pou kowòdone travayè yo isit la sèvis la ap kowòdone aktivite replikasyon done yo.

Yon opsyon ki pi avanse se lè tout kowòdinasyon okipe pa sèvis nou an, jan sa konn fè. Li pran responsablite pou asire tout bagay mache. Men, si yon bagay pa travay, nou jwenn enfòmasyon sou li epi eseye jwenn alantou sitiyasyon sa a. Nan nenpòt ka, nou rete ak yon Mèt ki yon jan kanmenm reyaji ak esklav epi li ka voye done, enfòmasyon, mesaj, elatriye atravè kèk sèvis.

Gen yon konplo menm pi avanse, lè nou pa gen yon Mèt, tout nœuds yo se esklav mèt, diferan nan konpòtman yo. Men, yo toujou bezwen kominike youn ak lòt, kidonk gen toujou kèk sèvis ki rete pou kowòdone aksyon sa yo. Pwobableman, Cassandra, ki travay sou prensip sa a, adapte konplo sa a.
Li difisil pou di kiyès nan plan sa yo ki travay pi byen. Chak gen pwòp avantaj ak dezavantaj li yo.

Epi pa gen okenn nesesite pou w pè kèk bagay ak Mèt la, paske, jan pratik montre, li pa tèlman fasil pou sèvi toujou. Bagay pwensipal lan isit la se chwazi solisyon an dwa pou òganize sèvis sa a sou yon ne separe pwisan, se konsa ke li gen ase resous, pou ke si sa posib, itilizatè yo pa gen aksè la, pou yo pa aksidantèlman touye pwosesis sa a. Men, an menm tan, nan yon konplo konsa li pi fasil pou jere travayè yo nan pwosesis Master, sa vle di konplo sa a pi senp nan pwen de vi aplikasyon an.

Ak konplo sa a (pi wo a) se pwobableman pi konplèks, men plis serye.

Pwoblèm prensipal la se echèk pasyèl. Pa egzanp, lè nou voye yon mesaj sou Rezo a, yon kalite aksidan rive, epi moun ki voye mesaj la pa pral konnen si mesaj li a te resevwa ak sa ki te pase bò reseptè a, li pap konnen si mesaj la te trete kòrèkteman. , sa vle di li pap resevwa okenn konfimasyon.
An konsekans, nou dwe trete sitiyasyon sa a. Ak sa ki pi senp la se renvoyer mesaj sa a epi tann jiskaske nou resevwa yon repons. Nan ka sa a, li pa pran an kont si eta a nan reseptè a te chanje. Petèt nou voye yon mesaj epi ajoute menm done yo de fwa.
ZooKeeper ofri fason pou fè fas ak refi sa yo, ki fè lavi nou pi fasil tou.

Kòm mansyone yon ti kras pi bonè, sa a se menm jan ak ekri pwogram milti-threaded, men diferans prensipal la se ke nan aplikasyon distribiye ke nou bati sou machin diferan, sèl fason yo kominike se Rezo a. Esansyèlman, sa a se yon achitekti pataje-pa gen anyen. Chak pwosesis oswa sèvis ki kouri sou yon machin gen pwòp memwa li, pwòp disk li yo, pwòp processeur li yo, li pa pataje ak pèsonn.
Si nou ekri yon pwogram milti-threaded sou yon òdinatè, Lè sa a, nou ka itilize memwa pataje pou fè echanj done. Nou gen yon switch kontèks la, pwosesis yo ka chanje. Sa afekte pèfòmans. Sou yon bò, pa gen okenn bagay konsa nan pwogram nan sou yon grap, men gen pwoblèm ak Rezo a.

An konsekans, pwoblèm prensipal yo ki rive lè w ap ekri sistèm distribiye yo se konfigirasyon. Nou ap ekri kèk kalite aplikasyon. Si li se senp, Lè sa a, nou di tout kalite nimewo nan kòd la, men sa a se enkonvenyan, paske si nou deside ke olye pou yo yon delè nan mwatye yon segonn nou vle yon delè nan yon segonn, Lè sa a, nou bezwen rekonpile aplikasyon an ak woule tout bagay ankò. Li se yon sèl bagay lè li sou yon machin, lè ou ka jis rekòmanse li, men lè nou gen anpil machin, nou dwe toujou ap kopye tout bagay. Nou dwe eseye fè aplikasyon an configurable.
Isit la nou ap pale de konfigirasyon estatik pou pwosesis sistèm yo. Sa a se pa totalman, petèt nan pwen de vi sistèm operasyon an, li ka yon konfigirasyon estatik pou pwosesis nou yo, sa vle di sa a se yon konfigirasyon ki pa ka tou senpleman pran ak mete ajou.
Genyen tou yon konfigirasyon dinamik. Sa yo se paramèt yo ke nou vle chanje sou vole a pou yo ranmase yo la.
Ki pwoblèm nan isit la? Nou mete ajou konfigirasyon an, woule li soti, kidonk kisa? Pwoblèm lan ka se ke sou yon bò nou woule soti konfigirasyon an, men bliye sou bagay la nouvo, konfigirasyon an rete la. Dezyèmman, pandan ke nou te woule soti, konfigirasyon an te mete ajou nan kèk kote, men se pa nan lòt moun. Ak kèk pwosesis aplikasyon nou an ki kouri sou yon sèl machin yo te rekòmanse ak yon nouvo konfigirasyon, ak yon kote ak yon ansyen. Sa ka lakòz aplikasyon distribiye nou an pa konsistan nan yon pèspektiv konfigirasyon. Pwoblèm sa a komen. Pou yon konfigirasyon dinamik, li pi enpòtan paske li implique ke li ka chanje sou vole.
Yon lòt pwoblèm se manm gwoup. Nou toujou gen kèk travayè, nou toujou vle konnen kiyès nan yo ki vivan, kiyès nan yo ki mouri. Si gen yon Mèt, Lè sa a, li dwe konprann ki travayè yo ka redireksyon bay kliyan pou yo fè kalkil oswa travay ak done, ak ki pa kapab. En problenm ki touzour arive se ki nou bezwen konnen ki pe travay dan nou cluster.
Yon lòt pwoblèm tipik se eleksyon lidè yo, lè nou vle konnen ki moun ki responsab. Yon egzanp se replikasyon, lè nou gen kèk pwosesis ki resevwa operasyon ekri ak Lè sa a, replike yo pami lòt pwosesis. Li pral lidè, tout lòt moun pral obeyi li, yo pral swiv li. Li nesesè yo chwazi yon pwosesis pou ke li se klè pou tout moun, pou li pa vire soti ke de lidè yo chwazi.
Genyen tou aksè mityèlman eksklizif. Pwoblèm nan isit la se pi konplèks. Gen yon bagay tankou yon mutex, lè ou ekri pwogram milti-threaded epi ou vle aksè nan kèk resous, pou egzanp, yon selil memwa, yo dwe limite ak te pote soti nan yon sèl fil. Isit la resous la ta ka yon bagay ki pi abstrè. Ak diferan aplikasyon ki soti nan diferan nœuds nan Rezo nou an ta dwe sèlman resevwa aksè eksklizif nan yon resous bay, epi yo pa pou ke tout moun ka chanje li oswa ekri yon bagay la. Sa yo se sa yo rele kadna yo.
ZooKeeper pèmèt ou rezoud tout pwoblèm sa yo nan yon degre oswa yon lòt. Apre sa, mwen pral montre ak egzanp ki jan li pèmèt ou fè sa.

Pa gen okenn primitif bloke. Lè nou kòmanse sèvi ak yon bagay, primitif sa a pa pral tann okenn evènman rive. Gen plis chans, bagay sa a pral travay asynchrone, kidonk pèmèt pwosesis pa pann pandan y ap tann yon bagay. Sa a se yon bagay trè itil.
Tout demann kliyan yo trete nan lòd keu jeneral la.
Ak kliyan gen opòtinite pou resevwa notifikasyon sou chanjman nan kèk eta, sou chanjman nan done, anvan kliyan an wè done yo chanje tèt yo.

ZooKeeper ka fonksyone nan de mòd. Premye a se endepandan, sou yon sèl nœd. Sa pratik pou fè tès. Li kapab tou fonksyone nan mòd gwoupman, sou nenpòt kantite nœd. sèvè yoSi nou gen yon gwoupman ki gen 100 machin, li pa nesesèman oblije fonksyone sou 100 machin. Li sifi pou nou mete kèk machin sou kote ZooKeeper ka fonksyone. Epi li respekte prensip gwo disponiblite a. ZooKeeper estoke yon kopi konplè done yo sou chak enstans k ap fonksyone. M ap eksplike kijan li fè sa pita. Li pa divize done yo an pati. Yon bò, sa a se yon dezavantaj paske nou pa ka estoke anpil bagay, men yon lòt bò, li pa nesesè. Li pa fèt pou sa; se pa yon baz done.
Done yo ka kache sou bò kliyan an. Sa a se yon prensip estanda pou nou pa entèwonp sèvis la epi yo pa chaje li ak demann yo menm. Yon kliyan entelijan anjeneral konnen sou sa a ak kachèt li.
Pou egzanp, yon bagay te chanje isit la. Gen kèk kalite aplikasyon. Yon nouvo lidè te eli, ki responsab, pou egzanp, pou pwosesis ekri operasyon yo. Epi nou vle repwodui done yo. Yon solisyon se mete l nan yon bouk. Epi nou toujou ap kesyone sèvis nou an - gen anyen ki chanje? Dezyèm opsyon an pi pi bon. Sa a se yon mekanis gade ki pèmèt ou notifye kliyan ke yon bagay te chanje. Sa a se yon metòd mwens chè an tèm de resous ak pi pratik pou kliyan yo.

Kliyan se itilizatè a ki sèvi ak ZooKeeper.
Sèvè se pwosesis ZooKeeper li menm.
Znode se bagay ki kle nan ZooKeeper. Tout znodes yo estoke nan memwa pa ZooKeeper epi yo òganize nan fòm lan nan yon dyagram yerarchize, nan fòm lan nan yon pye bwa.
Gen de kalite operasyon yo. Premye a se aktyalizasyon / ekri, lè kèk operasyon chanje eta a nan pye bwa nou an. Pye bwa a se komen.
Epi li posib ke kliyan an pa ranpli yon sèl demann epi li dekonekte, men li ka etabli yon sesyon nan ki li kominike avèk ZooKeeper.

Modèl done ZooKeeper a sanble ak yon sistèm dosye. Gen yon rasin estanda ak Lè sa a, nou te ale kòm si nan repèrtwar yo ki soti nan rasin lan. Lè sa a, katalòg la nan nivo a premye, dezyèm nivo. Sa a se tout znodes.
Chak znode ka estoke kèk done, anjeneral, pa trè gwo, pou egzanp, 10 kilobyte. Ak chak znode ka gen yon sèten kantite timoun.

Znodes vini nan plizyè kalite. Yo ka kreye. Epi lè w ap kreye yon znode, nou presize ki kalite li ta dwe fè pati.
Gen de kalite. Premye a se drapo a efemèr. Znode ap viv nan yon sesyon. Pou egzanp, kliyan an te etabli yon sesyon. E osi lontan ke sesyon sa a vivan, li pral egziste. Sa a se nesesè yo nan lòd yo pa pwodwi yon bagay ki pa nesesè. Sa a se tou apwopriye pou moman lè li enpòtan pou nou estoke primitif done nan yon sesyon.
Dezyèm kalite a se drapo sekans. Li ogmante kontwa an sou wout la nan znode la. Pa egzanp, nou te gen yon anyè ak aplikasyon 1_5. Men, lè nou te kreye premye ne, li te resevwa p_1, dezyèm lan - p_2. Men, lè nou rele metòd sa a chak fwa, nou pase chemen an plen, ki endike sèlman yon pati nan chemen an, ak nimewo sa a otomatikman ogmante paske nou endike kalite a ne - sekans.
Znode regilye. Li ap toujou viv epi li gen non ke nou di li a.

Yon lòt bagay itil se drapo a gade. Si nou enstale li, Lè sa a, kliyan an ka abònman nan kèk evènman pou yon ne espesifik. Mwen pral montre w pita ak yon egzanp ki jan sa fèt. ZooKeeper li menm avèti kliyan an ke done yo sou ne a te chanje. Sepandan, notifikasyon pa garanti ke kèk nouvo done te rive. Yo tou senpleman di ke yon bagay te chanje, kidonk ou toujou gen konpare done pita ak apèl separe.
Epi kòm mwen te deja di, lòd done yo detèmine pa kilookte. Pa gen okenn nesesite pou estoke done tèks gwo la, paske li se pa yon baz done, li se yon sèvè kowòdinasyon aksyon.

Kite m di w yon ti bagay sou sesyon yo. Si nou gen plizyè sèvè, nou ka chanje soti nan yon sèvè pou ale nan yon lòt san pwoblèm. sèvè, lè l sèvi avèk ID sesyon an. Sa a byen pratik.
Chak sesyon gen yon kalite timeout. Yon sesyon defini si kliyan an voye anyen nan sèvè a pandan sesyon sa a. Si li pa t transmèt anyen pandan timeout la, sesyon an tonbe, oswa kliyan an ka fèmen li tèt li.

Li pa gen anpil karakteristik, men ou ka fè diferan bagay ak API sa a. Rele sa a nou te wè kreye kreye yon znode epi li pran twa paramèt. Sa a se chemen an nan znode la, epi li dwe espesifye nan plen soti nan rasin lan. Epi tou sa a se kèk done ke nou vle transfere la. Ak kalite drapo a. Epi apre kreyasyon li retounen chemen an nan znode la.
Dezyèmman, ou ka efase li. Trick la isit la se ke paramèt nan dezyèm, nan adisyon a chemen an nan znode la, ka presize vèsyon an. An konsekans, znode sa a pral efase si vèsyon li yo ke nou transfere ekivalan a youn nan ki aktyèlman egziste.
Si nou pa vle tcheke vèsyon sa a, Lè sa a, nou tou senpleman pase agiman "-1".

Twazyèmman, li tcheke pou egzistans yon znode. Retounen vre si ne a egziste, fo otreman.
Lè sa a, gade drapo parèt, ki pèmèt ou kontwole ne sa a.
Ou ka mete drapo sa a menm sou yon ne ki pa egziste epi resevwa yon notifikasyon lè li parèt. Sa a kapab itil tou.
Yon koup plis defi yo getData. Li klè ke nou ka resevwa done atravè znode. Ou ka sèvi ak gade drapo tou. Nan ka sa a, li pa pral enstale si pa gen okenn ne. Se poutèt sa, ou bezwen konprann ke li egziste, ak Lè sa a, resevwa done.

Genyen tou SetData. Isit la nou pase vèsyon. Men, si nou pase sa a sou, done yo sou znode nan yon sèten vèsyon yo pral mete ajou.
Ou kapab tou presize "-1" pou eskli chèk sa a.
Yon lòt metòd itil se getChildren. Nou ka jwenn tou yon lis tout znodes ki fè pati li. Nou ka kontwole sa a pa mete siveyans drapo.
Ak metòd senk pèmèt tout chanjman yo dwe voye nan yon fwa, kidonk asire yo ke yo sove ak tout done yo te konplètman chanje.
Si nou trase analoji ak pwogram regilye, Lè sa a, lè ou itilize metòd tankou ekri, ki ekri yon bagay sou disk, epi apre li retounen yon repons ba ou, pa gen okenn garanti ke ou te ekri done yo sou disk. E menm lè sistèm operasyon an gen konfyans ke tout bagay te ekri, gen mekanis nan disk la tèt li kote pwosesis la ale nan kouch tanpon, epi sèlman apre sa done yo mete sou disk la.

Yo itilize sitou apèl asynchrone. Sa a pèmèt kliyan an travay nan paralèl ak demann diferan. Ou ka itilize apwòch synchrone a, men li mwens pwodiktif.
De operasyon nou te pale sou yo se aktyalizasyon / ekri, ki chanje done yo. Sa yo se kreye, setData, senkronize, efase. Epi li egziste, getData, getChildren.

Koulye a, kèk egzanp sou fason ou ka fè primitif pou travay nan yon sistèm distribiye. Pou egzanp, ki gen rapò ak konfigirasyon an nan yon bagay. Yon nouvo travayè te parèt. Nou te ajoute machin nan epi yo te kòmanse pwosesis la. Epi gen twa kesyon sa yo. Ki jan li mande ZooKeeper pou konfigirasyon? Men, si nou vle chanje konfigirasyon an, ki jan nou chanje li? Epi apre nou te chanje li, ki jan travayè nou te genyen yo jwenn li?
ZooKeeper fè sa relativman fasil. Pou egzanp, gen pye bwa znode nou an. Gen yon ne pou aplikasyon nou an isit la, nou kreye yon ne adisyonèl nan li, ki gen done ki soti nan konfigirasyon an. Sa yo ka oswa pa ka paramèt separe. Depi gwosè a piti, gwosè konfigirasyon an anjeneral piti tou, kidonk li se byen posib pou estoke li isit la.
W ap itilize metòd la getData jwenn konfigirasyon an pou travayè a soti nan ne la. Mete sou vre. Si pou kèk rezon ne sa a pa egziste, nou pral enfòme sou li lè li parèt, oswa lè li chanje. Si nou vle konnen ke yon bagay te chanje, Lè sa a, nou mete li nan vre. Men, si done yo nan ne sa a chanje, nou pral konnen sou li.
SetData. Nou mete done yo, mete "-1", sa vle di nou pa tcheke vèsyon an, nou sipoze ke nou toujou gen yon sèl konfigirasyon, nou pa bezwen sere anpil konfigirasyon. Si ou bezwen sere anpil, w ap bezwen ajoute yon lòt nivo. Isit la nou kwè ke gen yon sèl, kidonk nou mete ajou sèlman dènye a, pou nou pa tcheke vèsyon an. Nan moman sa a, tout kliyan ki te deja abònman resevwa yon notifikasyon ke yon bagay te chanje nan ne sa a. Epi apre yo fin resevwa li, yo dwe mande done yo ankò. Notifikasyon an se ke yo pa resevwa done yo tèt li, men se sèlman notifikasyon sou chanjman. Apre sa yo dwe mande pou nouvo done.

Dezyèm opsyon pou itilize primitif la se manm gwoup. Nou gen yon aplikasyon distribye, gen yon pakèt travayè e nou vle konprann ke yo tout an plas. Se poutèt sa, yo dwe anrejistre tèt yo ke yo travay nan aplikasyon nou an. E nou tou nou anvi vwar, swa dan Master process oubyen en lot kote, tou bann travayer aktif ki nou annan ozordi.
Ki jan nou fè sa? Pou aplikasyon an, nou kreye yon ne travayè epi ajoute yon sublevel la lè l sèvi avèk metòd la kreye. Mwen gen yon erè sou glise a. Isit la ou bezwen sekansyèl presize, Lè sa a, tout travayè yo pral kreye youn pa youn. Ak aplikasyon an, mande tout done sou timoun yo nan ne sa a, resevwa tout travayè yo aktif ki egziste.


Sa a se tankou yon aplikasyon terib nan ki jan sa a ka fè nan kòd Java. Ann kòmanse nan fen a, ak metòd prensipal la. Sa a se klas nou an, ann kreye metòd li yo. Kòm premye agiman nou itilize host, kote n ap konekte, sa vle di nou mete l kòm yon agiman. Ak dezyèm agiman an se non gwoup la.
Ki jan koneksyon an rive? Sa a se yon egzanp senp sou API ki itilize. Tout bagay se relativman senp isit la. Gen yon klas estanda ZooKeeper. Nou pase hôtes pou li. Epi mete delè a, pou egzanp, nan 5 segonn. Epi nou gen yon manm ki rele ConnectedSignal. Esansyèlman, nou kreye yon gwoup sou chemen transmèt la. Nou pa ekri done la, byenke yon bagay te kapab ekri. Ak ne isit la se nan kalite ki pèsistan. Esansyèlman, sa a se yon ne nòmal regilye ki pral egziste tout tan tout tan an. Sa a se kote sesyon an kreye. Sa a se aplikasyon an nan kliyan an tèt li. Kliyan nou an pral rapòte detanzantan ke sesyon an vivan. E lè nou fini sesyon an, nou rele fèmen e sa a, sesyon an tonbe. Sa a se nan ka yon bagay tonbe pou nou, se konsa ke ZooKeeper jwenn enfòmasyon sou li epi koupe sesyon an.

Ki jan yo fèmen yon resous? Isit la tout bagay se yon ti kras pi konplike. Nou gen yon seri travayè, gen kèk resous ke nou vle fèmen. Pou fè sa, nou kreye yon ne separe, pou egzanp, ki rele lock1. Si nou te kapab kreye li, Lè sa a, nou te resevwa yon seri isit la. Men, si nou pa t 'kapab kreye li, Lè sa a, travayè a ap eseye jwenn getData soti isit la, epi depi ne a te deja kreye, Lè sa a, nou mete yon siveyan isit la ak moman sa a eta a nan ne sa a chanje, nou pral konnen sou li. Epi nou ka eseye gen tan rekreye li. Si nou te pran ne sa a, te pran kadna sa a, Lè sa a, apre nou pa bezwen fèmen a ankò, nou pral abandone li, depi ne a egziste sèlman nan sesyon an. An konsekans, li pral disparèt. Ak yon lòt kliyan, nan kad yon lòt sesyon, yo pral kapab pran seri a sou ne sa a, oswa pito, li pral resevwa yon notifikasyon ke yon bagay te chanje epi li ka eseye fè li nan tan.

Yon lòt egzanp sou fason ou ka chwazi lidè prensipal la. Sa a se yon ti kras pi konplike, men tou, relativman senp. Kisa k ap pase la a? Gen yon ne prensipal ki rasanble tout travayè yo. Nou ap eseye jwenn done sou lidè a. Si sa te rive avèk siksè, sa vle di nou te resevwa kèk done, Lè sa a, travayè nou an kòmanse swiv lidè sa a. Li kwè ke gen deja yon lidè.
Si lidè a te mouri pou kèk rezon, pou egzanp, tonbe, Lè sa a, nou eseye kreye yon nouvo lidè. Men, si nou reyisi, Lè sa a, travayè nou an vin lidè. Men, si yon moun nan moman sa a jere yo kreye yon nouvo lidè, Lè sa a, nou eseye konprann ki moun li ye ak Lè sa a, swiv li.
Isit la sa yo rele efè twoupo a rive, sa vle di efè twoupo a, paske lè yon lidè mouri, moun ki premye nan tan an ap vin lidè.

Lè w ap pran yon resous, ou ka eseye sèvi ak yon apwòch yon ti kras diferan, ki se jan sa a. Pou egzanp, nou vle jwenn yon seri, men san efè a hert. Li pral konpoze de lefèt ke aplikasyon nou an mande lis tout idantite ne pou yon ne ki deja egziste ak yon seri. Men, si anvan sa a ne pou ki nou te kreye yon seri a se pi piti a nan seri a ke nou te resevwa, Lè sa a, sa vle di ke nou te kaptire seri a. Nou tcheke ke nou te resevwa yon seri. Kòm yon chèk, pral gen yon kondisyon ke id ke nou te resevwa lè kreye yon seri nouvo se minim. Men, si nou te resevwa li, Lè sa a, nou travay pi lwen.
Si gen yon idantite sèten ki pi piti pase kadna nou an, Lè sa a, nou mete yon siveyan sou evènman sa a epi tann pou notifikasyon jiskaske yon bagay chanje. Sa vle di, nou te resevwa seri sa a. Epi jiskaske li tonbe, nou pa pral vin idantite minimòm lan epi yo pa pral resevwa seri minimòm lan, epi konsa nou pral kapab konekte. Men, si kondisyon sa a pa satisfè, Lè sa a, nou imedyatman ale isit la epi eseye jwenn fèmen sa a ankò, paske yon bagay ta ka chanje pandan tan sa a.

Ki sa ZooKeeper konpoze de? Gen 4 bagay prensipal yo. Sa a se pwosesis pwosesis - Demann. Epi tou ZooKeeper Atomic Broadcast. Gen yon Log Commit kote tout operasyon yo anrejistre. Ak nan memwa Replicated DB tèt li, sa vle di baz done a tèt li kote tout pyebwa sa a estoke.
Li se vo anyen ke tout operasyon ekri yo ale nan Processeur a Demann. Ak operasyon lekti ale dirèkteman nan baz done a nan memwa.

Baz done a tèt li konplètman repwodui. Tout ka ZooKeeper sere yon kopi konplè done yo.
Yo nan lòd yo retabli baz done a apre yon aksidan, gen yon boutèy demi lit. Pratik estanda se ke anvan done vin nan memwa, li ekri la pou ke si li aksidan, boutèy demi lit sa a ka jwe tounen ak eta sistèm lan ka retabli. Ak snapshots peryodik nan baz done a yo tou itilize.

ZooKeeper Atomic Broadcast se yon bagay ki itilize pou kenbe done replike.
ZAB anndan chwazi yon lidè nan pwen de vi ZooKeeper ne. Lòt nœuds vin disip li yo epi atann kèk aksyon nan men li. Si yo resevwa antre, yo voye yo tout bay lidè a. Li premye fè yon operasyon ekri epi answit voye yon mesaj sou sa ki te chanje bay disip li yo. Sa a, an reyalite, dwe fèt atomikman, sa vle di, operasyon an anrejistreman ak difize tout bagay la dwe fèt atomik, kidonk garanti konsistans done yo.
Li sèlman trete demann ekri. Travay prensipal li se ke li transfòme operasyon an nan yon aktyalizasyon tranzaksyon. Sa a se yon demann espesyalman pwodwi.
Ak isit la li se vo anyen ke idempotity nan mizajou pou operasyon an menm garanti. Ki sa li ye? Bagay sa a, si egzekite de fwa, pral gen menm eta a, sa vle di demann nan tèt li pa pral chanje. Ak sa a dwe fè pou ke nan ka ta gen yon aksidan, ou ka rekòmanse operasyon an, kidonk woule tounen chanjman yo ki te tonbe nan moman sa a. Nan ka sa a, eta a nan sistèm nan ap vin menm bagay la tou, sa vle di li pa ta dwe ka a ke yon seri de menm bagay la, pou egzanp, pwosesis aktyalizasyon, te mennen nan diferan eta final nan sistèm nan.








Sous: www.habr.com
