Ụmụ akwụkwọ ise na atọ kesara isi-ọnụ ahịa ụlọ ahịa

Ma ọ bụ ka anyị si dee ọba akwụkwọ C++ onye ahịa maka ZooKeeper, wdgd na Consul KV

N'ime ụwa nke usoro kesara, e nwere ọtụtụ ọrụ ndị a na-ahụkarị: ịchekwa ozi gbasara ihe mejupụtara nke ụyọkọ ahụ, na-achịkwa nhazi nke ọnụ ọnụ, ịchọta oghere ndị na-ezighị ezi, ịhọrọ onye ndu. na ndị ọzọ. Iji dozie nsogbu ndị a, e mepụtala usoro kesara pụrụ iche - ọrụ nhazi. Ugbu a, anyị ga-enwe mmasị na atọ n'ime ha: ZooKeeper, etcd na Consul. N'ime ọrụ niile bara ụba nke Consul, anyị ga-elekwasị anya na Consul KV.

Ụmụ akwụkwọ ise na atọ kesara isi-ọnụ ahịa ụlọ ahịa

N'ezie, sistemu ndị a niile bụ ndị na-anagide mmejọ, ụlọ ahịa igodo ọnụ ahịa linearizable. Ọ bụ ezie na ụdị data ha nwere ọdịiche dị ịrịba ama, nke anyị ga-atụle mgbe e mesịrị, ha na-edozi otu nsogbu ndị bara uru. N'ụzọ doro anya, ngwa ọ bụla nke na-eji ọrụ nhazi na-ejikọta ya na otu n'ime ha, nke nwere ike ime ka ọ dị mkpa ịkwado ọtụtụ usoro n'otu ebe data na-edozi otu nsogbu maka ngwa dị iche iche.

Echiche iji dozie nsogbu a sitere na ụlọ ọrụ na-ahụ maka ndụmọdụ Australia, ọ dabara na anyị, obere ụmụ akwụkwọ, iji mejuputa ya, nke bụ ihe m ga-ekwu maka ya.

Anyị jisiri ike mepụta ọbá akwụkwọ na-enye ihe jikọrọ ọnụ maka ịrụ ọrụ na ZooKeeper, wdgd na Consul KV. Edere ọbá akwụkwọ ahụ na C++, mana enwere atụmatụ ibuga ya na asụsụ ndị ọzọ.

Ụdị data

Iji mepụta otu interface maka usoro atọ dị iche iche, ịkwesịrị ịghọta ihe jikọrọ ha na otú ha si dị iche. Ka anyị chọpụta ya.

Onye nche zoo

Ụmụ akwụkwọ ise na atọ kesara isi-ọnụ ahịa ụlọ ahịa

A na-ahazi igodo ndị ahụ n'ime osisi ma na-akpọ ọnụ. N'ihi ya, maka ọnụ ọnụ ị nwere ike nweta ndepụta nke ụmụ ya. A na-ekewa ọrụ nke ịmepụta znode (mepụta) na ịgbanwe uru (setData): naanị igodo dị ugbu a nwere ike ịgụ ma gbanwee. Enwere ike itinye elekere na arụmọrụ nke ịlele ịdị adị nke ọnụ ọnụ, ịgụ uru, na ịmụ ụmụ. Watch bụ ihe na-akpalite otu oge na-agba ọkụ mgbe ụdị data kwekọrọ na sava ahụ gbanwere. A na-eji ọnụ ephemeral chọpụta ọdịda. A na-ejikọta ha na nnọkọ nke onye ahịa nke kere ha. Mgbe onye ahịa mechiri nnọkọ ma ọ bụ kwụsị ịkọrọ ZooKeeper maka ịdị adị ya, a na-ehichapụ ọnụ ndị a na-akpaghị aka. A na-akwado azụmahịa dị mfe - usoro ọrụ nke na-eme nke ọma ma ọ bụ daa ma ọ bụrụ na nke a agaghị ekwe omume ma ọ dịkarịa ala otu n'ime ha.

wdg

Ụmụ akwụkwọ ise na atọ kesara isi-ọnụ ahịa ụlọ ahịa

Ndị mmepe nke usoro a sitere n'ike mmụọ nsọ nke ZooKeeper nke ọma, yabụ mere ihe niile dị iche. Enweghị usoro igodo, mana ha na-etolite usoro n'usoro nkọwa okwu. Ị nwere ike nweta ma ọ bụ hichapụ igodo niile dị na mpaghara ụfọdụ. Ihe owuwu a nwere ike iyi ihe ijuanya, mana ọ na-egosipụta n'ezie, yana enwere ike iṅomi echiche ndị isi n'ụzọ dị mfe site na ya.

wdgd enweghị ọkọlọtọ atụnyere na-arụ ọrụ, mana ọ nwere ihe ka mma: azụmahịa. N'ezie, ha dị na usoro atọ niile, mana azụmahịa wdgd dị mma karịsịa. Ha mejupụtara atọ blocks: ịlele, ịga nke ọma, ọdịda. Ihe mgbochi nke mbụ nwere usoro nke ọnọdụ, nke abụọ na nke atọ - arụmọrụ. A na-eme azụmahịa ahụ n'ụzọ atọm. Ọ bụrụ na ọnọdụ niile bụ eziokwu, mgbe ahụ, a na-eme ihe nkwụsị nke ọma, ma ọ bụghị ya, a na-eme ihe nkwụsị nke ọdịda. Na API 3.3, ihe ịga nke ọma na ngọngọ ọdịda nwere ike ịnwe azụmahịa akwụghị ụgwọ. Ya bụ, ọ ga-ekwe omume ịme ihe arụrụ arụ n'ọnọdụ ọ fọrọ nke nta ka ọ bụrụ ọkwa akwụghị aka aka ike. Ị nwere ike ịmụtakwu banyere ihe nlele na arụmọrụ dị na ya akwụkwọ.

Elekere dịkwa ebe a, n'agbanyeghị na ọ dị ntakịrị mgbagwoju anya ma enwere ike iji ya ọzọ. Ya bụ, mgbe ị wụnyechara elekere na mpaghara igodo, ị ga-enweta mmelite niile dị na mpaghara a ruo mgbe ị kagburu elekere, ọ bụghị naanị nke mbụ. Na wdgd, analọgụ nke oge ndị ahịa ZooKeeper bụ mgbazinye.

Consul K.V.

Enweghị usoro nhazi siri ike ebe a, mana Consul nwere ike ịmepụta ọdịdị ọ dị: ị nwere ike nweta ma hichapụ igodo niile na prefix a kapịrị ọnụ, ya bụ, jiri " subtree" nke igodo rụọ ọrụ. A na-akpọ ajụjụ ndị dị otú ahụ recursive. Na mgbakwunye, Consul nwere ike họrọ naanị igodo na-enweghị njirimara akọwapụtara mgbe prefix, nke kwekọrọ na ịnweta “ụmụaka” ozugbo. Ma ọ bara uru icheta na nke a bụ kpọmkwem ọdịdị nke usoro nhazi: ọ ga-ekwe omume ịmepụta igodo ma ọ bụrụ na nne na nna ya adịghị adị ma ọ bụ hichapụ igodo nwere ụmụaka, ebe ụmụaka ga-anọgide na-echekwa ya na usoro.

Ụmụ akwụkwọ ise na atọ kesara isi-ọnụ ahịa ụlọ ahịa
Kama elekere, Consul na-egbochi arịrịọ HTTP. N'ezie, ndị a bụ oku nkịtị na usoro ọgụgụ data, nke, yana paramita ndị ọzọ, a na-egosi ụdị data ikpeazụ a maara. Ọ bụrụ na ụdị ugbu a nke data kwekọrọ na ihe nkesa dị ukwuu karịa nke a kapịrị ọnụ, a na-eweghachi nzaghachi ozugbo, ma ọ bụghị - mgbe uru gbanwere. Enwekwara nnọkọ nwere ike itinye na igodo n'oge ọ bụla. Ọ bụ ihe kwesịrị ịrịba ama na n'adịghị ka etcd na ZooKeeper, ebe ihichapụ sessions na-eduga na ihichapụ nke metụtara igodo, e nwere a mode na nke nnọkọ bụ nnọọ unlinked si ha. Dị azụmahịa, na-enweghị alaka, ma na ụdị ego ọ bụla.

Na-etinye ya niile ọnụ

ZooKeeper nwere ụdị data kacha sie ike. Ajụjụ nso nso a dị na wdgd enweghị ike iṅomi nke ọma na ZooKeeper ma ọ bụ Consul. N'ịgbalị itinye ihe kachasị mma sitere na ọrụ niile, anyị kwụsịrị na interface nke fọrọ nke nta ka ọ bụrụ nke dabara na interface ZooKeeper yana ndị a dị ịrịba ama ndị a:

  • usoro, akpa na ọnụ TTL akwadoghị
  • Anaghị akwado ACL
  • Usoro setịpụrụ na-emepụta igodo ma ọ bụrụ na ọ dịghị (na ZK setData weghachiri njehie na nke a)
  • A na-ekewa usoro nhazi na cas (na ZK ha bụ otu ihe)
  • Usoro ihichapu na-ehichapụ ọnụ yana subtree (na ZK ihichapụ na-eweghachi njehie ma ọ bụrụ na ọnụ nwere ụmụaka)
  • Maka igodo ọ bụla enwere naanị otu ụdị - ụdị uru (na ZK ha atọ dị)

Ọjụjụ nke ọnụ ọnụ n'usoro bụ n'ihi eziokwu na wdgd na Consul enweghị nkwado maka ha, onye ọrụ nwere ike ịme ya ngwa ngwa n'elu nrụpụta ọba akwụkwọ.

Ịmepụta omume yiri ZooKeeper mgbe ị na-ehichapụ vertex ga-achọ idobe counter ụmụaka dị iche maka igodo ọ bụla na wdgd na Consul. Ebe ọ bụ na anyị nwara izere ịchekwa ozi meta, e kpebiri ihichapụ osisi subtree niile.

Aghụghọ nke mmejuputa iwu

Ka anyị lebakwuo anya n'akụkụ ụfọdụ nke imejuputa ihe nleba anya n'ọbá akwụkwọ na sistemụ dị iche iche.

Ọchịchị na wdgd

Ịnọgide n'ọkwa ọkwa ọkwa na wdgd tụgharịrị bụrụ otu n'ime ọrụ kacha atọ ụtọ. Ajụjụ oke na-eme ka ọ dị mfe iweghachite ndepụta igodo nwere prefix akọwapụtara. Dịka ọmụmaatụ, ọ bụrụ na ịchọrọ ihe niile na-amalite "/foo", ị na-arịọ maka nso ["/foo", "/fop"). Mana nke a ga-eweghachite mkpịsị ugodi ahụ dum, nke nwere ike ọ gaghị anabata ma ọ bụrụ na osisi subtree buru ibu. Na mbụ anyị mere atụmatụ iji usoro ntụgharị asụsụ isi, etinyere na zetcd. Ọ na-agụnye ịgbakwunye otu byte na mmalite nke igodo ahụ, hà nhata omimi nke ọnụ na osisi ahụ. Ka m nye gị ihe atụ.

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

Mgbe ahụ nweta ụmụ niile ozugbo nke igodo "/foo" enwere ike site na ịrịọ oke ["u02/foo/", "u02/foo0"). Ee, na ASCII "0" guzo ozugbo "/".

Ma otu esi emejuputa mwepụ nke vertex na nke a? Ọ tụgharịrị na ịkwesịrị ihichapụ usoro niile nke ụdị ["uXX/foo/", "uXX/foo0") maka XX site na 01 ruo FF. Mgbe ahụ anyị gbabara n'ime oke ọnụ ọgụgụ ọrụ n'ime otu azụmahịa.

N'ihi ya, e mepụtara usoro ntụgharị igodo dị mfe, nke mere ka o kwe omume iji mejuputa ma ihichapụ igodo na ịnweta ndepụta ụmụaka. O zuru ezu ịgbakwunye agwa pụrụ iche tupu akara ikpeazụ. Ọmụmaatụ:

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

Wee ihichapụ igodo "/very" na-atụgharị n'ime nhichapụ "/u00very" na oke ["/very/", "/very0"), na inweta ụmụaka niile - na arịrịọ maka igodo si nso ["/very/u00", "/very/u01").

Na-ewepụ igodo dị na ZooKeeper

Dịka m kwurula, na ZooKeeper ị nweghị ike ihichapụ ọnụ ma ọ nwere ụmụaka. Anyị chọrọ ihichapụ igodo yana osisi subtree. Kedu ihe m kwesịrị ịme? Anyị na-eme nke a na nchekwube. Nke mbụ, anyị na-agafe subtree ugboro ugboro, na-enweta ụmụ nke vertex ọ bụla na ajụjụ dị iche. Mgbe ahụ, anyị na-ewu azụmahịa nke na-agbalị ihichapụ ọnụ ọgụgụ niile nke subtree n'usoro ziri ezi. N'ezie, mgbanwe nwere ike ime n'etiti ịgụ osisi dị ala na ihichapụ ya. N'okwu a, azụmahịa ahụ ga-ada. Ọzọkwa, obere osisi nwere ike ịgbanwe n'oge usoro ọgụgụ. Arịrịọ maka ụmụaka nke ọnụ na-esote nwere ike weghachi njehie ma ọ bụrụ na, dịka ọmụmaatụ, ehichapụla ọnụ ọnụ a. N'okwu abụọ ahụ, anyị na-emegharị usoro ahụ dum ọzọ.

Ụzọ a na-eme ka ihichapụ igodo adịghị arụ ọrụ ma ọ bụrụ na ọ nwere ụmụaka, na ọbụna karịa ma ọ bụrụ na ngwa ahụ na-aga n'ihu na-arụ ọrụ na subtree, ihichapụ na ịmepụta igodo. Otú ọ dị, nke a nyere anyị ohere izere mgbagwoju anya mmejuputa usoro ndị ọzọ na etcd na Consul.

etinyere na ZooKeeper

Na ZooKeeper e nwere ụzọ dị iche iche na-arụ ọrụ na usoro osisi (mepụta, ihichapụ, getChildren) na nke na-arụ ọrụ na data na ọnụ (setData, getData Ọzọkwa, ụzọ niile nwere ihe mgbochi siri ike: ịmepụta ga-eweghachite njehie ma ọ bụrụ na ọnụ nwere ugbua emepụtara, hichapụ ma ọ bụ setData - ọ bụrụ na ọ dịbeghị. Anyị chọrọ usoro setịpụrụ nke enwere ike ịkpọ na-echeghị maka ọnụnọ igodo.

Otu nhọrọ bụ iji ụzọ nwere nchekwube, dị ka ihichapụ. Lelee ma ọnụ dị. Ọ bụrụ na ọ dị, kpọọ setData, ma ọ bụghị mepụta. Ọ bụrụ na usoro ikpeazụ weghachiri mperi, kwugharịa ya ọzọ. Ihe mbụ ị ga-amata bụ na ule ịdị adị enweghị isi. Ị nwere ike ịkpọ mepụta ozugbo. Emecha nke ọma ga-apụta na ọnụ ahụ adịghị adị wee kee ya. Ma ọ bụghị ya, ịmepụta ga-eweghachite njehie kwesịrị ekwesị, mgbe nke ahụ gasịrị, ịkwesịrị ịkpọ setData. N'ezie, n'etiti oku, enwere ike ihichapụ vertex site na oku asọmpi, na setData ga-eweghachite mperi. N'okwu a, ị nwere ike ime ya ọzọ, mana ọ bara uru?

Ọ bụrụ na ụzọ abụọ ahụ weghachite njehie, mgbe ahụ anyị maara n'ezie na nhichapụ asọmpi mere. Ka anyị were were na ihichapụ a mere mgbe akpọchara ntọala. Mgbe ahụ, ihe ọ bụla pụtara anyị na-agbalị iguzobe na-ehichapụ. Nke a pụtara na anyị nwere ike iche na e mezuru ihe nke ọma, ọ bụrụgodị na ọ nweghị ihe edere ya.

Nkọwa teknụzụ ndị ọzọ

N'akụkụ a, anyị ga-ezumike na sistemụ kesara wee kwuo maka itinye koodu.
Otu n'ime isi ihe ndị ahịa chọrọ bụ cross-platform: ọ dịkarịa ala otu n'ime ọrụ a ga-akwadorịrị na Linux, MacOS na Windows. Na mbụ, anyị mepụtara naanị maka Linux, wee malite ịnwale na sistemụ ndị ọzọ ka emechara. Nke a kpatara ọtụtụ nsogbu, nke ruo oge ụfọdụ na-edochaghị anya ka esi agakwuru. N'ihi ya, a na-akwado ọrụ nhazi atọ niile na Linux na MacOS, ebe naanị Consul KV na-akwado na Windows.

Site na mmalite, anyị gbalịrị iji ọba akwụkwọ ndị emebere iji nweta ọrụ. N'ihe banyere ZooKeeper, nhọrọ ahụ dabara ZooKeeper C++, nke emechaghị chịkọta na Windows. Otú ọ dị, nke a abụghị ihe ijuanya: ọbá ​​akwụkwọ ahụ ka edobere dị ka Linux-naanị. Maka Consul naanị nhọrọ bụ ppconsul. Ekwesịrị ịgbakwunye nkwado na ya nnọkọ и azụmahịa. Maka wdgd, ọbá akwụkwọ zuru oke na-akwado ụdị protocol kachasị ọhụrụ, yabụ anyị naanị. emepụtara onye ahịa grpc.

Site n'ike mmụọ nsọ asynchronous interface nke ọbá akwụkwọ ZooKeeper C++, anyị kpebiri imejuputa interface asynchronous. ZooKeeper C++ na-eji ọdịnihu/ekwe nkwa primitives maka nke a. Na STL, ọ dị mwute ikwu, a na-emejuputa ha nke ọma. Dị ka ihe atụ, mba wee usoro, nke na-emetụta ọrụ gafere na nsonaazụ nke ọdịnihu mgbe ọ dị. N'ọnọdụ anyị, usoro dị otú ahụ dị mkpa iji tọghata nsonaazụ n'ụdị nke ọbá akwụkwọ anyị. Iji gboo nsogbu a, anyị ga-emejupụta ọdọ mmiri erimeri nke anyị dị mfe, ebe ọ bụ na arịrịọ ndị ahịa anyị enweghị ike iji nnukwu ọba akwụkwọ ndị ọzọ dị ka Boost.

Mgbe ahụ mmejuputa anyị na-arụ ọrụ dị ka nke a. Mgbe a na-akpọ ya, a na-emepụta nkwa / ụzọ ọdịnihu ọzọ. A na-eweghachi ọdịnihu ọhụrụ, a na-etinyekwa nke gafere ya na ọrụ kwekọrọ na nkwa ọzọ na kwụ n'ahịrị. Otu eriri sitere na ọdọ mmiri na-ahọrọ ọdịnihu dị iche iche site na kwụ n'ahịrị wee nyochaa ha site na iji wait_for. Mgbe nsonaazụ dị, a na-akpọ ọrụ kwekọrọ na uru nloghachi ya na nkwa ahụ.

Anyị na-eji otu eriri ọdọ mmiri mee ajụjụ maka etcd na Consul. Nke a pụtara na enwere ike ịnweta ọba akwụkwọ ndị dị n'okpuru site na ọtụtụ eriri dị iche iche. ppconsul abụghị eri nke ọma, ya mere a na-echekwa oku a na-akpọ ya site na mkpọchi.
Ị nwere ike iji grpc rụọ ọrụ site na ọtụtụ eri, mana enwere aghụghọ. A na-emejuputa elekere wdgd site na iyi grpc. Ndị a bụ ọwa bidirectional maka ozi nke ụfọdụ ụdị. Ọbá akwụkwọ ahụ na-emepụta otu eri maka elekere niile yana otu eri na-ahazi ozi mbata. Ya mere grpc machibidoro ide ihe na iyi. Nke a pụtara na mgbe ị na-amalite ma ọ bụ na-ehichapụ elekere, ị ga-echere ruo mgbe arịrịọ gara aga agwụla izipu tupu izipu nke na-esote. Anyị na-eji maka mmekọrịta mgbanwe ọnọdụ.

Nsonaazụ

Hụ onwe gị: liboffkv.

Otu anyị: Raed Romanov, Ivan Glushenkov, Dmitry Kamaldinov, Victor Krapivensky, Vitaly Ivanin.

isi: www.habr.com

Tinye a comment