Mpianatra dimy sy fivarotana manan-danja telo nozaraina

Na ny fomba nanoratanay tranomboky C++ mpanjifa ho an'ny ZooKeeper, etcd ary Consul KV

Ao amin'ny tontolon'ny rafitra mizara dia misy asa mahazatra maromaro: mitahiry fampahalalana momba ny firafitry ny cluster, mitantana ny fanamafisana ny nodes, mamantatra ny nodes diso, mifidy mpitarika. ary ny hafa. Mba hamahana ireo olana ireo dia namorona rafitra fizarana manokana - serivisy fandrindrana. Ankehitriny dia ho liana amin'ny telo amin'izy ireo isika: ZooKeeper, etcd ary Consul. Amin'ireo fiasa manankarena rehetra an'ny Consul, hifantoka amin'ny Consul KV izahay.

Mpianatra dimy sy fivarotana manan-danja telo nozaraina

Amin'ny ankapobeny, ireo rafitra rehetra ireo dia mandefitra amin'ny lesoka, mitahiry sanda manan-danja azo tsipika. Na dia misy fahasamihafana lehibe aza ny maodelin'ny angon-dry zareo, izay hodinihintsika any aoriana, dia mamaha olana mitovy amin'izany izy ireo. Mazava ho azy fa ny fampiharana tsirairay mampiasa ny serivisy fandrindrana dia mifamatotra amin'ny iray amin'izy ireo, izay mety hitarika amin'ny filàna fanohanana rafitra maromaro ao amin'ny foibe data iray izay mamaha olana mitovy amin'ny fampiharana samihafa.

Ny hevitra hamahana ity olana ity dia niainga avy amin'ny masoivoho mpanoro hevitra Aostraliana, ary niandry anay, ekipa kely mpianatra, ny fampiharana izany, izay no horesahiko.

Nahavita namorona tranomboky izahay izay manome interface tsara amin'ny fiaraha-miasa amin'ny ZooKeeper, etcd ary Consul KV. Ny trano famakiam-boky dia voasoratra amin'ny C ++, saingy misy drafitra hampita azy amin'ny fiteny hafa.

Data Models

Mba hamoronana interface tsara ho an'ny rafitra telo samihafa dia mila mahatakatra ny zavatra iraisan'izy ireo sy ny maha-samihafa azy ireo ianao. Andeha hojerentsika izany.

ZooKeeper

Mpianatra dimy sy fivarotana manan-danja telo nozaraina

Ny fanalahidy dia nalamina ho hazo ary antsoina hoe nodes. Noho izany, ho an'ny node dia afaka mahazo lisitry ny zanany ianao. Ny asa famoronana znode (mamorona) sy manova sanda (setData) dia misaraka: ny fanalahidy efa misy ihany no azo vakiana sy ovaina. Ny famantaranandro dia azo ampifandraisina amin'ny asa fanaraha-maso ny fisian'ny node, ny famakiana sanda ary ny fahazoana zaza. Ny Watch dia trigger indray mandeha izay mirehitra rehefa miova ny dikan'ny angona mifandraika amin'ny mpizara. Ephemeral nodes dia ampiasaina hamantarana ny tsy fahombiazana. Izy ireo dia mifamatotra amin'ny fotoam-pivorian'ny mpanjifa namorona azy ireo. Rehefa manidy fivoriana ny mpanjifa iray na tsy mampandre ny ZooKeeper ny fisiany, dia voafafa ho azy ireo nodes ireo. Ny fifampiraharahana tsotra dia tohanana - andiana hetsika izay mahomby na tsy mahomby raha toa ka tsy azo atao ny iray amin'izy ireo farafaharatsiny.

sns

Mpianatra dimy sy fivarotana manan-danja telo nozaraina

Ny mpamorona an'ity rafitra ity dia nahazo aingam-panahy mazava avy amin'ny ZooKeeper, ary noho izany dia nanao ny zava-drehetra tamin'ny fomba hafa. Tsy misy ambaratongam-panalahidy, fa izy ireo dia mamorona andian-teny voalamina ara-pitsipika. Azonao atao ny mahazo na mamafa ny fanalahidy rehetra amin'ny faritra iray. Mety ho toa hafahafa io rafitra io, saingy tena maneho hevitra tokoa izy io, ary azo alaina mora foana amin'ny alalan'izany ny fomba fijery ara-jeografika.

etcd dia tsy manana asa fampitahana mahazatra, fa misy zavatra tsara kokoa: transactions. Mazava ho azy fa misy izy ireo amin'ny rafitra telo, fa ny fifampiraharahana sns dia tsara indrindra. Misy sakana telo izy ireo: fanamarinana, fahombiazana, tsy fahombiazana. Ny sakana voalohany dia misy fepetra maromaro, ny faharoa sy fahatelo - ny asa. Ny fifampiraharahana dia atao atomika. Raha marina ny fepetra rehetra, dia hotanterahina ny sakana fahombiazana, raha tsy izany dia hotanterahina ny sakana tsy fahombiazana. Ao amin'ny API 3.3, ny fanakanana fahombiazana sy tsy fahombiazana dia mety ahitana ny fifampiraharahana. Izany hoe, azo atao ny manatanteraka ny fanorenana misy fepetra amin'ny haavon'ny fanatobiana tsy ara-dalàna. Azonao atao ny mianatra bebe kokoa momba ny fanamarinana sy ny asa misy tahirin-kevitra.

Misy ihany koa ny famantaranandro, na dia somary sarotra kokoa aza izy ireo ary azo ampiasaina indray. Izany hoe, aorian'ny fametrahana famantaranandro eo amin'ny sehatra manan-danja, dia hahazo ny fanavaozana rehetra amin'ity sehatra ity ianao mandra-panafoanao ny famantaranandro, fa tsy ny voalohany ihany. Amin'ny etcd, ny analogue ny fivoriana mpanjifa ZooKeeper dia fanofana.

Consul K.V.

Tsy misy rafitra ara-jeografika henjana ihany koa eto, fa ny Consul dia afaka mamorona ny endrika misy azy: azonao atao ny mahazo sy mamafa ny fanalahidy rehetra miaraka amin'ny prefix voafaritra, izany hoe miasa miaraka amin'ny "subtree" amin'ny fanalahidy. Ny fanontaniana toy izany dia antsoina hoe recursive. Fanampin'izany, ny Consul dia tsy afaka mifidy afa-tsy fanalahidy izay tsy misy ny toetra voatondro aorian'ny prefix, izay mifanaraka amin'ny fahazoana "ankizy" avy hatrany. Saingy tokony ho tsaroana fa izany indrindra no endriky ny rafitra ambaratongam-pahefana: azo atao ny mamorona fanalahidy raha tsy misy ny ray aman-dreniny na mamafa ny fanalahidy manan-janaka, raha mbola ho voatahiry ao amin'ny rafitra ny ankizy.

Mpianatra dimy sy fivarotana manan-danja telo nozaraina
Raha tokony ho famantaranandro, Consul dia nanakana ny fangatahana HTTP. Amin'ny ankapobeny, ireo dia antso mahazatra amin'ny fomba famakiana angon-drakitra, izay, miaraka amin'ireo masontsivana hafa, ny dikan-teny farany fantatra amin'ny angon-drakitra dia aseho. Raha lehibe noho ilay voatondro ny dikan-teny mifandraika amin'izao fotoana izao amin'ny mpizara, dia averina avy hatrany ny valiny, raha tsy izany - rehefa miova ny sandany. Misy ihany koa ny session izay azo ampifandraisina amin'ny fanalahidy amin'ny fotoana rehetra. Tsara ny manamarika fa tsy toy ny etcd sy ZooKeeper, izay ny famafana ny session dia mitarika amin'ny famafana ny fanalahidy mifandraika, misy fomba iray izay tsy ahafahan'ny session miala amin'izy ireo fotsiny. Available varotra, tsy misy sampana, fa amin'ny karazana seky rehetra.

Mampitambatra izany rehetra izany

ZooKeeper dia manana ny maodely data henjana indrindra. Tsy azo alain-tahaka amin'ny fomba mahomby amin'ny ZooKeeper na Consul ny fanontaniana isan-karazany misy amin'ny etcd. Miezaka ny hampiditra ny tsara indrindra amin'ny serivisy rehetra izahay, dia niafara tamin'ny interface saika mitovy amin'ny interface ZooKeeper miaraka amin'ireto maningana manan-danja manaraka ireto:

  • sequence, container ary TTL nodes tsy zaka
  • Tsy tohanana ny ACL
  • ny fomba napetraka dia mamorona fanalahidy raha tsy misy izany (ao amin'ny ZK setData dia mamerina hadisoana amin'ity tranga ity)
  • ny fomba set sy cas dia misaraka (amin'ny ZK dia zavatra iray ihany izy ireo)
  • Ny fomba famafana dia mamafa ny node miaraka amin'ny zana-kazony (ao amin'ny ZK delete dia mamerina hadisoana raha manan-janaka ny node)
  • Ho an'ny fanalahidy tsirairay dia misy dikan-teny iray ihany - ny dikan-teny sarobidy (ao amin'ny ZK misy telo amin'izy ireo)

Ny fandavana ny nodes sequential dia noho ny tsy fisian'ny etcd sy Consul fanohanana azy ireo, ary azo ampiharina mora foana amin'ny mpampiasa eo an-tampon'ny interface tsara tranomboky.

Ny fampiharana ny fitondran-tena mitovy amin'ny ZooKeeper rehefa mamafa vertex dia mitaky fitazonana kaontera ankizy misaraka ho an'ny fanalahidy tsirairay ao amin'ny etcd sy Consul. Koa satria niezaka nisoroka ny fitehirizana fampahalalana meta izahay, dia nanapa-kevitra ny hamafa ny zana-kazo manontolo.

Soso-kevitra amin'ny fampiharana

Andeha hojerentsika akaiky ny lafiny sasany amin'ny fampiharana ny interface famakiam-boky amin'ny rafitra samihafa.

Hierarchy in etc

Ny fitazonana fomba fijery hierarchical amin'ny etcd dia nanjary iray amin'ireo asa mahaliana indrindra. Manamora ny fakana lisitr'ireo fanalahidy misy tovana voatondro ny fangatahan'ny isan-karazany. Ohatra, raha mila izay rehetra manomboka amin'ny "/foo", mangataka isan-karazany ianao ["/foo", "/fop"). Fa izany dia hamerina ny zana-kazo manontolo amin'ny fanalahidy, izay mety tsy azo ekena raha lehibe ny zana-kazo. Tamin'ny voalohany dia nikasa ny hampiasa mekanika fandikan-teny fototra izahay, ampiharina amin'ny zetcd. Tafiditra ao anatin'izany ny fampidirana byte iray amin'ny fiandohan'ny fanalahidy, mitovy amin'ny halalin'ny node amin'ny hazo. Mamelà ahy hanome ohatra anao.

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

Dia alao daholo ny zanaky ny lakile "/foo" azo atao amin'ny fangatahana isan-karazany ["u02/foo/", "u02/foo0"). Eny, amin'ny ASCII "0" mijoro avy hatrany "/".

Ahoana anefa ny fampiharana ny fanesorana vertex amin'ity tranga ity? Hita fa mila mamafa ny karazany rehetra ianao ["uXX/foo/", "uXX/foo0") ho an'ny XX manomboka amin'ny 01 ka hatramin'ny FF. Ary avy eo dia nihazakazaka izahay fetran'ny laharan'ny asa ao anatin'ny fifampiraharahana iray.

Vokatr'izany dia noforonina ny rafitra fiovam-po tsotra tsotra, izay nahafahana nampihatra tsara ny famafana fanalahidy iray sy ny fahazoana lisitry ny ankizy. Ampy ny manampy toetra manokana alohan'ny famantarana farany. Ohatra:

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

Avy eo dia mamafa ny fanalahidy "/very" mivadika ho famafana "/u00very" ary range ["/very/", "/very0"), ary mahazo ny ankizy rehetra - amin'ny fangatahana fanalahidy avy amin'ny isan-karazany ["/very/u00", "/very/u01").

Manala fanalahidy iray ao amin'ny ZooKeeper

Araka ny efa nolazaiko, ao amin'ny ZooKeeper dia tsy afaka mamafa node ianao raha manan-janaka. Te-hamafa ny fanalahidy miaraka amin'ny zana-kazo izahay. Inona no tokony hataoko? Manao izany amim-panantenana izahay. Voalohany, miverimberina mamakivaky ny zana-kazo isika, mahazo ny zanaky ny vertex tsirairay miaraka amin'ny fanontaniana manokana. Avy eo dia manangana fifampiraharahana izay manandrana mamafa ny node rehetra amin'ny zana-kazo amin'ny filaharana marina. Mazava ho azy fa mety hisy fiovana eo anelanelan'ny famakiana zana-kazo sy ny famafana azy. Amin'ity tranga ity dia tsy hahomby ny fifampiraharahana. Ankoatra izany, mety hiova ny zana-kazo mandritra ny dingan'ny famakiana. Ny fangatahana ho an'ny zanaky ny node manaraka dia mety hamerina hadisoana raha, ohatra, ity node ity dia efa voafafa. Amin'ireo tranga roa ireo dia averinay indray ny dingana manontolo.

Ity fomba fiasa ity dia mahatonga ny famafana fanalahidy ho tsy mahomby raha toa ka manan-janaka izy, ary mainka fa raha mitohy miasa miaraka amin'ny zana-kazo ny fampiharana, mamafa sy mamorona fanalahidy. Na izany aza, izany dia namela anay tsy hanasarotra ny fampiharana ny fomba hafa amin'ny etcd sy Consul.

napetraka ao amin'ny ZooKeeper

Ao amin'ny ZooKeeper dia misy fomba miavaka izay miasa amin'ny firafitry ny hazo (mamorona, mamafa, mahazoChildren) ary miasa miaraka amin'ny angona ao amin'ny nodes (setData, getData). Ankoatra izany, ny fomba rehetra dia manana fepetra hentitra: ny famoronana dia hamerina fahadisoana raha toa ka efa nisy ny node. noforonina, fafao na setData - raha mbola tsy misy izany. Nila fomba napetraka izay azo antsoina tsy mieritreritra ny fisian'ny fanalahidy.

Safidy iray ny maka fomba fijery feno fanantenana, toy ny amin'ny famafana. Jereo raha misy node. Raha misy dia antsoy ny setData, raha tsy izany dia mamorona. Raha namerina fahadisoana ilay fomba farany dia avereno averina. Ny zavatra voalohany tokony homarihina dia ny fisian'ny fitsapana dia tsy misy dikany. Afaka miantso avy hatrany ianao mamorona. Ny fahavitan'ny fahombiazana dia midika fa tsy nisy ilay node ary noforonina. Raha tsy izany, ny famoronana dia hamerina ny fahadisoana mety, aorian'izay dia mila miantso setData ianao. Mazava ho azy, eo anelanelan'ny antso, ny vertex dia mety ho voafafa amin'ny antso mifaninana, ary ny setData dia hamerina fahadisoana ihany koa. Amin'ity tranga ity, azonao atao indray izany, fa mendrika izany ve?

Raha mamerina hadisoana ireo fomba roa ireo, dia fantatsika tsara fa nisy ny famafana nifaninana. Andeha hojerentsika fa nitranga ity famafana ity taorian'ny fiantsoana napetraka. Dia efa voafafa izay hevitra tiana apetraka. Midika izany fa azontsika atao ny mihevitra fa vita soa aman-tsara ny seta, na dia tsy nisy nosoratana aza.

antsipiriany ara-teknika bebe kokoa

Amin'ity fizarana ity dia hiala sasatra amin'ny rafitra zaraina isika ary hiresaka momba ny coding.
Ny iray amin'ireo fepetra takian'ny mpanjifa dia cross-platform: farafaharatsiny ny iray amin'ireo serivisy dia tsy maintsy tohanana amin'ny Linux, MacOS ary Windows. Tamin'ny voalohany dia natao ho an'ny Linux ihany izahay, ary nanomboka nanandrana tamin'ny rafitra hafa taty aoriana. Niteraka olana maro izany, izay nandritra ny fotoana ela dia tsy mazava tsara ny fomba hanatonana. Vokatr'izany, ny serivisy fandrindrana telo dia tohana amin'ny Linux sy MacOS izao, fa ny Consul KV ihany no tohana amin'ny Windows.

Hatrany am-boalohany dia nanandrana nampiasa tranomboky efa vita izahay mba hidirana amin'ny serivisy. Raha ny momba ny ZooKeeper dia nilatsaka ny safidy ZooKeeper C++, izay tsy nahavita nanangona tamin'ny Windows tamin'ny farany. Tsy mahagaga anefa izany: ny tranomboky dia napetraka ho linux-only. Ho an'ny Consul ihany no hany safidy ppconsul. Tsy maintsy nampiana fanohanana izany fivoriana и varotra. Ho an'ny snsd, tranomboky feno manohana ny dikan-teny farany amin'ny protocol dia tsy hita, noho izany dia tsotra fotsiny izahay namorona mpanjifa grpc.

Nahazo aingam-panahy avy amin'ny interface asynchronous an'ny tranomboky ZooKeeper C++, nanapa-kevitra ny hampihatra interface asynchronous ihany koa izahay. ZooKeeper C++ dia mampiasa ny ho avy/mampanantena primitives ho an'ity. Ao amin'ny STL, indrisy, izy ireo dia ampiharina amin'ny fomba maotina. Ohatra, tsia avy eo fomba, izay mampihatra ny asa nolovaina amin'ny vokatry ny ho avy rehefa misy izany. Amin'ny toe-javatra misy antsika, ny fomba toy izany dia ilaina mba hamadihana ny vokatra ho endrika ny tranomboky. Mba hamahana ity olana ity dia tsy maintsy nampihatra ny dobo filomanosanay manokana izahay, satria noho ny fangatahan'ny mpanjifa dia tsy afaka mampiasa tranomboky mavesatra toy ny Boost izahay.

Ny fampiharana anay dia miasa toy izao. Rehefa voaantso dia misy fampanantenana fanampiny/fampiofanana ho avy noforonina. Averina ny ho avy vaovao, ary apetraka miaraka amin'ny fiasa mifanaraka amin'izany sy fampanantenana fanampiny ao amin'ny filaharana ny ho avy. Ny kofehy iray avy amin'ny dobo dia mifidy hoavy maromaro avy amin'ny filaharana ary mifidy azy ireo amin'ny alalan'ny wait_for. Rehefa misy vokatra azo, dia antsoina ny asa mifanaraka amin'izany ary ny sanda miverina dia alefa any amin'ny fampanantenana.

Nampiasa ny dobo filokana mitovy izahay mba hanatanterahana ny fanontaniana amin'ny etcd sy Consul. Midika izany fa ny trano famakiam-boky fototra dia azo idirana amin'ny alàlan'ny kofehy samihafa. Tsy azo antoka ny ppconsul, noho izany dia voaaro amin'ny hidin-trano ny fiantsoana azy.
Azonao atao ny miara-miasa amin'ny grpc avy amin'ny kofehy maromaro, saingy misy ny subtleties. Amin'ny famantaranandro etcd dia ampiharina amin'ny alàlan'ny renirano grpc. Ireo dia fantsona roa tonta ho an'ny hafatra amin'ny karazana iray. Ny tranomboky dia mamorona kofehy tokana ho an'ny famantaranandro rehetra sy kofehy tokana izay manodina hafatra miditra. Ka ny grpc dia mandrara ny fanoratana parallèle amin'ny stream. Midika izany fa rehefa manomboka na mamafa famantaranandro ianao dia tsy maintsy miandry mandra-pahavitan'ny fangatahana teo aloha alohan'ny handefasana ny manaraka. Mampiasa synchronization izahay variables misy fepetra.

Ny vokany

Jereo ho anao: liboffkv.

Ny ekipanay: Raed Romanov, Ivan Glushenkov, Dmitry Kamaldinov, Victor Krapivensky, Vitaly Ivanin.

Source: www.habr.com

Add a comment