Awọn ọmọ ile-iwe marun ati awọn ile itaja iye-bọtini pin mẹta

Tabi bawo ni a ṣe kọ ile-ikawe C ++ alabara kan fun ZooKeeper, etcd ati Consul KV

Ni agbaye ti awọn ọna ṣiṣe ti a pin, nọmba awọn iṣẹ-ṣiṣe aṣoju lo wa: titoju alaye nipa akopọ ti iṣupọ, iṣakoso iṣeto ti awọn apa, wiwa awọn apa aṣiṣe, yiyan oludari ati awọn miiran. Lati yanju awọn iṣoro wọnyi, awọn ọna ṣiṣe pinpin pataki ti ṣẹda - awọn iṣẹ iṣakojọpọ. Bayi a yoo nifẹ si mẹta ninu wọn: ZooKeeper, etcd ati Consul. Ninu gbogbo iṣẹ ṣiṣe ọlọrọ ti Consul, a yoo dojukọ Consul KV.

Awọn ọmọ ile-iwe marun ati awọn ile itaja iye-bọtini pin mẹta

Ni pataki, gbogbo awọn ọna ṣiṣe wọnyi jẹ ifarada-aṣiṣe, awọn ile itaja iye bọtini laini. Botilẹjẹpe awọn awoṣe data wọn ni awọn iyatọ pataki, eyiti a yoo jiroro nigbamii, wọn yanju awọn iṣoro ilowo kanna. O han ni, ohun elo kọọkan ti o lo iṣẹ isọdọkan ni a so mọ ọkan ninu wọn, eyiti o le ja si iwulo lati ṣe atilẹyin awọn ọna ṣiṣe pupọ ni ile-iṣẹ data kan ti o yanju awọn iṣoro kanna fun awọn ohun elo oriṣiriṣi.

Ero lati yanju iṣoro yii ti ipilẹṣẹ ni ile-iṣẹ alamọran ilu Ọstrelia kan, o si ṣubu si wa, ẹgbẹ kekere ti awọn ọmọ ile-iwe, lati ṣe imuse rẹ, eyiti Emi yoo sọrọ nipa rẹ.

A ṣakoso lati ṣẹda ile-ikawe ti o pese wiwo ti o wọpọ fun ṣiṣẹ pẹlu ZooKeeper, bbl ati Consul KV. A kọ ile-ikawe naa ni C ++, ṣugbọn awọn ero wa lati gbe si awọn ede miiran.

Awọn awoṣe Data

Lati ṣe agbekalẹ wiwo ti o wọpọ fun awọn ọna ṣiṣe oriṣiriṣi mẹta, o nilo lati ni oye ohun ti wọn ni ni wọpọ ati bii wọn ṣe yatọ. Jẹ ká ro ero o jade.

ZooKeeper

Awọn ọmọ ile-iwe marun ati awọn ile itaja iye-bọtini pin mẹta

Awọn bọtini ti wa ni ṣeto sinu igi kan ati pe wọn pe awọn apa. Gẹgẹ bẹ, fun ipade kan o le gba atokọ ti awọn ọmọ rẹ. Awọn iṣẹ ṣiṣe ti ṣiṣẹda znode (ṣẹda) ati iyipada iye kan (setData) ti yapa: awọn bọtini to wa nikan ni a le ka ati yipada. Awọn iṣọ le ni asopọ si awọn iṣẹ ṣiṣe ti ṣayẹwo aye ti ipade, kika iye kan, ati gbigba awọn ọmọde. Wiwo jẹ okunfa ọkan-akoko ti o tan nigbati ẹya data ti o baamu lori olupin naa yipada. Awọn apa ephemeral ni a lo lati ṣe awari awọn ikuna. Wọn ti so mọ igba ti alabara ti o ṣẹda wọn. Nigbati alabara ba tii igba kan tabi da duro lati sọ ZooKeeper ti aye rẹ, awọn apa wọnyi yoo paarẹ laifọwọyi. Awọn iṣowo ti o rọrun ni atilẹyin - eto awọn iṣẹ ṣiṣe ti boya gbogbo wọn ṣaṣeyọri tabi kuna ti eyi ko ba ṣeeṣe fun o kere ju ọkan ninu wọn.

abbl

Awọn ọmọ ile-iwe marun ati awọn ile itaja iye-bọtini pin mẹta

Awọn olupilẹṣẹ ti eto yii jẹ atilẹyin ni kedere nipasẹ ZooKeeper, ati nitorinaa ṣe ohun gbogbo ni oriṣiriṣi. Ko si logalomomoise ti awọn bọtini, sugbon ti won dagba kan lexicographically paṣẹ ṣeto. O le gba tabi paarẹ gbogbo awọn bọtini ti o jẹ ti awọn sakani kan. Ẹya yii le dabi ajeji, ṣugbọn o jẹ asọye pupọ, ati pe wiwo akosoagbasomode le ni irọrun farawe nipasẹ rẹ.

etcd ko ni a boṣewa afiwe-ati-ṣeto isẹ, sugbon o ni nkankan dara: lẹkọ. Nitoribẹẹ, wọn wa ninu gbogbo awọn ọna ṣiṣe mẹta, ṣugbọn awọn iṣowo ati bẹbẹ lọ dara julọ. Wọn ni awọn bulọọki mẹta: ṣayẹwo, aṣeyọri, ikuna. Ni igba akọkọ ti Àkọsílẹ ni awọn kan ti ṣeto ti awọn ipo, awọn keji ati kẹta - mosi. Awọn idunadura ti wa ni executed atomically. Ti gbogbo awọn ipo ba jẹ otitọ, lẹhinna bulọọki aṣeyọri ti ṣiṣẹ, bibẹẹkọ bulọki ikuna ti ṣiṣẹ. Ni API 3.3, aṣeyọri ati awọn bulọọki ikuna le ni awọn iṣowo itẹ-ẹiyẹ ninu. Iyẹn ni, o ṣee ṣe lati ṣe atomically ṣiṣẹ awọn igbelewọn ipo ti o fẹrẹẹ ipele itẹ-ẹiyẹ lainidii. O le ni imọ siwaju sii nipa kini awọn sọwedowo ati awọn iṣẹ ṣiṣe wa lati iwe.

Awọn iṣọ wa nibi paapaa, botilẹjẹpe wọn jẹ idiju diẹ sii ati pe o tun ṣee lo. Iyẹn ni, lẹhin fifi aago kan sori sakani bọtini, iwọ yoo gba gbogbo awọn imudojuiwọn ni sakani yii titi ti o fi fagile aago naa, kii ṣe ọkan akọkọ nikan. Ni etcd, afọwọṣe ti awọn akoko alabara ZooKeeper jẹ awọn iyalo.

Consul K.V.

Tun ko si ilana ilana ti o muna nibi, ṣugbọn Consul le ṣẹda irisi ti o wa: o le gba ati paarẹ gbogbo awọn bọtini pẹlu ami-iṣaaju ti a ti sọ tẹlẹ, iyẹn ni, ṣiṣẹ pẹlu “ipo” bọtini naa. Iru awọn ibeere ni a npe ni recursive. Ni afikun, Consul le yan awọn bọtini nikan ti ko ni ohun kikọ ti o ni pato lẹhin asọtẹlẹ, eyiti o ni ibamu si gbigba “awọn ọmọde” lẹsẹkẹsẹ. Ṣugbọn o tọ lati ranti pe eyi jẹ deede hihan ti eto eto-iṣe: o ṣee ṣe pupọ lati ṣẹda bọtini kan ti obi rẹ ko ba wa tabi paarẹ bọtini kan ti o ni awọn ọmọde, lakoko ti awọn ọmọde yoo tẹsiwaju lati wa ni ipamọ ninu eto naa.

Awọn ọmọ ile-iwe marun ati awọn ile itaja iye-bọtini pin mẹta
Dipo awọn iṣọ, Consul ti dina awọn ibeere HTTP. Ni pataki, iwọnyi jẹ awọn ipe lasan si ọna kika data, fun eyiti, pẹlu awọn paramita miiran, ẹya ti a mọ ti o kẹhin ti data jẹ itọkasi. Ti ẹya lọwọlọwọ ti data ti o baamu lori olupin naa tobi ju ọkan ti a sọ pato lọ, idahun yoo pada lẹsẹkẹsẹ, bibẹẹkọ - nigbati iye ba yipada. Awọn akoko tun wa ti o le somọ awọn bọtini nigbakugba. O tọ lati ṣe akiyesi pe ko dabi etcd ati ZooKeeper, nibiti awọn akoko piparẹ yoo yori si piparẹ awọn bọtini ti o somọ, ipo kan wa ninu eyiti igba naa ko ni asopọ lati ọdọ wọn. Wa lẹkọ, laisi awọn ẹka, ṣugbọn pẹlu gbogbo iru awọn sọwedowo.

Fifi gbogbo rẹ papọ

ZooKeeper ni awoṣe data lile julọ. Awọn ibeere ibiti o ṣalaye ti o wa ni etcd ko le ṣe afarawe daradara ni boya ZooKeeper tabi Consul. Gbiyanju lati ṣafikun ohun ti o dara julọ lati gbogbo awọn iṣẹ naa, a pari pẹlu wiwo ti o fẹrẹ deede si wiwo ZooKeeper pẹlu awọn imukuro pataki wọnyi:

  • ọkọọkan, eiyan ati TTL apa ko ni atilẹyin
  • ACL ko ni atilẹyin
  • Ọna ti a ṣeto ṣẹda bọtini kan ti ko ba si (ni ZK setData da aṣiṣe pada ninu ọran yii)
  • ṣeto ati awọn ọna kas ti yapa (ni ZK wọn jẹ ohun kanna ni pataki)
  • Ọna nu yoo paarẹ ipade kan pẹlu abẹlẹ rẹ (ni ZK paarẹ yoo pada aṣiṣe ti ipade naa ba ni awọn ọmọde)
  • Fun bọtini kọọkan jẹ ẹya kan ṣoṣo - ẹya iye (ni ZK mẹta ni wọn)

Awọn ijusile ti lesese apa jẹ nitori si ni otitọ wipe etcd ati Consul ko ni-itumọ ti ni support fun wọn, ati awọn ti wọn le wa ni awọn iṣọrọ muse nipa olumulo lori oke ti awọn Abajade ìkàwé ni wiwo.

Ṣiṣe ihuwasi ti o jọra si ZooKeeper nigbati piparẹ fatesi kan yoo nilo mimu kọnputa ọmọ lọtọ fun bọtini kọọkan ni etcd ati Consul. Niwọn igba ti a gbiyanju lati yago fun fifipamọ alaye meta, o ti pinnu lati pa gbogbo igi abẹlẹ naa rẹ.

Subtleties ti imuse

Jẹ ki a ṣe akiyesi diẹ ninu awọn aaye ti imuse wiwo ile-ikawe ni awọn ọna ṣiṣe oriṣiriṣi.

Logalomomoise ni etcd

Mimu wiwo akosori ni etcd jade lati jẹ ọkan ninu awọn iṣẹ ṣiṣe ti o nifẹ julọ. Awọn ibeere ibiti o jẹ ki o rọrun lati gba atokọ ti awọn bọtini pada pẹlu ìpele pàtó kan. Fun apẹẹrẹ, ti o ba nilo ohun gbogbo ti o bẹrẹ pẹlu "/foo", o n beere fun sakani kan ["/foo", "/fop"). Ṣugbọn eyi yoo da gbogbo abẹlẹ bọtini naa pada, eyiti o le ma ṣe itẹwọgba ti abẹ-igi ba tobi. Ni akọkọ a gbero lati lo ilana itumọ bọtini kan, imuse ni zetcd. O kan fifi baiti kan kun ni ibẹrẹ bọtini, dogba si ijinle ipade inu igi naa. Jẹ ki n fun ọ ni apẹẹrẹ.

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

Lẹhinna gba gbogbo awọn ọmọ lẹsẹkẹsẹ ti bọtini "/foo" ṣee ṣe nipa a ìbéèrè ibiti ["u02/foo/", "u02/foo0"). Bẹẹni, ni ASCII "0" duro ọtun lẹhin "/".

Ṣugbọn bawo ni a ṣe le ṣe yiyọkuro ti fatesi ninu ọran yii? O wa ni jade wipe o nilo lati pa gbogbo awọn sakani ti awọn iru ["uXX/foo/", "uXX/foo0") fun XX lati 01 to FF. Ati lẹhinna a sare sinu iye to nọmba isẹ laarin ọkan idunadura.

Bi abajade, eto iyipada bọtini ti o rọrun kan ni a ṣẹda, eyiti o jẹ ki o ṣee ṣe lati ṣe imunadoko mejeeji piparẹ bọtini kan ati gbigba atokọ ti awọn ọmọde. O to lati ṣafikun ohun kikọ pataki ṣaaju ami to kẹhin. Fun apere:

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

Lẹhinna paarẹ bọtini naa "/very" yipada si piparẹ "/u00very" ati ibiti ["/very/", "/very0"), ati gbigba gbogbo awọn ọmọde - ni ibeere fun awọn bọtini lati ibiti o wa ["/very/u00", "/very/u01").

Yiyọ bọtini kan kuro ni ZooKeeper

Gẹgẹbi Mo ti sọ tẹlẹ, ni ZooKeeper o ko le pa oju ipade kan ti o ba ni awọn ọmọde. A fẹ lati pa bọtini rẹ pẹlu abẹlẹ. Kini o yẹ ki n ṣe? A ṣe eyi pẹlu ireti. Ni akọkọ, a n lọ kaakiri abẹlẹ naa, ni gbigba awọn ọmọ ti fatesi kọọkan pẹlu ibeere lọtọ. Lẹhinna a kọ idunadura kan ti o gbiyanju lati pa gbogbo awọn apa ti subtree ni aṣẹ to tọ. Nitoribẹẹ, awọn iyipada le waye laarin kika abẹlẹ ati piparẹ rẹ. Ni idi eyi, iṣowo naa yoo kuna. Pẹlupẹlu, abẹlẹ le yipada lakoko ilana kika. Ibeere fun awọn ọmọde ti ipade atẹle le da aṣiṣe pada ti, fun apẹẹrẹ, ipade yii ti paarẹ tẹlẹ. Ni igba mejeeji, a tun gbogbo ilana lẹẹkansi.

Ọna yii jẹ ki piparẹ bọtini kan jẹ ailagbara pupọ ti o ba ni awọn ọmọde, ati paapaa diẹ sii ti ohun elo naa ba tẹsiwaju lati ṣiṣẹ pẹlu abẹlẹ, pipaarẹ ati ṣiṣẹda awọn bọtini. Sibẹsibẹ, eyi gba wa laaye lati yago fun idiju imuse ti awọn ọna miiran ni etcd ati Consul.

ṣeto ni ZooKeeper

Ni ZooKeeper awọn ọna lọtọ wa ti o ṣiṣẹ pẹlu eto igi (ṣẹda, paarẹ, gba Awọn ọmọde) ati pe o ṣiṣẹ pẹlu data ni awọn apa (setData, getData) Pẹlupẹlu, gbogbo awọn ọna ni awọn ipo to muna: ṣẹda yoo pada aṣiṣe ti ipade naa ba ti ni tẹlẹ. ti ṣẹda, paarẹ tabi ṣetoData – ti ko ba si tẹlẹ. A nilo ọna ti a ṣeto ti o le pe laisi ero nipa wiwa bọtini kan.

Aṣayan kan ni lati mu ọna ireti, bi pẹlu piparẹ. Ṣayẹwo boya ipade kan wa. Ti o ba wa, pe setData, bibẹẹkọ ṣẹda. Ti ọna ti o kẹhin ba da aṣiṣe pada, tun ṣe gbogbo rẹ lẹẹkansi. Ohun akọkọ lati ṣe akiyesi ni pe idanwo aye jẹ asan. O le lẹsẹkẹsẹ pe ṣẹda. Ipari aṣeyọri yoo tumọ si pe ipade naa ko si ati pe o ti ṣẹda. Bibẹẹkọ, ṣẹda yoo pada aṣiṣe ti o yẹ, lẹhin eyi o nilo lati pe setData. Nitoribẹẹ, laarin awọn ipe, fatesi kan le paarẹ nipasẹ ipe idije, ati pe setData yoo tun da aṣiṣe pada. Ni idi eyi, o le ṣe gbogbo rẹ lẹẹkansi, ṣugbọn ṣe o tọ si?

Ti awọn ọna mejeeji ba da aṣiṣe pada, lẹhinna a mọ daju pe piparẹ idije kan waye. Jẹ ki a fojuinu pe piparẹ yii waye lẹhin pipe ṣeto. Lẹhinna itumo eyikeyi ti a n gbiyanju lati fi idi rẹ mulẹ ti parẹ tẹlẹ. Eyi tumọ si pe a le ro pe ṣeto ti ṣiṣẹ ni aṣeyọri, paapaa ti o ba jẹ pe ko si nkankan ti a kọ.

Awọn alaye imọ-ẹrọ diẹ sii

Ni apakan yii a yoo gba isinmi lati awọn ọna ṣiṣe pinpin ati sọrọ nipa ifaminsi.
Ọkan ninu awọn ibeere akọkọ ti alabara jẹ pẹpẹ-agbelebu: o kere ju ọkan ninu awọn iṣẹ gbọdọ ni atilẹyin lori Linux, MacOS ati Windows. Ni ibẹrẹ, a ni idagbasoke fun Linux nikan, ati bẹrẹ idanwo lori awọn eto miiran nigbamii. Eyi fa ọpọlọpọ awọn iṣoro, eyiti o fun igba diẹ koyewa patapata bi o ṣe le sunmọ. Bi abajade, gbogbo awọn iṣẹ isọdọkan mẹta ni atilẹyin bayi lori Lainos ati MacOS, lakoko ti Consul KV nikan ni atilẹyin lori Windows.

Lati ibẹrẹ, a gbiyanju lati lo awọn ile-ikawe ti a ti ṣetan lati wọle si awọn iṣẹ. Ninu ọran ti ZooKeeper, yiyan ṣubu lori ZooKeeper C ++, eyiti o kuna nikẹhin lati ṣajọ lori Windows. Eyi, sibẹsibẹ, kii ṣe iyalẹnu: ile-ikawe wa ni ipo bi linux-nikan. Fun Consul aṣayan nikan ni ppconsul. Atilẹyin ni lati ṣafikun si awọn akoko и lẹkọ. Fun etcd, ile-ikawe ti o ni kikun ti n ṣe atilẹyin ẹya tuntun ti ilana naa ko rii, nitorinaa a rọrun ti ipilẹṣẹ grpc ni ose.

Ni atilẹyin nipasẹ wiwo asynchronous ti ile-ikawe ZooKeeper C ++, a pinnu lati tun ṣe imuse wiwo asynchronous. ZooKeeper C ++ nlo ojo iwaju/awọn alakoko ileri fun eyi. Ni STL, laanu, wọn ti ṣe imuse ni iwọntunwọnsi. Fun apẹẹrẹ, rara lẹhinna ọna, eyi ti o kan iṣẹ ti o kọja si abajade ti ojo iwaju nigbati o ba wa. Ninu ọran wa, iru ọna bẹẹ jẹ pataki lati yi abajade pada si ọna kika ile-ikawe wa. Lati yanju iṣoro yii, a ni lati ṣe adaṣe adagun okun ti o rọrun tiwa, nitori pe ni ibeere alabara a ko le lo awọn ile ikawe ẹni-kẹta ti o wuwo bii Boost.

Wa ki o si imuse ṣiṣẹ bi yi. Nigbati a ba pe, afikun ileri / bata ọjọ iwaju ti ṣẹda. Awọn titun ojo iwaju ti wa ni pada, ati awọn ti o ti kọja ọkan ti wa ni gbe pẹlú pẹlu awọn ti o baamu iṣẹ ati awọn ẹya afikun ileri ninu awọn ti isinyi. Okun kan lati inu adagun-odo naa yan awọn ọjọ iwaju pupọ lati isinyi ati ibo wọn ni lilo wait_for. Nigbati abajade ba wa, iṣẹ ti o baamu ni a pe ati iye ipadabọ rẹ ti kọja si ileri naa.

A lo adagun okun okun kanna lati ṣiṣẹ awọn ibeere si etcd ati Consul. Eyi tumọ si pe awọn ile-ikawe ti o wa ni abẹlẹ le wọle nipasẹ ọpọlọpọ awọn okun oriṣiriṣi. ppconsul kii ṣe okun ailewu, nitorina awọn ipe si rẹ ni aabo nipasẹ awọn titiipa.
O le ṣiṣẹ pẹlu grpc lati ọpọ awọn okun, ṣugbọn awọn arekereke wa. Ni awọn aago etcd ti wa ni imuse nipasẹ awọn ṣiṣan grpc. Iwọnyi jẹ awọn ikanni bidirectional fun awọn ifiranṣẹ ti iru kan. Ile-ikawe naa ṣẹda o tẹle ara kan fun gbogbo awọn iṣọ ati okun kan ti o ṣe ilana awọn ifiranṣẹ ti nwọle. Nitorinaa grpc ṣe idiwọ awọn kikọ afiwe si ṣiṣanwọle. Eyi tumọ si pe nigbati o ba bẹrẹ tabi paarẹ aago kan, o gbọdọ duro titi ti ibeere iṣaaju ti pari fifiranṣẹ ṣaaju fifiranṣẹ atẹle naa. A lo fun imuṣiṣẹpọ àídájú oniyipada.

Abajade

Wo fun ara rẹ: liboffkv.

Ẹgbẹ wa: Raed Romanov, Ivan Glushenkov, Dmitry Kamaldinov, Victor Krapivensky, Vitaly Ivanin.

orisun: www.habr.com

Fi ọrọìwòye kun