Abafundi abahlanu kunye nabathathu basasaze iivenkile eziphambili zexabiso

Okanye sibhale njani umxhasi wethala leencwadi le-C++ le-ZooKeeper, etcd kunye ne-Consul KV

Ehlabathini leenkqubo ezisasazwayo, kukho inani lemisebenzi eqhelekileyo: ukugcina ulwazi malunga nokubunjwa kweqela, ukulawula ukucwangciswa kweengqungquthela, ukukhangela iindawo eziphosakeleyo, ukukhetha inkokeli. nabanye. Ukusombulula ezi ngxaki, iinkqubo ezikhethekileyo ezisasazwayo zenziwe - iinkonzo zokulungelelanisa. Ngoku siya kuba nomdla kwabathathu kubo: ZooKeeper, etcd kunye Consul. Kuzo zonke izinto ezityebileyo ze-Consul, siya kugxininisa kwi-Consul KV.

Abafundi abahlanu kunye nabathathu basasaze iivenkile eziphambili zexabiso

Ngokwenyani, zonke ezi nkqubo zinonyamezelo-zimpazamo, zigcina ixabiso elingundoqo elinomgca. Nangona iimodeli zabo zedatha zineentlukwano ezibalulekileyo, esiza kuxoxa ngazo kamva, zixazulula iingxaki ezifanayo. Ngokucacileyo, isicelo ngasinye esisebenzisa inkonzo yokulungelelaniswa sibotshelelwe kwenye yazo, nto leyo enokukhokelela kwisidingo sokuxhasa iinkqubo ezininzi kwiziko ledatha elilodwa elisombulula iingxaki ezifanayo kwizicelo ezahlukeneyo.

Ingcamango yokusombulula le ngxaki yavela kwi-arhente yokubonisana yase-Australia, kwaye yawela kuthi, iqela elincinane labafundi, ukuba liyiphumeze, yiloo nto ndiza kuthetha ngayo.

Sikwazile ukwenza ithala leencwadi elibonelela ngojongano oluqhelekileyo lokusebenza neZooKeeper, etcd kunye neConsul KV. Ithala leencwadi libhalwe nge-C ++, kodwa kukho izicwangciso zokuyithumela kwezinye iilwimi.

Iimodeli zeDatha

Ukuphuhlisa ujongano oluqhelekileyo lweenkqubo ezintathu ezahlukeneyo, kufuneka uqonde ukuba yintoni abafana ngayo kunye nendlela eyahluke ngayo. Masiyiqonde.

Umgcini wezilwanyana

Abafundi abahlanu kunye nabathathu basasaze iivenkile eziphambili zexabiso

Izitshixo zilungelelaniswe zibe ngumthi kwaye zibizwa ngokuba ngamaqhuqhuva. Ngokufanelekileyo, kwi-node unokufumana uluhlu lwabantwana bayo. Imisebenzi yokudala i-znode (yenza) kunye nokutshintsha ixabiso (setData) yahluliwe: kuphela izitshixo ezikhoyo ezinokufundwa kwaye zitshintshwe. Iiwotshi zinokudityaniswa kwimisebenzi yokukhangela ubukho be-node, ukufunda ixabiso, kunye nokufumana abantwana. Umlindo yinto yexesha elinye elivuthayo xa uguqulelo lwedatha ehambelanayo kwiseva itshintsha. Ii-ephemeral nodes zisetyenziselwa ukufumanisa ukungaphumeleli. Ziboshwe kwiseshoni yomthengi owadalayo. Xa umxhasi evala iseshoni okanye eyeka ukwazisa iZooKeeper ngobukho bayo, ezi nodi ziyacinywa ngokuzenzekelayo. Iintengiselwano ezilula ziyaxhaswa-iqela lemisebenzi enokuthi iphumelele okanye ingaphumeleli ukuba oku akwenzeki nokuba ibe nye kuzo.

njl

Abafundi abahlanu kunye nabathathu basasaze iivenkile eziphambili zexabiso

Abaphuhlisi bale nkqubo baphefumlelwe ngokucacileyo nguZooKeeper, kwaye ke benza yonke into ngokuhlukileyo. Akukho luhlu lwemigangatho yezitshixo, kodwa zenza iseti yochazo-magama olucwangcisiweyo. Unokufumana okanye ucime onke amaqhosha okuluhlu oluthile. Esi sakhiwo sinokubonakala singaqhelekanga, kodwa eneneni sibonakalisa kakhulu, kwaye imbono ye-hierarchical inokulinganisa ngokulula ngayo.

njl. Ewe kunjalo, zikhona kuzo zontathu iinkqubo, kodwa iitransekshini etcd zilungile ngakumbi. Ziquka iibhloko ezintathu: itshekhi, impumelelo, ukungaphumeleli. Ibhloko yokuqala iqulethe isethi yeemeko, eyesibini neyesithathu - imisebenzi. Intengiselwano yenziwa ngeatom. Ukuba zonke iimeko ziyinyani, ke ibhloko yempumelelo iphunyeziwe, kungenjalo ibhloko yokusilela iphunyeziwe. Kwi-API 3.3, iibhloko zempumelelo kunye nokungaphumeleli zingaquka ukuthengiselana okufakwe kwindlwane. Oko kukuthi, kunokwenzeka ukwenza i-atomically yolwakhiwo olunemiqathango oluphantse lube nenqanaba elingenamkhethe. Unokufunda ngakumbi malunga nokuba zeziphi iitshekhi kunye nokusebenza okukhoyo amaxwebhu.

Iiwotshi zikhona apha nazo, nangona zintsokothile kwaye ziphinda zisebenziseke. Oko kukuthi, emva kokufaka iwotshi kuluhlu oluphambili, uya kufumana lonke uhlaziyo kolu luhlu de ukhansele iwotshi, kwaye hayi nje eyokuqala. Kwi-etcd, i-analogue ye-ZooKeeper iiseshoni zabathengi ziqeshiso.

Ummeli K.V.

Kwakhona akukho sakhiwo singqongqo se-hierarchical apha, kodwa u-Consul unokudala inkangeleko ekhoyo: unokufumana kwaye ucime zonke izitshixo ngesimaphambili esikhankanyiweyo, oko kukuthi, sebenzisa "umthi ongaphantsi" wesitshixo. Imibuzo enjalo ibizwa ngokuba yi-recursive. Ukongeza, u-Consul unokukhetha kuphela izitshixo ezingenalo uphawu oluchaziweyo emva kwesimaphambili, esihambelana nokufumana "abantwana" ngokukhawuleza. Kodwa kuyafaneleka ukukhumbula ukuba le nto kanye inkangeleko yesakhiwo esiphakamileyo: kunokwenzeka ukuba wenze isitshixo ukuba umzali akakho okanye ucime isitshixo esinabantwana, ngelixa abantwana baya kuqhubeka begcinwa kwinkqubo.

Abafundi abahlanu kunye nabathathu basasaze iivenkile eziphambili zexabiso
Endaweni yeewotshi, u-Consul uthintele izicelo ze-HTTP. Ngokwenene, ezi ziifowuni eziqhelekileyo kwindlela yokufunda idatha, apho, kunye nezinye iiparameters, inguqu yokugqibela eyaziwayo yedatha ibonisiwe. Ukuba inguqu yangoku yedatha ehambelanayo kumncedisi inkulu kuneyo ichaziweyo, impendulo ibuyiselwa ngokukhawuleza, ngaphandle koko - xa ixabiso litshintsha. Kukho neeseshoni ezinokudityaniswa nezitshixo nangaliphi na ixesha. Kuyafaneleka ukuba uqaphele ukuba ngokungafaniyo etcd kunye ne-ZooKeeper, apho ukucima iiseshini kukhokelela ekucinyweni kwezitshixo ezihambelanayo, kukho imo apho iseshoni ikhutshwe ngokulula kubo. Iyafumaneka iintengiselwano, ngaphandle kwamasebe, kodwa nazo zonke iintlobo zeetshekhi.

Ukubeka konke kunye

I-ZooKeeper ineyona modeli yedatha engqongqo. Uluhlu olucacileyo lwemibuzo ekhoyo kwi etcd ayinakuxeliswa ngokusebenzayo nokuba nguZooKeeper okanye uMmeli. Ukuzama ukubandakanya ezona zingcono kuzo zonke iinkonzo, sigqibele sinojongano oluphantse lulingane nojongano lweZooKeeper ngezi meko zilandelayo:

  • ulandelelwano, isikhongozeli kunye nodi TTL ayixhaswanga
  • ACLs azixhaswa
  • indlela yokucwangcisa yenza isitshixo ukuba alikho (kwi ZK setData ibuyisela imposiso kulo mzekelo)
  • iseti kunye neendlela ze-cas zahlulwe (kwi-ZK ziyinto enye)
  • indlela yokucima icima i-node kunye nomthi ongaphantsi kwayo (kwi-ZK cima ibuyisela imposiso ukuba indawo inabantwana)
  • Kwisitshixo ngasinye kukho inguqulelo enye kuphela - ixabiso lexabiso (kwiZK kukho ezintathu zazo)

Ukukhatywa kweendawo ezilandelelanayo kubangelwa kukuba i- etcd kunye no-Consul abanayo inkxaso eyakhelwe-ngaphakathi kubo, kwaye banokuphunyezwa ngokulula ngumsebenzisi phezu kojongano lwethala leencwadi olunesiphumo.

Ukuphumeza ukuziphatha okufana neZooKeeper xa ucima i-vertex kuya kufuna ukugcinwa kwekhawuntara yomntwana eyahlukileyo kwisitshixo ngasinye kwi-etcd kunye ne-Consul. Ekubeni sizame ukunqanda ukugcina ulwazi lwemeta, kwagqitywa ekubeni kucinywe yonke into engaphantsi.

Ubuqili bokuphunyezwa

Makhe sijonge ngakumbi kwimiba ethile yokuphumeza ujongano lwethala leencwadi kwiinkqubo ezahlukeneyo.

Uluhlu kwi etcd

Ukugcina imbono yoluhlu lwemigangatho kwi etcd kuye kwaba ngomnye weyona misebenzi inika umdla. Uluhlu lwemibuzo lukwenza kube lula ukubuyisela uluhlu lwamaqhosha ngesimaphambili esikhankanyiweyo. Umzekelo, ukuba ufuna yonke into eqala ngayo "/foo", ucela uluhlu ["/foo", "/fop"). Kodwa oku kuya kubuyisela yonke i-subtree yesitshixo, enokuthi ingafaneleki ukuba i-subtree inkulu. Ekuqaleni saceba ukusebenzisa indlela engundoqo yokuguqulela, iphunyezwe kwi zetcd. Kubandakanya ukongeza i-byte enye ekuqaleni kwesitshixo, ilingana nobunzulu be-node emthini. Makhe ndikunike umzekelo.

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

Emva koko fumana bonke abantwana abasondeleyo kwesitshixo "/foo" kunokwenzeka ngokucela uluhlu ["u02/foo/", "u02/foo0"). Ewe, kwi-ASCII "0" ime emva koko "/".

Kodwa indlela yokuphumeza ukukhutshwa kwe-vertex kule meko? Kuyavela ukuba kufuneka ucime yonke imida yolo hlobo ["uXX/foo/", "uXX/foo0") kuba XX ukusuka 01 ukuya FF. Saye sabaleka sangena umda wenombolo yokusebenza ngaphakathi kwentengiselwano enye.

Ngenxa yoko, inkqubo yokuguqula isitshixo esilula yasungulwa, eyenza kube lula ukuphumeza ngokufanelekileyo kokubili ukucima isitshixo kunye nokufumana uluhlu lwabantwana. Kwanele ukongeza umlinganiswa okhethekileyo phambi komqondiso wokugqibela. Umzekelo:

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

Emva koko ucima isitshixo "/very" ijika ibe kukucinywa "/u00very" kunye noluhlu ["/very/", "/very0"), kunye nokufumana bonke abantwana - kwisicelo sezitshixo ukusuka kuluhlu ["/very/u00", "/very/u01").

Ukususa isitshixo kwiZooKeeper

Njengoko besenditshilo, kwi-ZooKeeper awukwazi ukucima indawo yokuphumla ukuba inabantwana. Sifuna ukucima isitshixo kunye nomthi ongezantsi. Ndingenza ntoni? Oku sikwenza ngethemba. Okokuqala, sijika ngokuphindaphindiweyo kwi-subtree, sifumana abantwana be-vertex nganye ngombuzo owahlukileyo. Emva koko sakha ukuthengiselana okuzama ukucima zonke iinodes ze-subtree ngendlela echanekileyo. Ewe, utshintsho lunokwenzeka phakathi kokufunda umthi ongaphantsi kunye nokuwucima. Kule meko, intengiselwano iya kusilela. Ngaphezu koko, i-subtree inokutshintsha ngexesha lenkqubo yokufunda. Isicelo sabantwana be-node elandelayo sinokubuyisela impazamo ukuba, umzekelo, le node sele icinyiwe. Kuzo zombini iimeko, siphinda yonke inkqubo kwakhona.

Le ndlela yenza ukucima isitshixo singasebenzi kakhulu ukuba sinabantwana, kwaye ngakumbi ukuba isicelo siyaqhubeka nokusebenza kunye ne-subtree, ukucima nokudala izitshixo. Nangona kunjalo, oku kusivumele ukuba siphephe ukwenza nzima ukuphunyezwa kwezinye iindlela kwi-etcd kunye ne-Consul.

usete kwiZooKeeper

Kwi-ZooKeeper kukho iindlela ezahlukeneyo ezisebenza ngesakhiwo somthi (dala, cima, getChildren) kwaye ezisebenza ngedatha kwiinodi (setData, getData) Ngaphezu koko, zonke iindlela zinemiqathango engqongqo: ukudala kuya kubuyisela impazamo ukuba i-node sele ikhona yenziwe, cima okanye isetiData - ukuba ayisekho. Sasifuna indlela emiselweyo engabizwa ngaphandle kokucinga malunga nobukho besitshixo.

Enye inketho kukuthatha indlela enethemba, njengokucima. Khangela ukuba ikho na indawo yokusebenzela. Ukuba ikhona, fowunela i-setData, kungenjalo yenza. Ukuba indlela yokugqibela ibuyise impazamo, yiphinda kwakhona. Into yokuqala ekufuneka uyiqaphele kukuba uvavanyo lobukho alunanjongo. Unokubiza ngokukhawuleza ukudala. Ukugqitywa ngempumelelo kuya kuthetha ukuba i-node yayingekho kwaye yadalwa. Ngaphandle koko, ukudala kuya kubuyisela impazamo efanelekileyo, emva koko kufuneka ufowunele i-setData. Ewe kunjalo, phakathi kweefowuni, i-vertex inokususwa yifowuni ekhuphisanayo, kwaye i-setData nayo ingabuyisela impazamo. Kule meko, unokuphinda yonke into kwakhona, kodwa ngaba kufanelekile?

Ukuba zombini iindlela zibuyisela impazamo, ngoko siyazi ngokuqinisekileyo ukuba ukucinywa okukhuphisanayo kwenzeke. Masicinge ukuba oku kucinywa kwenzeke emva kokufowuna kuseti. Ngoko nayiphi na intsingiselo esizama ukuyiseka sele icinyiwe. Oku kuthetha ukuba sinokucinga ukuba iseti yenziwe ngempumelelo, nokuba enyanisweni akukho nto ibhaliweyo.

Iinkcukacha ezongezelelweyo zobugcisa

Kweli candelo siza kuthatha ikhefu kwiinkqubo ezisasazwayo kwaye sithethe malunga nekhowudi.
Enye yeemfuno eziphambili zomthengi yayiyi-cross-platform: ubuncinane enye yeenkonzo kufuneka ixhaswe kwi-Linux, MacOS kunye neWindows. Ekuqaleni, saphuhlisela iLinux kuphela, kwaye saqala ukuvavanya kwezinye iinkqubo kamva. Oku kwabangela iingxaki ezininzi, ekuthe kangangexesha elithile kwakungacacanga ncam ukuba makwenziwe njani na. Ngenxa yoko, zontathu iinkonzo zolungelelaniso ngoku zixhaswa kwi-Linux kunye ne-MacOS, ngelixa i-Consul KV kuphela ixhaswa kwi-Windows.

Ukususela ekuqaleni, sizame ukusebenzisa amathala eencwadi esele enziwe ukufikelela kwiinkonzo. Kwimeko yeZooKeeper, ukhetho lwawela ZooKeeper C++, ethe ekugqibeleni yasilela ukuqokelela kwiWindows. Oku, nangona kunjalo, akumangalisi: ithala leencwadi libekwe njenge-linux-kuphela. Ku-Consul ekuphela kwenketho yaba ppconsul. Inkxaso kwafuneka yongezwe kuyo iiseshoni и iintengiselwano. Kwi- etcd, ithala leencwadi elipheleleyo elixhasa uguqulelo lwamva nje lweprotocol alifunyanwanga, ngoko ke ngokulula umxhasi we-grpc owenziweyo.

Sikhuthazwe lujongano olungavumelaniyo lwethala leencwadi leZooKeeper C ++, sigqibe kwelokuba siphumeze ujongano olungahambelaniyo. I-ZooKeeper C++ isebenzisa ikamva/isithembiso sokuqala koku. Kwi-STL, ngelishwa, ziphunyezwa ngokuthozama kakhulu. Umzekelo, akukho emva koko indlela, osebenzisa umsebenzi ogqithisiweyo kwisiphumo sexesha elizayo xa sifumaneka. Kwimeko yethu, indlela enjalo iyimfuneko ukuguqula umphumo kwifomathi yelayibrari yethu. Ukujikeleza le ngxaki, kuye kwafuneka siphumeze eyethu iqula elilula lomsonto, kuba ngesicelo somthengi asikwazanga ukusebenzisa amathala eencwadi anxamnye neqela lesithathu anjengeBoost.

Ukuphunyezwa kwethu ngoko kusebenza ngolu hlobo. Xa kubizwa, isithembiso esongezelelweyo/isibini sexesha elizayo siyadalwa. Ikamva elitsha libuyiswa, kwaye eligqithisiweyo libekwe kunye nomsebenzi ohambelanayo kunye nesithembiso esongezelelweyo kumgca. Umsonto ovela echibini ukhetha amakamva amaninzi emgceni kwaye uwavotele usebenzisa wait_for. Xa isiphumo sifumaneka, umsebenzi ohambelanayo ubizwa kwaye ixabiso layo lokubuyisela lidluliselwe kwisithembiso.

Sisebenzise umsonto omnye ukwenza imibuzo kwi etcd kunye no Consul. Oku kuthetha ukuba amathala eencwadi angaphantsi anokufikelelwa ngemisonto emininzi eyahlukeneyo. I-ppconsul ayikhuselekanga ngomsonto, ke iminxeba kuyo ikhuselwe zizitshixo.
Ungasebenza kunye ne-grpc kwimisonto emininzi, kodwa kukho izinto ezifihlakeleyo. Kwiiwotshi ze- etcd ziphunyezwa nge-grpc streams. Ezi zitshaneli zokuphinda-phinda kabini zemiyalezo yodidi oluthile. Ithala leencwadi lenza intambo enye yazo zonke iiwotshi kunye nomsonto omnye oqhuba imiyalezo engenayo. Ke i-grpc iyakwalela ukuhambelana nokubhala ukuhambisa. Oku kuthetha ukuba xa uqalisa okanye ucima iwotshi, kufuneka ulinde de isicelo sangaphambili sigqibe ukuthumela ngaphambi kokuba uthumele elandelayo. Sisebenzisa ungqamaniso izinto ezahlukeneyo ezinemiqathango.

Isiphumo

Zibonele: liboffkv.

Iqela lethu: URaed Romanov, Ivan Glushenkov, NguDmitry Kamaldinov, UVictor Krapivensky, Vitaly Ivanin.

umthombo: www.habr.com

Yongeza izimvo