Quinque discipuli et tres key-valorem distribuit stores

Vel quomodo scripsimus librariam clientem C++ pro ZooKeeper, etc

In mundo systemata dispertito plura officia typica sunt: ​​informationes recondere de compositione botri, figuram nodis disponere, notos vitiosos deprehendere, ducem eligens. et alii. Ad has quaestiones solvendas, systemata specialia distributa creata sunt - officia coordinationis. Nunc tres ex his interesse erimus: ZooKeeper, etc et Consul. Ex omnibus consularibus locupletissimis functionibus intendunt consulem KV.

Quinque discipuli et tres key-valorem distribuit stores

Essentialiter omnia haec systemata culpae tolerabiles, clavium pretii linearizabiles sunt. Etsi eorum notitiae exempla habent differentias significantes, de quibus postea dicemus, easdem problemata practica solvunt. Ut patet, unaquaeque applicatio quae coordinatione utitur, uni ex illis ligatur, quae ad necessitatem perducit ut plures systemata in uno centro notati, quae eadem problemata pro diversis applicationibus solvunt.

Ideam hanc solvendi quaestionem in procuratione Australiae consulentis nata est, et nobis obvenit, parva societas studiosorum, ut eam efficiamus, de qua loquor.

Bibliothecam creare potuimus, quae commune commercium praebet ad operandum cum ZooKeeper, etc et Consul KV. Bibliotheca scripta est in C++, sed consilia ad portandum aliis linguis sunt.

Data exempla

Commune commercium evolvere pro tribus diversis systematibus, debes intelligere quid commune habeant et quomodo differant. Sit instar est.

zookeeper

Quinque discipuli et tres key-valorem distribuit stores

Claves ordinantur in arborem, et vocantur nodi. Proinde pro nodo liberorum suorum enumerationem licebit. Operationes znodae creandi et mutandi valorem (setData) separantur: claves tantum existentium legi et mutari possunt. Vigiliae adjungi possunt operationibus recognitionis existentiae nodi, lectionis valoris et prolis acquirendi. Vigilia est unum tempus felis ut incendat cum versio datorum correspondentium in calculonis mutationibus. Nodi ephemerales delicta deprehendere solent. Adstringuntur ad sessionem clientis qui eos creavit. Cum cliens sessionem claudit vel notificans ZooKeeper sui existentiae claudit, hi nodi automatice deleti sunt. Simplicibus negotiis sustentantur - copiarum operationum quae vel omnes succedunt vel deficiunt, si hoc saltem unum ex eis fieri non potest.

etc

Quinque discipuli et tres key-valorem distribuit stores

Tincimenta huius systematis a ZooKeeper clare inspirata sunt, ideoque omnia aliter fecerunt. Clavium hierarchia non est, sed formant lexicographice ordinatum. Potes accipere vel delere omnes claves ad certum range pertinentes. Haec structura mirum videri potest, sed re ipsa significativa, et sententia hierarchica facile per eam aemulari potest.

etc. non habet vexillum comparativum operationis, sed habet aliquid melius: transactions. Nempe in omnibus tribus systematibus existunt, sed res maxime bonae etc. Ex tribus caudices constant: repressio, successus, defectus. Primus clausus condiciones condiciones continet, secunda et tertia operationes. Res atomically supplicium est. Si omnes condiciones verae sunt, successus interclusus efficitur, alioquin scandalum defectus exsecutus est. In API 3.3, res gestae et defectus caudices nidificantes continere possunt. Hoc est, fieri potest ut atomice exsequantur structurae conditionales paene arbitrariae nidificandi. Plus discere potes quid coercet et operationes exsistunt documentum.

Vigiliae hic quoque existunt, tametsi paulo magis implicatae sunt et reusable. Hoc est, custodias in clavibus inclusas, omnes updates in hoc ambitu recipies donec vigilias destruas, et non solum primam. In etcd, analogus sessionum clientium ZooKeeper sunt addicit.

Consularis K.V.

Nulla etiam structurae hierarchicae strictae hic est, sed Consul speciem creare potest ut existat: omnes claves obtinere potes ac delere cum praefixo praefixo, id est cum "subtree" clavium operari. Huiusmodi interrogationes recursivae dicuntur. Consul praeterea claves tantum eligere potest quae indolem definitam non continent post praepositionem, quae respondet ad immediatam "filios" obtinendos. Sed memoria dignum est hanc ipsam speciem structurae hierarchicae esse: omnino possibilis est clavem creare, si parens eius non est, vel clavem quae filios habet deleat, dum filii in systemate servabuntur.

Quinque discipuli et tres key-valorem distribuit stores
Instead of watches, Consul petitiones HTTP interclusit. Essentialiter haec ordinaria vocat notitia lectionis methodi, cui, una cum aliis parametris, ultima notarum notitiarum versio indicatur. Si currens versio datorum respondens servo maior est quam definitum, responsio statim redditur, aliter - cum valor mutatur. Sunt etiam sessiones quae quovis tempore clavibus adjungi possunt. Notatu dignum est quod dissimilis etcd et ZooKeeper, ubi deletionum sessiones deletionem clavium adiunctorum ducit, modus est in quo sessionis ab illis simpliciter non vincitur. Praesto transactionssine ramis, sed omni genere cohibet.

Omnia simul ponens

ZooKeeper accuratissima notitia exemplar habet. Expressio range quaestionis in etcd in promptu non potest efficaciter aemulari vel Zookeeper vel Consul. Conamur optimum ab omnibus officiis accipere, cum interface zooKeeper fere aequivalens finivimus cum exceptionibus significantibus sequentibus:

  • sequentia, continens et nodos TTL non valet
  • ACLs non praebetur
  • statuto methodo clavem creat si non existit (in ZK setData error redit in hoc casu)
  • set et cas modi separantur (in ZK sunt idem essentialiter);
  • vim extermina modum delet nodi cum sua subtree (per ZK delete redit error si nodi liberos habet)
  • Utraque clavis una tantum est versio - valor version (in ZK tria sunt)

Rejectio nodis sequentium ex eo, quod etcd et Consul in subsidium eis non aedificaverunt, et facile per utentem super instrumenti bibliothecae consequentis perfici possunt.

Mores exsequendi similes ZooKeeper, cum verticem delendo requireret ut singularem clavem in etcd et Consul conservaret. Cum meta informationes vitare conati sumus, totum subtree delere placuit.

Subtilitates exsecutionis

Propius inspiciamus aliquas rationes exsequendi bibliothecam interfaciendi in diversis systematibus.

Hierarchia anno etc

Sustentans hierarchicam sententiam in etc., evasit unum ex praecipuis officiis iucundissimis. Ambitus inquisitiones facilem faciunt ut elenchum clavium cum praefixo praepositione recuperare possit. Exempli gratia, si opus est omnia quae incipit "/foo"Tu rogas pro range ["/foo", "/fop"). Sed hoc totum clavem subtriam redderet, quae si magna arbuscula non placeret. In primis cogitavimus mechanismum translationis clavis uti; implemented in zetcd. Involvit unum byte in principio clavem addens, altitudine nodi in arbore. Demus vobis exemplum.

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

Tum ut omnes immediatam filios a key "/foo" posse petens rhoncus ["u02/foo/", "u02/foo0"). Ita in ASCII "0" stat post "/".

Sed quomodo vertex in hoc casu remotionem aggredi potest? Evenit ut omnes ordines generis delere debes ["uXX/foo/", "uXX/foo0") pro XX ab 01 ad FF. Et incurrimus operatio numerus modus intra unam rem.

Quam ob rem ratio simplex clavis conversionis inventa est, quae effecit ut clavem clavem et deletam et indicem filiorum obtinentem efficaciter efficeret. Ante ultimum signum satis est peculiarem indolem addere. Exempli gratia:

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

Deletis clavem "/very" vertit in deletionem "/u00very" et range ["/very/", "/very0")atque omnes liberos - in petitione clavium a range ["/very/u00", "/very/u01").

Removere key in ZooKeeper

Ut iam dixi, in ZooKeeper nodi delere non potes si liberos habet. Volumus delere clavem una cum subtree. Quid faciam? Spe hoc facimus. Primum subtriam recursivem percurrimus, obtinens cujusvis verticem filios singulari interrogatione. Tunc transactionem construimus quae omnes nodos subtree in recto ordine delere conatur. Scilicet, mutationes inter legendum subtree et delendo fieri possunt. In hoc casu res gesta deficiet. Praeterea subtree variare possunt inter legendum processum. Petitio prolis nodi proximi errorem remittere potest, exempli gratia, haec nodi iam deleta est. In utroque casu totum denuo iteramus.

Hic accessus delendo clavem valde inefficacem facit si liberos habet, et multo magis si applicatio pergit opus cum subtree, deletis et creandis clavibus. Sed hoc nobis permisit vitare implicationem aliorum methodorum in etcd et Consul.

set in ZooKeeper

In ZooKeeper variae sunt methodi, quae cum ligno structurae (creare, delere, getChildren) operantur et cum notitia in nodis (setData, getData) operantur. Praeterea omnes methodi stricte condiciones habent: crea errorem reddet si iam nodi creata, vel setData dele - si iam non est. Statuto nobis opus est methodo, quae sine cogitatione praesentiae clavis dici potest.

Una optio est eu ac- cipiendi, ut cum deletione. Reprehendo si nodi exstat. Si est, voca setData, aliter crea. Si ultima methodus errorem reddiderit, novo denuo repetat. Primum notandum est quod probatio existentia vana est. Statim vocare potes creare. Prosperam perfectionem vult intelligi quod nodi non fuit et creata est. Alioquin creare convenientem reddet errorem, post quem setData vocare debes. Scilicet, inter vocat, vertex a certandi vocatione deleri potuit, et setData etiam errorem reddere. Hoc in casu iterum facere potes, sed est tanti?

Si utraeque modi errorem reddunt, deletionem certatim factam esse certo scimus. Fingamus hanc deletionem factam vocato statuto. Deinde quicquid significare conamur, iam abrasum est. Id quod feliciter exsecutioni mandare possumus, etiam si re vera nihil scriptum est.

More technicae singulae

In hac sectione intermissiones systematum distributorum accipiemus et de coding disputabimus.
One of the customer's main requisita fuit crucis suggestus: saltem unum e officiis in Linux, MacOS et Windows sustinendum est. Initio tantum Linux elaboravimus et postea in aliis systematibus tentare coepimus. Quae res multas difficultates attulit, quae per aliquod tempus omnino ignotae erant adeundi. Quam ob rem omnes tres servitia coordinatio Linux et MacOS nunc sustinentur, cum solus Consul KV in Windows sustinetur.

A primordio bibliothecas ad officia accessus paratas uti conati sumus. In casu ZooKeeper electio cecidit ZooKeeper C++quae tandem in Windows compilare neglexit. Hoc tamen mirum non est: bibliotheca tantum linux collocata est. Nam consul solum optio erat ppconsul. Auxilio addendum est sessiones и transactions. Nam etcd, bibliotheca plena emissa sustinens versionem ultimam protocolli non inventa est, sic simpliciter. generatae grpc clientis.

Asynchrono instrumenti ZooKeeper C++ bibliothecae incitati, decrevimus etiam asynchronum interfaciem efficere. Zookeeper C ++ futuri promissionis primitivis utitur ad hoc. In STL, proh dolor, valde modeste implentur. Exempli gratia, no tum modumquod pertinet ad effectum futurum, cum praesto fit. In nobis, talis methodus exitum in nostrae bibliothecae convertendi causa necesse est. Ad hoc problema ut circumigendo, piscinam sequelam simplicem ad effectum deducendi habuimus, quia rogante emptore gravi tertio-partium bibliothecis uti non potuimus ut Boost.

Nostra igitur exsecutio hoc modo operatur. Cum dicitur, adiectio promissionis/paris futurae creatur. Novus futurum redditur, et praeteritus ponitur una cum debita functione et addita promissione in queue. Filum e stagno plura futura ex queue deligit et facit ea utendo opperiri. Cum effectus in promptu erit, munus congruens vocatur et reditus eius ad promissionem transmittitur.

Eisdem piscinis filo usi sumus ad inquisitiones faciendas ad etc. et ad Consulem. Id modo bibliothecae subiectae multiplicibus sequelis variae accessi possunt. ppconsul non stamina tuta vocat, comis muniuntur.
Ex pluribus filis grpc potes operari, sed sunt argutiae. In etcd vigilias grpc fluminum compleantur via. Hae canales bidirectiones sunt pro nuntiis cuiusdam generis. Bibliotheca unum linum omnibus vigiliis conficit et unum linum quod epistulae ineuntes fiunt. Sic grpc vetat parallelus, ut scribit Fiuvius. Hoc significat cum vigilia initializing vel delendo, exspectandum est donec prior petitio praemissam expleverit ante missionem proximam. Utimur pro synchronisation conditionalis variables.

exitum

vide te ipsum; liboffkv.

Our Team: Raed Romanov, Ioannes Glushenkov, Dmitry Kamaldinov, Victor Krapivensky, Vitaly Ivanin.

Source: www.habr.com

Add a comment