Abafundi abahlanu kanye nabathathu basabalalisa izitolo zamanani abalulekile

Noma sibhale kanjani umtapo wezincwadi weklayenti C++ we-ZooKeeper, njlld kanye ne-Consul KV

Emhlabeni wezinhlelo ezisabalalisiwe, kunenombolo yemisebenzi ejwayelekile: ukugcina imininingwane mayelana nokwakheka kweqoqo, ukuphatha ukucushwa kwama-node, ukuthola ama-node anephutha, ukukhetha umholi. nabanye. Ukuxazulula lezi zinkinga, izinhlelo ezikhethekile ezisabalalisiwe zidalwe - izinsizakalo zokuxhumanisa. Manje sizoba nentshisekelo kwezintathu zazo: ZooKeeper, etcd kanye ne-Consul. Kukho konke ukusebenza okucebile kwe-Consul, sizogxila ku-Consul KV.

Abafundi abahlanu kanye nabathathu basabalalisa izitolo zamanani abalulekile

Empeleni, zonke lezi zinhlelo ziyizitolo zamanani angukhiye ezikwazi ukubekezelela. Nakuba amamodeli wabo wedatha enomehluko omkhulu, esizoxoxa ngawo kamuva, axazulula izinkinga ezifanayo ezingokoqobo. Ngokusobala, uhlelo lokusebenza ngalunye olusebenzisa isevisi yokuxhumanisa luboshwe kwesinye sazo, okungase kuholele esidingweni sokusekela amasistimu amaningana esikhungweni esisodwa sedatha esixazulula izinkinga ezifanayo zezinhlelo zokusebenza ezahlukene.

Umqondo wokuxazulula le nkinga wavela esikhungweni sezokubonisana sase-Australia, futhi wawela kithi, ithimba elincane labafundi, ukuwusebenzisa, okuyilokho engizokhuluma ngakho.

Sikwazile ukwakha umtapo wolwazi ohlinzeka ngesixhumi esibonakalayo esivamile sokusebenza ne-ZooKeeper, njlld kanye ne-Consul KV. Umtapo wolwazi ubhalwe ngo-C++, kodwa kunezinhlelo zokuwuthumela kwezinye izilimi.

Amamodeli Wedatha

Ukuze wakhe isixhumi esibonakalayo esivamile samasistimu amathathu ahlukene, udinga ukuqonda ukuthi yini afana ngayo nokuthi ahluke kanjani. Ake sikuthole.

I-ZooKeeper

Abafundi abahlanu kanye nabathathu basabalalisa izitolo zamanani abalulekile

Izihluthulelo zihlelwa zibe yisihlahla futhi zibizwa ngokuthi ama-node. Ngokufanelekile, nge-node ungathola uhlu lwezingane zalo. Imisebenzi yokudala i-znode (dala) nokushintsha inani (setData) iyahlukaniswa: okhiye abakhona kuphela abangafundwa futhi bashintshwe. Amawashi angaxhunywa ekusebenzeni kokuhlola ubukhona be-node, ukufunda inani, kanye nokuthola izingane. Iwashi iyisicupha sesikhathi esisodwa esivutha lapho inguqulo yedatha ehambisanayo kuseva ishintsha. Ama-ephemeral nodes asetshenziselwa ukubona ukwehluleka. Ziboshelwe kuseshini yeklayenti elizidalile. Uma iklayenti livala iseshini noma liyeka ukwazisa i-ZooKeeper ngobukhona bayo, lawa ma-node asuswa ngokuzenzakalelayo. Okwenziwayo okulula kuyasekelwa - isethi yemisebenzi ephumelela noma ehluleke uma lokhu kungenzeki okungenani kokukodwa kwakho.

njll

Abafundi abahlanu kanye nabathathu basabalalisa izitolo zamanani abalulekile

Abathuthukisi balolu hlelo baphefumulelwe ngokucacile yi-ZooKeeper, ngakho-ke benza konke ngendlela ehlukile. Abukho ukulandelana kokhiye, kodwa bakha isethi ehlelwe ngokwe-lexicographically. Ungathola noma ususe zonke izinkinobho zebanga elithile. Lesi sakhiwo singase sibonakale siyinqaba, kodwa empeleni siveza ngokucacile, futhi umbono we-hierarchical ungalingiswa kalula ngawo.

njlld ayinakho ukusebenza okujwayelekile kokuqhathanisa nokusetha, kodwa inokuthile okungcono kakhulu: ukuthengiselana. Yebo, zikhona kuzo zontathu izinhlelo, kodwa ukuthengiselana nokunye kuhle kakhulu. Aqukethe amabhlogo amathathu: isheke, impumelelo, ukwehluleka. I-block yokuqala iqukethe isethi yemibandela, eyesibili neyesithathu - imisebenzi. Umsebenzi wenziwa nge-athomu. Uma zonke izimo ziyiqiniso, khona-ke ibhulokhi yempumelelo iyasetshenziswa, ngaphandle kwalokho ibhulokhi yokwehluleka isetshenziswa. Ku-API 3.3, amabhulokhi empumelelo nokwehluleka angaqukatha ukuthengiselana okufakwe esidlekeni. Okusho ukuthi, kungenzeka ukwenza nge-athomu ukwakhiwa okunemibandela kweleveli yokuzalela engafanele. Ungafunda kabanzi mayelana nokuthi yikuphi ukuhlola nokusebenza okukhona imibhalo.

Amawashi akhona nalapha, nakuba axaka kancane futhi angasetshenziswa kabusha. Okusho ukuthi, ngemva kokufaka iwashi ebangeni elingukhiye, uzothola zonke izibuyekezo kulobu bubanzi uze ukhansele iwashi, hhayi nje elokuqala. Ngo- etcd, i-analogue yezikhathi zeklayenti le-ZooKeeper iwukuqashisa.

I-Consul K.V.

Futhi akukho sakhiwo esiqinile se-hierarchical lapha, kodwa i-Consul ingakha ukubukeka kwayo: ungathola futhi ususe zonke izihluthulelo ngesiqalo esicacisiwe, okungukuthi, sebenzisa "i-subtree" yokhiye. Imibuzo enjalo ibizwa ngokuthi i-recursive. Ngaphezu kwalokho, i-Consul ingakhetha kuphela okhiye abangenalo uhlamvu olushiwo ngemva kwesiqalo, oluhambisana nokuthola "izingane" ngokushesha. Kodwa kufanelekile ukukhumbula ukuthi lokhu kufana nokubukeka kwesakhiwo se-hierarchical: kungenzeka ukudala ukhiye uma umzali engekho noma ususe ukhiye onezingane, kuyilapho izingane zizoqhubeka zigcinwe ohlelweni.

Abafundi abahlanu kanye nabathathu basabalalisa izitolo zamanani abalulekile
Esikhundleni samawashi, u-Consul uvimbe izicelo ze-HTTP. Empeleni, lezi yizingcingo ezijwayelekile eziya endleleni yokufunda idatha, lapho, kanye namanye amapharamitha, kuboniswa inguqulo yokugcina eyaziwayo yedatha. Uma inguqulo yamanje yedatha ehambisanayo kuseva inkulu kunaleyo eshiwo, impendulo ibuyiselwa ngokushesha, ngaphandle kwalokho - lapho inani lishintsha. Kukhona futhi izikhathi ezingaxhunywa kokhiye noma kunini. Kuyaphawuleka ukuthi ngokungafani njlld kanye ne-ZooKeeper, lapho ukususa izikhathi kuholela ekususweni kokhiye abahlobene, kunemodi lapho iseshini ivele isuswe kubo. Iyatholakala ukuthengiselana, ngaphandle kwamagatsha, kodwa ngezinhlobo zonke zamasheke.

Ukuhlanganisa konke

I-ZooKeeper inemodeli yedatha eqinile kakhulu. Imibuzo yobubanzi ecacile etholakala ku- etcd ayikwazi ukulingiswa ngempumelelo ku-ZooKeeper noma ku-Consul. Ukuzama ukuhlanganisa okuhle kakhulu kuzo zonke izinsiza, sigcine sinesixhumanisi esicishe silingane nesixhumi esibonakalayo se-ZooKeeper ngokuhlukile okulandelayo:

  • ukulandelana, isiqukathi kanye namanodi e-TTL ayisekelwe
  • Ama-ACL awasekelwe
  • indlela yokusetha idala ukhiye uma ingekho (ku-ZK setData ibuyisela iphutha kulokhu)
  • isethi kanye nezindlela ze-cas zihlukaniswa (ku-ZK ziyinto efanayo)
  • indlela yokusula isusa i-node kanye ne-subtree yayo (ku-ZK susa ibuyisela iphutha uma i-node inezingane)
  • Kukhiye ngamunye kunenguqulo eyodwa kuphela - inguqulo yenani (ku-ZK bathathu)

Ukwenqatshwa kwamanodi alandelanayo kungenxa yokuthi njlld kanye ne-Consul abanalo usekelo olwakhelwe ngaphakathi kubo, futhi angasetshenziswa kalula ngumsebenzisi phezu komphumela we-interface welabhulali.

Ukusebenzisa impatho efana ne-ZooKeeper lapho ususa i-vertex kungadinga ukugcinwa kwekhawunta yengane ehlukile kukhiye ngamunye ku-etcd naku-Consul. Njengoba sizame ukugwema ukugcina imininingwane ye-meta, kunqunywe ukuthi kususwe sonke isihlahla esingaphansi.

Ubuqili bokuqalisa

Ake sibhekisise ezinye izici zokusebenzisa isixhumi esibonakalayo selabhulali kumasistimu ahlukene.

I-Hierarchy in etcd

Ukugcina umbono wesigaba ku- etcd kube omunye wemisebenzi ethakazelisa kakhulu. Imibuzo yobubanzi yenza kube lula ukubuyisa uhlu lokhiye abanesiqalo esicacisiwe. Isibonelo, uma udinga yonke into eqala ngayo "/foo", ucela ibanga ["/foo", "/fop"). Kodwa lokhu kuzobuyisa sonke isihlahla esingaphansi sikakhiye, okungenzeka kungamukeleki uma isihlahla esingaphansi sisikhulu. Ekuqaleni sahlela ukusebenzisa indlela yokuhumusha eyinhloko, isetshenziswe ku-zetcd. Kubandakanya ukwengeza ibhayithi eyodwa ekuqaleni kokhiye, okulingana nokujula kwenodi esihlahleni. Ake ngenze isibonelo.

"/foo" -> "u01/foo"
"/foo/bar" -> "u02/foo/bar"

Bese uthola zonke izingane ngokushesha ukhiye "/foo" kungenzeka ngokucela ububanzi ["u02/foo/", "u02/foo0"). Yebo, ku-ASCII "0" ime ngemva kwalokho "/".

Kodwa kanjani ukukhishwa kwe-vertex kuleli cala? Kuvele ukuthi udinga ukususa bonke ububanzi bohlobo ["uXX/foo/", "uXX/foo0") kwe-XX kusuka ku-01 kuya ku-FF. Sabe sesigijima sangena umkhawulo wenombolo yokusebenza ngaphakathi kokuthengiselana okukodwa.

Ngenxa yalokho, kwasungulwa isistimu yokuguqula ukhiye olula, okwenze kwaba nokwenzeka ukusebenzisa ngokuphumelelayo kokubili ukususa ukhiye nokuthola uhlu lwezingane. Kwanele ukwengeza uhlamvu olukhethekile ngaphambi kwethokheni yokugcina. Ngokwesibonelo:

"/very" -> "/u00very"
"/very/long" -> "/very/u00long"
"/very/long/path" -> "/very/long/u00path"

Bese ususa ukhiye "/very" iphenduka ibe ukususa "/u00very" kanye nobubanzi ["/very/", "/very0"), nokuthola zonke izingane - esicelweni sezikhiye ezivela ebangeni ["/very/u00", "/very/u01").

Ikhipha ukhiye ku-ZooKeeper

Njengoba bese ngishilo, ku-ZooKeeper awukwazi ukususa i-node uma inezingane. Sifuna ukususa ukhiye kanye nesihlahla esincane. Kumele ngenzeni? Lokhu sikwenza ngethemba. Okokuqala, sinqamula isihlahla esingaphansi ngokuphindaphindiwe, sithola izingane ze-vertex ngayinye ngombuzo ohlukile. Bese sakha umsebenzi ozama ukususa wonke amanodi esihlahla esingaphansi ngendlela efanele. Kunjalo, izinguquko zingenzeka phakathi kokufunda isihlahla esincane nokusisusa. Kulesi simo, umsebenzi uzohluleka. Ngaphezu kwalokho, i-subtree ingase ishintshe phakathi nenqubo yokufunda. Isicelo sezingane zenodi elandelayo singabuyisa iphutha uma, ngokwesibonelo, le nodi isivele isusiwe. Kuzo zombili izimo, siphinda yonke inqubo futhi.

Le ndlela yenza ukususa ukhiye kungasebenzi kakhulu uma unezingane, futhi ngisho nangaphezulu uma uhlelo lokusebenza luqhubeka nokusebenza ne-subtree, ukususa nokudala okhiye. Kodwa-ke, lokhu kusivumele ukuthi sigweme ukwenza inkimbinkimbi ukusetshenziswa kwezinye izindlela ku-etcd naku-Consul.

isethwe ku-ZooKeeper

Ku-ZooKeeper kunezindlela ezihlukene ezisebenza nesakhiwo sesihlahla (dala, susa, getChildren) nezisebenza nedatha kumanodi (setData, getData). Ngaphezu kwalokho, zonke izindlela zinemibandela eqinile: ukudala kuzobuyisela iphutha uma inodi isivele isivele ikhona. idaliwe, susa noma setData - uma ingekho. Sasidinga indlela emisiwe engabizwa ngaphandle kokucabanga ngokuba khona kokhiye.

Enye inketho ukuthatha indlela enethemba, njengokususa. Hlola ukuthi ikhona yini i-node. Uma ikhona, shayela i-setData, kungenjalo dala. Uma indlela yokugcina ibuyise iphutha, liphinde futhi. Into yokuqala okufanele uyiqaphele ukuthi ukuhlolwa kobukhona akusizi ngalutho. Ungakwazi ngokushesha ukushayela udale. Ukuqedwa ngempumelelo kuzosho ukuthi i-node yayingekho futhi yadalwa. Uma kungenjalo, ukudala kuzobuyisela iphutha elifanele, ngemva kwalokho udinga ukushayela i-setData. Yiqiniso, phakathi kwezingcingo, i-vertex ingasuswa ucingo oluqhudelanayo, futhi i-setData nayo izobuyisela iphutha. Kulesi simo, ungakwenza konke futhi, kodwa ingabe kufanelekile?

Uma zombili izindlela zibuyisela iphutha, lapho-ke siyazi ngokuqinisekile ukuthi ukususwa okuqhudelanayo kwenzeke. Ake sicabange ukuthi lokhu kususwa kwenzeke ngemva kokusetha ucingo. Khona-ke noma iyiphi incazelo esizama ukuyisungula isivele isuliwe. Lokhu kusho ukuthi singacabanga ukuthi isethi yenziwe ngempumelelo, ngisho noma empeleni akubhalwanga lutho.

Eminye imininingwane yobuchwepheshe

Kulesi sigaba sizothatha ikhefu ezinhlelweni ezisabalalisiwe futhi sikhulume ngokubhala amakhodi.
Enye yezidingo eziyinhloko zekhasimende kwakuyi-cross-platform: okungenani isevisi eyodwa kufanele isekelwe ku-Linux, MacOS kanye neWindows. Ekuqaleni, sathuthukela i-Linux kuphela, futhi saqala ukuhlola kwezinye izinhlelo kamuva. Lokhu kwadala izinkinga eziningi, okwase kunesikhathi eside kungacaci ukuthi kufanele kufinyelelwe kanjani. Ngenxa yalokho, zonke izinsizakalo zokuxhumanisa ezintathu sezisekelwa i-Linux ne-MacOS, kuyilapho i-Consul KV kuphela isekelwa ku-Windows.

Kusukela ekuqaleni, sizame ukusebenzisa imitapo yolwazi eseyenziwe ngomumo ukuze sifinyelele izinsiza. Endabeni ye-ZooKeeper, ukukhetha kwaqhubeka I-ZooKeeper C++, ekugcineni ehlulekile ukuhlanganisa ku-Windows. Lokhu, nokho, akumangazi: umtapo wolwazi ubekwe njenge-linux-kuphela. Ku-Consul okuwukuphela kwenketho kwaba ppconsul. Ukusekelwa kwadingeka kwengezwe kuyo izikhathi и ukuthengiselana. Okwe- etcd, ilabhulali egcwele esekela inguqulo yakamuva yephrothokholi ayitholakalanga, ngakho-ke simane nje iklayenti le-grpc elakhiwe.

Sikhuthazwe ukusebenzelana okuvumelanayo komtapo wezincwadi we-ZooKeeper C++, sinqume ukusebenzisa isixhumi esibonakalayo esivumelanayo. Ku-ZooKeeper C++, ikusasa/isithembiso sokuqala sisetshenziselwa lokhu. Ku-STL, ngeshwa, zenziwa ngesizotha kakhulu. Ngokwesibonelo, cha ke indlela, okusebenzisa umsebenzi ophasisiwe kumphumela wesikhathi esizayo lapho usutholakala. Esimweni sethu, indlela enjalo iyadingeka ukuguqula umphumela ube yifomethi yomtapo wethu. Ukuze sixazulule le nkinga, kudingeke ukuthi sisebenzise i-pool pool yethu elula, njengoba ngesicelo sekhasimende asikwazanga ukusebenzisa imitapo yolwazi esindayo evela eceleni njenge-Boost.

Ukwethulwa kwethu ngaleso sikhathi kusebenza kanje. Uma kubizwa, kudalwa isithembiso esengeziwe/isikhathi esizayo. Ikusasa elisha liyabuyiswa, futhi eliphasisiwe libekwa kanye nomsebenzi ohambisanayo nesithembiso esengeziwe emgqeni. Uchungechunge oluvela echibini lukhetha ikusasa elithile emgqeni bese luwavotela lisebenzisa i-wait_for. Uma umphumela usutholakala, umsebenzi ohambisanayo uyabizwa futhi inani lawo lokubuyisela lidluliselwe esithembisweni.

Sisebenzise i-thread pool efanayo ukuze senze imibuzo ku- etcd naku-Consul. Lokhu kusho ukuthi imitapo yolwazi engaphansi ingafinyelelwa ngemicu eminingi eyahlukene. I-ppconsul ayiphephile ngentambo, ngakho-ke izingcingo kuyo zivikelwe izingidi.
Ungasebenza nge-grpc emicu eminingi, kepha kukhona okucashile. Ku- etcd amawashi asetshenziswa ngokusakazwa kwe-grpc. Lezi iziteshi eziqondiswe kabili zemiyalezo yohlobo oluthile. Umtapo wolwazi wenza uchungechunge olulodwa lwawo wonke amawashi kanye nochungechunge olulodwa olucubungula imilayezo engenayo. Ngakho-ke i-grpc ivimbela ukubhala okuhambisanayo ukuze kusakazeke. Lokhu kusho ukuthi uma uqalisa noma ususa iwashi, kufanele ulinde kuze kube yilapho isicelo sangaphambilini sesiqedile ukuthumela ngaphambi kokuthumela elilandelayo. Sisebenzisela ukuvumelanisa okuguquguqukayo okunemibandela.

Umphumela

Zibonele wena: libofkv.

Ithimba lethu: Raed Romanov, U-Ivan Glushenkov, UDmitry Kamaldinov, UVictor Krapivensky, Vitaly Ivanin.

Source: www.habr.com

Engeza amazwana