Vadzidzi vashanu uye vatatu vakagovera zvitoro zvakakosha

Kana kuti takanyora sei mutengi C++ raibhurari yeZooKeeper, etcd uye Consul KV

Munyika yemasisitimu akagoverwa, kune akati wandei emabasa akajairwa: kuchengetedza ruzivo nezve kuumbwa kwesumbu, kugadzirisa kumisikidzwa kwemanodhi, kuona zvikanganiso, kusarudza mutungamiri. uye vamwe. Kugadzirisa matambudziko aya, masisitimu akasarudzika akagoverwa akagadzirwa - masevhisi ekubatanidza. Iye zvino tichafarira vatatu vavo: ZooKeeper, etcd uye Consul. Kubva pane zvese zvakapfuma mashandiro eConsul, isu tichatarisa kune Consul KV.

Vadzidzi vashanu uye vatatu vakagovera zvitoro zvakakosha

Muchidimbu, ese aya masisitimu anoshivirira kukanganisa, ane mutsara kiyi-kukosha zvitoro. Kunyangwe yavo data data ine misiyano yakakura, yatichakurukura gare gare, ivo vanogadzirisa zvakafanana zvinoshanda matambudziko. Zviripachena, yega yega application inoshandisa iyo coordination sevhisi yakasungirirwa kune imwe yadzo, izvo zvinogona kutungamira kudikanwa kwekutsigira akati wandei masisitimu mune imwe data data inogadzirisa matambudziko akafanana kune akasiyana maapplication.

Pfungwa yekugadzirisa dambudziko iri yakatanga mune imwe sangano rekuAustralia rekubvunza mazano, uye yakawira kwatiri, boka duku revadzidzi, kuti tiite izvi, izvo zvandichataura nezvazvo.

Isu takakwanisa kugadzira raibhurari inopa yakajairika interface yekushanda neZooKeeper, etcd uye Consul KV. Raibhurari yakanyorwa muC ++, asi pane zvirongwa zvekuiendesa kune mimwe mitauro.

Data Models

Kugadzira yakajairwa interface kune matatu akasiyana masisitimu, iwe unofanirwa kunzwisisa izvo zvavanofanana uye kuti zvakasiyana sei. Ngatizvionei.

ZooKeeper

Vadzidzi vashanu uye vatatu vakagovera zvitoro zvakakosha

Makiyi akarongwa mumuti uye anonzi nodes. Saizvozvo, kune node iwe unogona kuwana runyorwa rwevana vayo. Mabasa ekugadzira znode (gadzira) uye kushandura kukosha (setData) akaparadzaniswa: makiyi aripo chete anogona kuverengwa nekushandurwa. Mawachi anogona kubatanidzwa kune mashandiro ekutarisa kuvepo kwenode, kuverenga kukosha, uye kuwana vana. Tarisa ndeye-imwe-nguva inokonzeresa iyo inopfuta kana iyo vhezheni ye data inoenderana pane server yachinja. Ephemeral nodes inoshandiswa kuona kukundikana. Ivo vakasungirirwa kuchikamu chemutengi akavasika. Kana mutengi achivhara chikamu kana kumira kuzivisa ZooKeeper nezvekuvapo kwayo, node idzi dzinodzimwa otomatiki. Mabatiro akareruka anotsigirwa - seti yezvishandiso izvo zvese zvinobudirira kana kutadza kana izvi zvisingaite kune imwe yacho.

nezvimwewo

Vadzidzi vashanu uye vatatu vakagovera zvitoro zvakakosha

Vagadziri veiyi sisitimu vakafemerwa zvakajeka neZooKeeper, uye saka vakaita zvese zvakasiyana. Iko hakuna hierarchy yemakiyi, asi ivo vanogadzira lexicographically yakarongedzerwa seti. Unogona kuwana kana kudzima makiyi ese eimwe nhanho. Chimiro ichi chingaite sechishamiso, asi chiri kutaura chaizvo, uye maonero ehumambo anogona kutevedzerwa zviri nyore kuburikidza nawo.

etcd haina chiyero chekuenzanisa-uye-seti, asi ine chimwe chinhu chiri nani: kutengeserana. Ehe, iwo aripo mune ese matatu masisitimu, asi etcd kutengeserana kwakanyanya kunaka. Izvo zvinosanganisira zvidhinha zvitatu: cheki, kubudirira, kukundikana. Yekutanga block ine seti yemamiriro, yechipiri neyechitatu - mashandiro. The transaction inoitwa atomu. Kana mamiriro ese ari echokwadi, saka iyo yebudiriro block inoitwa, kana zvikasadaro iyo yekutadza block inoitwa. Mu API 3.3, kubudirira uye kukundikana mabhuroko anogona kunge ane nested transaction. Kureva kuti, zvinogoneka kuita atomically zvigadziriso zvivakwa zvezvinenge zvekupokana nesting level. Iwe unogona kudzidza zvakawanda nezve izvo cheki uye mashandiro aripo kubva zvinyorwa.

Wachi dziripo pano zvakare, kunyangwe dzakati kuomarara uye dzinogona kushandiswa zvakare. Ndokunge, mushure mekuisa wachi pane kiyi renji, iwe unogashira zvese zvigadziriso mune ino renji kusvika wadzima wachi, uye kwete yekutanga chete. Mune etcd, iyo analogue yeZooKeeper mutengi zvikamu zvekurenda.

Consul K.V.

Iko hakuna zvakare yakasimba hierarchical chimiro pano, asi Consul anogona kugadzira chitarisiko chiripo: unogona kuwana nekudzima makiyi ese ane prefix yakataurwa, ndiko kuti, shanda ne "subtree" yekiyi. Mibvunzo yakadai inodaidzwa kuti recursive. Mukuwedzera, Consul inogona kusarudza chete makiyi asina hunhu hwakatsanangurwa mushure mekutanga, iyo inowirirana nekuwana "vana" pakarepo. Asi zvakakosha kuyeuka kuti ichi ndicho chimiro chechimiro chechimiro: zvinokwanisika kugadzira kiyi kana mubereki wake asipo kana kubvisa kiyi ine vana, apo vana vacharamba vachichengetwa muhurongwa.

Vadzidzi vashanu uye vatatu vakagovera zvitoro zvakakosha
Panzvimbo pewachi, Consul inovharira zvikumbiro zveHTTP. Muchidimbu, aya ndiwo mafoni akajairwa kune nzira yekuverenga data, iyo, pamwe nemamwe ma parameter, iyo yekupedzisira inozivikanwa vhezheni yedata inoratidzwa. Kana iyo yazvino vhezheni ye data inoenderana pane sevha yakakura kupfuura yakataurwa, mhinduro inodzoserwa pakarepo, kana zvisina kudaro - kana kukosha kwachinja. Kune zvakare zvikamu zvinogona kusungirirwa kumakiyi chero nguva. Izvo zvakakosha kucherechedza kuti kusiyana etcd uye ZooKeeper, uko kudzima masesheni kunotungamira kudzima makiyi akabatana, pane modhi iyo iyo chikamu inongove isina kubatana kubva kwavari. Available kutengeserana, isina matavi, asi nemhando dzose dzecheki.

Kuisa zvose pamwe chete

ZooKeeper ine yakanyanya kuomarara data modhi. Iyo inoratidzira mhando yemibvunzo inowanikwa mu etcd haigone kutevedzerwa zvinobudirira muZooKeeper kana Consul. Kuedza kubatanidza akanakisa kubva kumasevhisi ese, isu takazopedzisira tave neinterface yakada kuenzana neZooKeeper interface ine zvinotevera zvakakosha kunze:

  • kutevedzana, mudziyo uye TTL node kwete kutsigirwa
  • ACLs haatsigirwe
  • iyo yakagadziriswa nzira inogadzira kiyi kana isipo (muZK setData inodzosera kukanganisa mune iyi kesi)
  • set uye cas nzira dzakaparadzaniswa (muZK ivo vakanyanya chinhu chimwe chete)
  • iyo nzira yekudzima inodzima node pamwe neiyo subtree (muZK kudzima inodzosera kukanganisa kana node iine vana)
  • Kune imwe neimwe kiyi pane imwe chete vhezheni - iyo kukosha vhezheni (muZK kune vatatu vavo)

Kurambwa kwemanodhi anotevedzana kunokonzerwa nenyaya yekuti etcd neConsul havana tsigiro yakavakirwa kwavari, uye vanogona kuitwa zviri nyore nemushandisi pamusoro peinobuda raibhurari interface.

Kuita maitiro akafanana neZooKeeper pakudzima vertex kunoda kuchengetedza yakaparadzana kaunda yemwana yekiyi yega yega muetcd uye Consul. Sezvo takaedza kudzivirira kuchengetedza meta ruzivo, zvakasarudzwa kudzima iyo subtree yese.

Subtleties yekushandisa

Ngatitarisei zvakanyanya pane mamwe maficha ekushandisa raibhurari interface mune akasiyana masisitimu.

Hierarchy in etcd

Kuchengeta maonero ehierarchical mu etcd rakazove rimwe remabasa anonyanya kunakidza. Range queries inoita kuti zvive nyore kutora rondedzero yemakiyi ane prefix yakatarwa. Semuenzaniso, kana iwe uchida zvese zvinotanga nazvo "/foo", urikukumbira range ["/foo", "/fop"). Asi izvi zvaizodzosa iyo subtree yese yekiyi, iyo inogona kunge isingagamuchirwe kana iyo subtree yakakura. Pakutanga takaronga kushandisa nzira yakakosha yekushandura, yakaitwa mu zetcd. Inosanganisira kuwedzera imwe byte pakutanga kwekiyi, yakaenzana nekudzika kwenode mumuti. Rega ndikupe muenzaniso.

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

Wobva watora vese vana vekiyi "/foo" zvinogoneka nekukumbira siyana ["u02/foo/", "u02/foo0"). Hongu, muASCII "0" anomira ipapo "/".

Asi sei kushandisa kubviswa vertex munyaya iyi? Zvinoitika kuti iwe unofanirwa kudzima ese mafungu emhando ["uXX/foo/", "uXX/foo0") yeXX kubva pa01 kusvika paFF. Zvino takamhanyira mukati kushanda nhamba muganhu mukati mekutengeserana kumwe chete.

Nekuda kweizvozvo, yakareruka kiyi yekutendeuka sisitimu yakagadzirwa, iyo yakaita kuti zvikwanise kuita zvinobudirira zvese zviri zviviri kudzima kiyi uye kuwana runyoro rwevana. Zvakakwana kuwedzera chimiro chakakosha pamberi pechiratidzo chekupedzisira. Semuyenzaniso:

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

Wobva wadzima kiyi "/very" inoshanduka kuita deletion "/u00very" uye range ["/very/", "/very0"), uye kuwana vana vose - muchikumbiro chekiyi kubva muhuwandu ["/very/u00", "/very/u01").

Kubvisa kiyi muZooKeeper

Sezvandambotaura, muZooKeeper haugone kudzima node kana iine vana. Tinoda kudzima kiyi pamwe neiyo subtree. Ndoita sei? Tinoita izvi netarisiro. Chekutanga, isu tinodzokorodza kutenderera muzasi, tichiwana vana vevertex imwe neimwe nemubvunzo wakasiyana. Zvadaro tinovaka kutengeserana kunoedza kudzima node dzose dze subtree nenzira kwayo. Ehe, shanduko dzinogona kuitika pakati pekuverenga subtree nekuidzima. Muchiitiko ichi, kutengeserana kuchakundikana. Uyezve, iyo subtree inogona kuchinja panguva yekuverenga. Chikumbiro chevana venode inotevera inogona kudzorera kukanganisa kana, semuenzaniso, iyi node yakatobviswa. Muzviitiko zvose izvi, tinodzokorora nzira yose zvakare.

Iyi nzira inoita kuti kudzima kiyi kusashanda zvakanyanya kana iine vana, uye zvakatonyanya kana application ikaramba ichishanda neiyo subtree, kudzima nekugadzira makiyi. Zvisinei, izvi zvakatibvumira kudzivisa kuomesa kushandiswa kwedzimwe nzira mu etcd uye Consul.

yakaiswa muZooKeeper

MuZooKeeper pane nzira dzakasiyana dzinoshanda nechimiro chemuti (gadzira, bvisa, getChildren) uye inoshanda nedata mumanode (setData, getData) Uyezve, nzira dzese dzine preconditions dzakasimba: kugadzira kuchadzosera kukanganisa kana node yatove nechekare. yakagadzirwa, bvisa kana setData - kana isati yavapo. Taida nzira yakatarwa inogona kudanwa pasina kufunga nezvekuvapo kwekiyi.

Imwe sarudzo ndeye kutora nzira ine tariro, sekudzima. Tarisa kana node iripo. Kana iripo, fonera setData, zvimwe gadzira. Kana nzira yekupedzisira yakadzosa chikanganiso, dzokorora zvakare zvakare. Chinhu chekutanga chekucherechedza ndechekuti kuvepo bvunzo hakuna maturo. Iwe unogona pakarepo kudana kugadzira. Kupedzwa kwakabudirira kunoreva kuti node yakanga isipo uye yakagadzirwa. Zvikasadaro, gadzira ichadzosa kukanganisa kwakakodzera, mushure mezvo iwe unofanirwa kufonera setData. Ehe, pakati pekufona, vertex inogona kudzimwa nekukwikwidza kufona, uye setData yaizodzosa chikanganiso. Muchiitiko ichi, unogona kuzviita zvakare, asi zvakakosha here?

Kana nzira dzese dziri mbiri dzakadzosa chikanganiso, saka tinoziva zvechokwadi kuti kudzima kwakakwikwidza kwakaitika. Ngatifungei kuti kudzima uku kwakaitika mushure mekufona seti. Ipapo chero chirevo chatiri kuedza kusimbisa chakatodzimwa. Izvi zvinoreva kuti tinogona kufunga kuti seti yakaitwa zvinobudirira, kunyangwe kana pasina chakanyorwa.

Mamwe ruzivo rwehunyanzvi

Muchikamu chino tichatora zororo kubva kune akagoverwa masisitimu uye totaura nezve coding.
Chimwe chezvainyanya kudiwa nemutengi yaive cross-platform: ingangoita imwe yemasevhisi inofanirwa kutsigirwa paLinux, MacOS uye Windows. Pakutanga, isu takagadzirira Linux chete, uye takatanga kuyedza pane mamwe masisitimu gare gare. Izvi zvakakonzera matambudziko mazhinji, ayo kwenguva yakati rebei akanga asina kunyatsojeka kuti osvika sei. Nekuda kweizvozvo, ese matatu masevhisi ekubatanidza ave kutsigirwa paLinux neMacOS, nepo Consul KV chete inotsigirwa paWindows.

Kubva pakutanga, takaedza kushandisa maraibhurari akagadzirwa kuti tiwane masevhisi. Panyaya yeZooKeeper, sarudzo yakadonha ZooKeeper C++, iyo yakazotadza kuunganidza paWindows. Izvi, zvisinei, hazvishamise: raibhurari yakamisikidzwa selinux-chete. Kune Consul sarudzo chete yaive ppconsul. Tsigiro yaifanira kuwedzerwa kwairi zvikamu и kutengeserana. Nezve etcd, raibhurari yakazara-yakazara inotsigira yazvino vhezheni yeprotocol haina kuwanikwa, saka isu takangoita yakagadzirwa grpc mutengi.

Takafemerwa neasynchronous interface yeZooKeeper C ++ raibhurari, isu takafunga kuita zvakare asynchronous interface. ZooKeeper C ++ inoshandisa ramangwana / vimbiso primitives yeizvi. MuSTL, zvinosuruvarisa, anoitwa zvine mwero. Somuenzaniso, kwete ipapo nzira, iyo inoshandisa iyo yakapfuura basa kune mhedzisiro yeramangwana kana yave kuwanikwa. Muchiitiko chedu, nzira yakadaro inofanirwa kushandura mhedzisiro kuita fomati yeraibhurari yedu. Kuti titenderere nedambudziko iri, taifanira kuita yedu yakapfava tambo dziva, sezvo pakukumbira kwemutengi taisakwanisa kushandisa raibhurari inorema yebato seBoost.

Kuitwa kwedu ipapo kunoshanda seizvi. Kana yadaidzwa, imwe vimbiso / yeramangwana pair inogadzirwa. Ramangwana idzva rinodzorerwa, uye rakapfuura rinoiswa pamwe chete nebasa rinoenderana uye imwe vimbiso mumutsara. Tambo kubva padziva inosarudza akati wandei remangwana kubva pamutsetse uye inovavhota vachishandisa wait_for. Kana mhedzisiro inowanikwa, basa rinoenderana rinodanwa uye kukosha kwayo kwekudzoka kunopfuudzwa kuchivimbiso.

Isu takashandisa dziva rimwechete reshinda kuita mibvunzo kune etcd uye Consul. Izvi zvinoreva kuti maraibhurari ari pasi anogona kuwanikwa neshinda dzakawanda dzakasiyana. ppconsul haina tambo yakachengeteka, saka mafoni kwairi anodzivirirwa nemakiyi.
Iwe unogona kushanda negrpc kubva kune akawanda shinda, asi pane zvidiki. Mune etcd wachi dzinoitwa kuburikidza negrpc hova. Idzi inzira mbiri dzemameseji erumwe rudzi. Raibhurari inogadzira tambo imwe chete yewachi dzese uye tambo imwe chete inogadzirisa mameseji anouya. Saka grpc inorambidza parallel kunyora kuyerera. Izvi zvinoreva kuti kana uchitanga kana kudzima wachi, unofanirwa kumirira kusvika chikumbiro chekare chapedza kutumira usati watumira chinotevera. Isu tinoshandisa kuwiriranisa conditional variables.

Mugumisiro

Zvionere wega: liboffkv.

Chikwata chedu: Raed Romanov, Ivan Glushenkov, Dmitry Kamaldinov, Victor Krapivensky, Vitaly Ivanin.

Source: www.habr.com

Voeg