Cúigear mac léinn agus triúr stór dáilte eochairluacha

Nó mar a scríobh muid cliant C++ leabharlann do ZooKeeper, etcd agus Consal KV

I saol na gcóras dáilte, tá roinnt tascanna tipiciúil ann: faisnéis a stóráil faoi chomhdhéanamh an bhraisle, cumraíocht na nóid a bhainistiú, nóid lochtacha a bhrath, ceannaire a roghnú. eile. Chun na fadhbanna seo a réiteach, cruthaíodh córais dáilte speisialta - seirbhísí comhordaithe. Anois beidh suim againn i dtrí cinn acu: ZooKeeper, etcd agus Consal. As feidhmiúlacht shaibhir Chonsal go léir, díreoimid ar Consal KV.

Cúigear mac léinn agus triúr stór dáilte eochairluacha

Go bunúsach, is stórais líneálaigh de luach eochair-fhulangacha iad na córais seo go léir. Cé go bhfuil difríochtaí suntasacha ag a gcuid samhlacha sonraí, a phléfaimid níos déanaí, réitíonn siad na fadhbanna praiticiúla céanna. Ar ndóigh, tá gach feidhmchlár a úsáideann an tseirbhís chomhordaithe ceangailte le ceann amháin acu, rud a d'fhéadfadh go mbeadh gá le tacaíocht a thabhairt do chórais éagsúla i lárionad sonraí amháin a réitíonn na fadhbanna céanna le haghaidh feidhmeanna éagsúla.

Tháinig an smaoineamh chun an fhadhb seo a réiteach ó ghníomhaireacht chomhairliúcháin san Astráil, agus thit sé orainne, foireann bheag mac léinn, é a chur i bhfeidhm, agus is é sin a bhfuil mé chun labhairt faoi.

D’éirigh linn leabharlann a chruthú a sholáthraíonn comhéadan coiteann chun oibriú le ZooKeeper, etcd agus Consal KV. Tá an leabharlann scríofa i C++, ach tá pleananna ann í a aistriú chuig teangacha eile.

Samhlacha Sonraí

Chun comhéadan coiteann a fhorbairt do thrí chóras éagsúla, ní mór duit a thuiscint cad atá i gcoiteann acu agus conas a bhíonn siad difriúil. A ligean ar figiúr sé amach.

Zú Coimeádaí

Cúigear mac léinn agus triúr stór dáilte eochairluacha

Eagraítear na heochracha i gcrann agus tugtar nóid orthu. Dá réir sin, le haghaidh nód is féidir leat liosta dá leanaí a fháil. Tá na hoibríochtaí a bhaineann le znode a chruthú (cruthaigh) agus luach a athrú (setData) scartha: ní féidir ach eochracha atá ann cheana féin a léamh agus a athrú. Is féidir uaireadóirí a cheangal leis na hoibríochtaí a bhaineann le seiceáil go bhfuil nód ann, luach a léamh, agus leanaí a fháil. Is truicear aonuaire é faire a lasann nuair a athraíonn leagan na sonraí comhfhreagracha ar an bhfreastalaí. Úsáidtear nóid ghearrshaolacha chun teipeanna a bhrath. Tá siad ceangailte le seisiún an chliaint a chruthaigh iad. Nuair a dhúnann cliant seisiún nó nuair a stopann sé fógra a thabhairt do ZooKeeper go bhfuil sé ann, scriostar na nóid seo go huathoibríoch. Tacaítear le hidirbhearta simplí - sraith oibríochtaí a n-éiríonn leo go léir nó a dteipeann orthu mura féidir é seo a dhéanamh le ceann amháin acu ar a laghad.

srl

Cúigear mac léinn agus triúr stór dáilte eochairluacha

Bhí forbróirí an chórais seo spreagtha go soiléir ag ZooKeeper, agus dá bhrí sin rinne gach rud difriúil. Níl aon ordlathas eochracha ann, ach cruthaíonn siad tacar atá ordaithe go foclóireachta. Is féidir leat gach eochair a bhaineann le raon áirithe a fháil nó a scriosadh. D’fhéadfadh cuma aisteach a bheith ar an struchtúr seo, ach tá sé an-léiritheach i ndáiríre, agus is furasta dearcadh ordlathach a aithris tríd.

níl oibríocht chaighdeánach comparáide agus socraithe ag srld, ach tá rud éigin níos fearr aige: idirbhearta. Ar ndóigh, tá siad ann i ngach ceann de na trí chóras, ach tá idirbhearta etcd go háirithe go maith. Tá siad comhdhéanta de thrí bhloc: seiceáil, rath, teip. Tá sraith coinníollacha sa chéad bhloc, an dara agus an tríú - oibríochtaí. Déantar an t-idirbheart a fhorghníomhú go atomically. Má tá na coinníollacha go léir fíor, ansin déantar an bloc rath a fhorghníomhú, ar shlí eile déantar an bloc teip a fhorghníomhú. In API 3.3, is féidir idirbhearta neadaithe a bheith sna bloic ratha agus teip. Is é sin, is féidir tógálacha coinníollach de leibhéal neadaithe beagnach treallach a fhorghníomhú go adamhach. Is féidir leat níos mó a fhoghlaim faoi na seiceálacha agus na hoibríochtaí atá ann doiciméadú.

Tá uaireadóirí anseo freisin, cé go bhfuil siad beagán níos casta agus is féidir iad a ath-inúsáidte. Is é sin, tar éis faire a shuiteáil ar raon eochair, gheobhaidh tú gach nuashonrú sa raon seo go dtí go gcealóidh tú an faire, agus ní hamháin an chéad cheann. In etcd, is léasanna an analóg de sheisiúin cliant ZooKeeper.

Consal K.V.

Níl aon struchtúr ordlathach docht anseo ach oiread, ach is féidir leis an gConsal an chuma atá air a chruthú: is féidir leat gach eochair a fháil agus a scriosadh leis an réimír sonraithe, is é sin, oibriú le “fochrann” den eochair. Tugtar fiosruithe athchúrsacha orthu. Ina theannta sin, ní féidir le Consal ach eochracha a roghnú nach bhfuil an carachtar sonraithe iontu tar éis an réimír, a fhreagraíonn do “leanaí” a fháil láithreach. Ach is fiú a mheabhrú gurb é seo go beacht an chuma ar struchtúr ordlathach: is féidir go leor eochair a chruthú mura bhfuil a thuismitheoir ann nó eochair a bhfuil leanaí aige a scriosadh, agus leanfar ar aghaidh ag stóráil na bpáistí sa chóras.

Cúigear mac léinn agus triúr stór dáilte eochairluacha
In ionad uaireadóirí, tá bac ar iarratais HTTP ag Consal. Go bunúsach, is gnáthghlaonna iad seo chuig an modh léitheoireachta sonraí, a gcuirtear in iúl, mar aon le paraiméadair eile, an leagan deireanach de na sonraí atá ar eolas. Má tá an leagan reatha de na sonraí comhfhreagracha ar an bhfreastalaí níos mó ná an ceann sonraithe, cuirtear an freagra ar ais láithreach, ar shlí eile - nuair a athraíonn an luach. Tá seisiúin ann freisin ar féidir eochracha a cheangal ag am ar bith. Is fiú a thabhairt faoi deara, murab ionann agus etcd agus ZooKeeper, nuair is é an toradh a bhíonn ar sheisiúin a scriosadh ná na heochracha gaolmhara a scriosadh, tá modh ann ina bhfuil an seisiún dícheangailte go simplí uathu. Ar fáil idirbhearta, gan brainsí, ach le gach cineál seiceála.

Ag cur go léir le chéile

Tá an tsamhail sonraí is déine ag ZooKeeper. Ní féidir aithris éifeachtach a dhéanamh ar na fiosrúcháin ar an raon léiritheach atá ar fáil in srl. in ZooKeeper nó Consal. Ag iarraidh an chuid is fearr ó na seirbhísí go léir a ionchorprú, chríochnaigh muid comhéadan beagnach comhionann le comhéadan ZooKeeper leis na heisceachtaí suntasacha seo a leanas:

  • seicheamh, coimeádán agus nóid TTL Gan tacaíocht
  • Ní thacaítear le ACLanna
  • cruthaíonn an modh socraithe eochair mura bhfuil sé ann (i ZK setData filleann an earráid sa chás seo)
  • tá modhanna socraithe agus cas scartha (i ZK is é an rud céanna iad go bunúsach)
  • scriosann an modh scriosta nód chomh maith lena fhochrann (i ZK scriostar ar ais earráid má tá leanaí ag an nód)
  • I gcás gach eochair níl ach leagan amháin - an leagan luach (i ZK tá triúr acu)

Is éard is cúis le diúltú nóid sheicheamhacha toisc nach bhfuil tacaíocht ionsuite ag etcd agus Consal dóibh, agus is féidir leis an úsáideoir iad a chur i bhfeidhm go héasca ar bharr an chomhéadain leabharlainne a thagann as.

Chun iompraíocht cosúil le ZooKeeper a chur i bhfeidhm agus rinn a scriosadh, bheadh ​​gá le cuntar leanaí ar leith a choinneáil do gach eochair in etcd agus Consal. Ós rud é go ndearna muid iarracht meiteafhaisnéis a stóráil a sheachaint, socraíodh an fochrainn iomlán a scriosadh.

Buntáistí an chur chun feidhme

Breathnaímis níos géire ar ghnéithe áirithe de chomhéadan na leabharlainne a chur i bhfeidhm i gcórais éagsúla.

Ordlathas in etc

Ba é ceann de na tascanna is suimiúla ná dearcadh ordlathach a choimeád i srl. Fágann ceisteanna raoin go bhfuil sé éasca liosta eochracha a fháil le réimír sonraithe. Mar shampla, má theastaíonn uait gach rud a thosaíonn le "/foo", tá tú ag iarraidh raon ["/foo", "/fop"). Ach thabharfadh sé seo fochrainn iomlán na heochrach ar ais, rud nach mbeadh inghlactha má tá an fo-chrann mór. Ar dtús bhí sé beartaithe againn eochair-mheicníocht aistriúcháin a úsáid, curtha i bhfeidhm i zetcd. Baineann sé le beart amháin a chur ag tús an eochair, comhionann le doimhneacht an nód sa chrann. Lig dom sampla a thabhairt duit.

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

Ansin faigh gach leanbh láithreach an eochair "/foo" is féidir trí raon a iarraidh ["u02/foo/", "u02/foo0"). Sea, in ASCII "0" sheasann díreach tar éis "/".

Ach conas deireadh a chur le rinn a chur i bhfeidhm sa chás seo? Tharlaíonn sé go raibh gá duit a scriosadh gach raonta den chineál ["uXX/foo/", "uXX/foo0") le haghaidh XX ó 01 go FF. Agus ansin ritheamar isteach teorainn uimhreacha oibríochta laistigh d’idirbheart amháin.

Mar thoradh air sin, cruthaíodh córas comhshó eochair simplí, rud a d'fhág go bhféadfaí eochair a scriosadh agus liosta leanaí a fháil go héifeachtach. Is leor carachtar speisialta a chur leis roimh an comhartha deireanach. Mar shampla:

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

Ansin scriosadh an eochair "/very" casadh i scriosadh "/u00very" agus raon ["/very/", "/very0"), agus gach leanbh a fháil - in iarratas ar eochracha ón raon ["/very/u00", "/very/u01").

Eochair i ZooKeeper a bhaint

Mar a luaigh mé cheana, in ZooKeeper ní féidir leat nód a scriosadh má tá leanaí aige. Ba mhaith linn an eochair a scriosadh mar aon leis an bhfochrann. Cad a dheánfainn? Déanaimid é seo le dóchas. Ar dtús, déanaimid trasnú arís agus arís eile ar an bhfochrann, ag fáil na bpáistí de gach rinn le fiosrú ar leith. Ansin déanaimid idirbheart a thógáil a dhéanann iarracht gach nóid den fhochrainn a scriosadh san ord ceart. Ar ndóigh, is féidir athruithe a dhéanamh idir léamh fochrainn agus é a scriosadh. Sa chás seo, beidh an t-idirbheart theipeann. Ina theannta sin, féadfaidh an subtree athrú le linn an phróisis léitheoireachta. Féadfaidh iarratas do pháistí an chéad nód eile earráid a sheoladh ar ais má, mar shampla, go bhfuil an nód seo scriosta cheana féin. Sa dá chás, déanaimid an próiseas iomlán arís.

Déanann an cur chuige seo eochair a scriosadh an-neamhéifeachtach má tá leanaí aige, agus níos mó fós ná sin má leanann an t-iarratas ag obair leis an bhfochrann, ag scriosadh agus ag cruthú eochracha. Mar sin féin, chuir sé seo ar ár gcumas cur i bhfeidhm modhanna eile in etcd agus Consal casta a sheachaint.

socraithe i ZooKeeper

In ZooKeeper tá modhanna ar leith a oibríonn leis an struchtúr crann (cruthaigh, scrios, getChildren) agus a oibríonn le sonraí i nóid (setData, getData). cruthaithe, scriosta nó setData – mura bhfuil sé ann cheana. Bhí modh socraithe ag teastáil uainn ar féidir glaoch air gan smaoineamh ar eochair a bheith i láthair.

Rogha amháin is ea cur chuige dóchasach a ghlacadh, mar atá le scriosadh. Seiceáil an bhfuil nód ann. Má tá, cuir glaoch ar setData, cruthaigh ar shlí eile. Má thug an modh deireanach earráid ar ais, déan arís é. Is é an chéad rud atá le tabhairt faoi deara nach bhfuil aon phointe ag baint leis an tástáil a bheith ann. Is féidir leat glaoch a chruthú láithreach. Ciallaíonn críochnú rathúil nach raibh an nód ann agus cruthaíodh é. Seachas sin, cruthóidh sé an earráid chuí ar ais, agus ina dhiaidh sin ní mór duit setData a ghlaoch. Ar ndóigh, idir glaonna, d’fhéadfaí rinn a scriosadh trí ghlao iomaíoch, agus chuirfeadh setData earráid ar ais freisin. Sa chás seo, is féidir leat é a dhéanamh arís, ach is fiú é?

Má thugann an dá mhodh earráid ar ais, tá a fhios againn go cinnte go ndearnadh scriosadh iomaíoch. Samhlóimid gur tharla an scriosadh seo tar éis glaoch a chur ar shocrú. Ansin, tá cibé brí atáimid ag iarraidh a bhunú scriosta cheana féin. Ciallaíonn sé seo gur féidir linn glacadh leis gur cuireadh an tacar i gcrích go rathúil, fiú murar scríobhadh rud ar bith.

Tuilleadh sonraí teicniúla

Sa chuid seo tógfaimid sos ó chórais dáilte agus labhróimid faoi chódú.
Ba é ceann de phríomhriachtanais an chustaiméara ná tras-ardán: ní mór tacaíocht a thabhairt do cheann amháin ar a laghad de na seirbhísí ar Linux, MacOS agus Windows. Ar dtús, níor fhorbair muid ach le haghaidh Linux, agus thosaigh muid ag tástáil ar chórais eile níos déanaí. Seo ba chúis le go leor fadhbanna, a bhí ar feadh tamaill go hiomlán doiléir conas a chur chuige. Mar thoradh air sin, tugtar tacaíocht do na trí sheirbhís chomhordaithe ar Linux agus MacOS anois, agus ní thacaítear ach le Consal KV ar Windows.

Ón tús, rinneamar iarracht leabharlanna réamhdhéanta a úsáid chun rochtain a fháil ar sheirbhísí. I gcás ZooKeeper, thit an rogha ar aghaidh Zú Coimeádaí C++, a theip ar deireadh a chur le chéile ar Windows. Ní haon ionadh é seo, áfach: tá an leabharlann suite mar linux-amháin. Do Chonsal an t-aon rogha a bhí ann ppconsul. B’éigean tacaíocht a chur leis seisiúin и idirbhearta. Maidir le etcd, níor thángthas ar leabharlann iomlán a thacaíonn leis an leagan is déanaí den phrótacal, mar sin déanaimis go simplí cliant grpc ginte.

Arna spreagadh ag comhéadan asincrónach leabharlann ZooKeeper C++, shocraigh muid comhéadan asincrónach a chur i bhfeidhm freisin. Úsáideann ZooKeeper C++ primitives todhchaí/geallta chuige seo. In STL, ar an drochuair, cuirtear i bhfeidhm go han-bheag iad. Mar shampla, uimh ansin modh, a chuireann an fheidhm rite i bhfeidhm ar thoradh na todhchaí nuair a bheidh sé ar fáil. Inár gcás, tá modh den sórt sin riachtanach chun an toradh a thiontú go formáid ár leabharlann. Chun an fhadhb seo a réiteach, bhí orainn ár gcomhthiomsú snáithe simplí féin a chur i bhfeidhm, mar ar iarratas an chustaiméara níorbh fhéidir linn leabharlanna troma tríú páirtí a úsáid mar Boost.

Oibríonn ár gcur i bhfeidhm ag an am mar seo. Nuair a ghlaoitear air, cruthaítear péire breise gealltanais/todhchaí. Cuirtear an todhchaí nua ar ais, agus cuirtear an ceann a ritheadh ​​​​mar aon leis an bhfeidhm chomhfhreagrach agus gealltanas breise sa scuaine. Roghnaíonn snáithe ón linn roinnt todhchaíochtaí ón scuaine agus déanann sé vótaíocht orthu ag úsáid wait_for. Nuair a bhíonn toradh ar fáil, tugtar an fheidhm chomhfhreagrach agus cuirtear a luach fillte ar aghaidh chuig an ngealltanas.

D'úsáideamar an linn snáithe céanna chun fiosrúcháin chuig etcd agus Consal a fhorghníomhú. Ciallaíonn sé seo gur féidir rochtain a fháil ar na leabharlanna bunúsacha trí iliomad snáitheanna éagsúla. Níl ppconsul sábháilte le snáithe, mar sin tá glaonna chuige cosanta ag glais.
Is féidir leat oibriú le grpc ó snáitheanna iolracha, ach tá subtleties ann. Cuirtear uaireadóirí in etcd i bhfeidhm trí shruthanna grpc. Is bealaí déthreoracha iad seo le haghaidh teachtaireachtaí de chineál áirithe. Cruthaíonn an leabharlann snáithe amháin do gach uaireadóirí agus snáithe amháin a phróiseálann teachtaireachtaí isteach. Mar sin cuireann grpc cosc ​​ar scríobhann comhthreomhar le sruth. Ciallaíonn sé seo go gcaithfidh tú fanacht go dtí go mbeidh an t-iarratas roimhe seo curtha i gcrích roimh an gcéad cheann eile a sheoladh agus tú ag tosú nó ag scriosadh uaireadóir. Úsáidimid le haghaidh sioncrónaithe athróga coinníollach.

Iomlán na

Féach duit féin: liboffkv.

Ár bhfoireann: Raed Romanov, Ivan Glushchenko, Dmitry Kamaldinov, Victor Krapivensky, Vitaly Ivanin.

Foinse: will.com

Add a comment