Ophunzira asanu ndi atatu adagawira masitolo ofunika kwambiri

Kapena momwe tidalembera laibulale ya kasitomala C ++ ya ZooKeeper, etcd ndi Consul KV

M'dziko la machitidwe ogawidwa, pali ntchito zingapo zomwe zimachitika: kusunga zambiri zamagulu a gulu, kuyang'anira kasinthidwe ka node, kuzindikira mfundo zolakwika, kusankha mtsogoleri. ndi zina. Kuti athetse mavutowa, machitidwe apadera ogawidwa apangidwa - ntchito zogwirizanitsa. Tsopano tikhala ndi chidwi ndi atatu mwa iwo: ZooKeeper, etcd ndi Consul. Pazinthu zonse zolemera za Consul, tiyang'ana pa Consul KV.

Ophunzira asanu ndi atatu adagawira masitolo ofunika kwambiri

M'malo mwake, machitidwe onsewa ndi olekerera zolakwika, masitolo amtengo wapatali okhoza kutsatiridwa. Ngakhale kuti ma data awo ali ndi kusiyana kwakukulu, zomwe tidzakambirana pambuyo pake, amathetsa mavuto omwewo. Mwachiwonekere, ntchito iliyonse yomwe imagwiritsa ntchito ntchito yogwirizanitsa imamangirizidwa ndi imodzi mwa izo, zomwe zingayambitse kufunikira kothandizira machitidwe angapo mu malo amodzi a data omwe amathetsa mavuto omwewo pa ntchito zosiyanasiyana.

Lingaliro lothetsera vutoli linachokera ku bungwe la alangizi la ku Australia, ndipo linagwera kwa ife, gulu laling'ono la ophunzira, kuti tigwiritse ntchito, zomwe ndikunena.

Tinatha kupanga laibulale yomwe imapereka mawonekedwe wamba ogwirira ntchito ndi ZooKeeper, etcd ndi Consul KV. Laibulaleyi imalembedwa mu C ++, koma pali mapulani oti atumize ku zilankhulo zina.

Zitsanzo za Data

Kuti mupange mawonekedwe ofanana pamakina atatu osiyanasiyana, muyenera kumvetsetsa zomwe amafanana komanso momwe amasiyana. Tiyeni tiganizire.

Zojambula Zoo

Ophunzira asanu ndi atatu adagawira masitolo ofunika kwambiri

Makiyi amapangidwa kukhala mtengo ndipo amatchedwa node. Choncho, kwa mfundo mukhoza kupeza mndandanda wa ana ake. Ntchito zopanga znode (pangani) ndikusintha mtengo (setData) zimalekanitsidwa: makiyi omwe alipo okha amatha kuwerengedwa ndi kusinthidwa. Mawotchi amatha kulumikizidwa ndi ntchito zowunika kukhalapo kwa node, kuwerenga phindu, ndikupeza ana. Watch ndi choyambitsa kamodzi chomwe chimayaka pomwe mtundu wa data yofananira pa seva usintha. Ephemeral node amagwiritsidwa ntchito kuti azindikire zolephera. Amamangirizidwa ku gawo la kasitomala amene adawalenga. Wogula akatseka gawo kapena kusiya kudziwitsa ZooKeeper za kukhalapo kwake, ma node awa amachotsedwa. Zochita zosavuta zimathandizidwa - machitidwe omwe onse amapambana kapena kulephera ngati izi sizingatheke kwa chimodzi mwazo.

etcd

Ophunzira asanu ndi atatu adagawira masitolo ofunika kwambiri

Omwe akupanga dongosololi adauziridwa momveka bwino ndi ZooKeeper, motero adachita chilichonse mosiyana. Palibe utsogoleri wa makiyi, koma amapanga seti yolembedwa motsatira mawu. Mutha kupeza kapena kuchotsa makiyi onse amtundu wina. Kapangidwe kameneka kangawonekere kwachilendo, koma kwenikweni kamvekedwe kake, ndipo kawonedwe kaulamuliro kamatha kutsanziridwa mosavuta kudzera mu izo.

etcd ilibe ntchito yofananiza-ndi-kuyika, koma ili ndi china chake chabwinoko: kugulitsa. Zachidziwikire, zilipo m'makina onse atatu, koma zochitika za etcd ndizabwino kwambiri. Amakhala ndi midadada itatu: cheke, kupambana, kulephera. Chida choyamba chili ndi zikhalidwe, chachiwiri ndi chachitatu - ntchito. The transaction ikuchitika atomiki. Ngati mikhalidwe yonse ndi yowona, ndiye kuti chipika chopambana chimachitidwa, apo ayi chipika cholephera chimachitidwa. Mu API 3.3, midadada yopambana ndi yolephera imatha kukhala ndi zochitika zomwe zasungidwa. Ndiko kuti, ndizotheka kupanga ma atomu okhala ndi zokhazikika pafupifupi mulingo wokhazikika wa zisa. Mutha kudziwa zambiri za zomwe macheke ndi magwiridwe antchito alipo zolemba.

Mawotchi aliponso pano, ngakhale ndi ovuta kwambiri ndipo amatha kugwiritsidwanso ntchito. Ndiye kuti, mutatha kuyika wotchi pamakiyi ofunikira, mudzalandira zosintha zonse pamndandandawu mpaka mutaletsa wotchiyo, osati yoyamba yokha. Mu etcd, analogue ya ZooKeeper kasitomala magawo ndi lease.

Kazembe K.V.

Palibenso dongosolo lokhazikika laulamuliro pano, koma Consul imatha kupanga mawonekedwe omwe alipo: mutha kupeza ndikuchotsa makiyi onse ndi prefix yodziwika, ndiye kuti, gwiritsani ntchito "subtree" ya kiyi. Mafunso otere amatchedwa recursive. Kuphatikiza apo, Consul amatha kusankha makiyi omwe alibe zilembo zomwe zatchulidwa pambuyo pa prefix, zomwe zimagwirizana ndi kupeza "ana" nthawi yomweyo. Koma ndi bwino kukumbukira kuti izi ndi maonekedwe a dongosolo hierarchical: n'zotheka kulenga kiyi ngati palibe kholo kapena kuchotsa fungulo ali ana, pamene ana adzapitiriza kusungidwa mu dongosolo.

Ophunzira asanu ndi atatu adagawira masitolo ofunika kwambiri
M'malo mwa mawotchi, Consul akuletsa zopempha za HTTP. Kwenikweni, awa ndi mafoni wamba ku njira yowerengera deta, yomwe, pamodzi ndi magawo ena, mawonekedwe omaliza a data akuwonetsedwa. Ngati ndondomeko yamakono ya deta yofanana pa seva ndi yaikulu kuposa yomwe yatchulidwa, yankho limabwezedwa mwamsanga, mwinamwake - pamene mtengo ukusintha. Palinso magawo omwe amatha kulumikizidwa ku makiyi nthawi iliyonse. Ndizofunikira kudziwa kuti mosiyana ndi etcd ndi ZooKeeper, komwe kuchotsa magawo kumabweretsa kuchotsedwa kwa makiyi ogwirizana, pali njira yomwe gawoli limangokhala losagwirizana nawo. Likupezeka zochita, wopanda nthambi, koma ndi mitundu yonse ya macheke.

Kuziyika zonse pamodzi

ZooKeeper ili ndi mtundu wokhazikika wa data. Mafunso osiyanasiyana omwe amapezeka mu etcd sangathe kutsatiridwa bwino mu ZooKeeper kapena Consul. Poyesera kuphatikizira zabwino kwambiri pazantchito zonse, tidakhala ndi mawonekedwe ofanana ndi mawonekedwe a ZooKeeper ndi izi:

  • mndandanda, chidebe ndi mfundo za TTL osathandizidwa
  • Ma ACL sakuthandizidwa
  • njira yokhazikitsidwa imapanga kiyi ngati kulibe (mu ZK setData imabweretsa cholakwika pankhaniyi)
  • set and cas njira zimasiyanitsidwa (mu ZK ndizofanana)
  • njira yofufutira imachotsa mfundo pamodzi ndi subtree yake (mu ZK kuchotsa kumabweretsa cholakwika ngati node ili ndi ana)
  • Pa kiyi iliyonse pali mtundu umodzi wokha - mtundu wamtengo wapatali (mu ZK alipo atatu)

Kukana kwa mfundo zotsatizana ndi chifukwa chakuti etcd ndi Consul alibe chithandizo chokhazikika kwa iwo, ndipo akhoza kukhazikitsidwa mosavuta ndi wogwiritsa ntchito pamwamba pa mawonekedwe a laibulale.

Kukhazikitsa machitidwe ofanana ndi ZooKeeper pochotsa vertex kungafune kukhala ndi kauntala yosiyana ya ana pa kiyi iliyonse mu etcd ndi Consul. Popeza tidayesetsa kupewa kusunga zidziwitso za meta, zidaganiza zochotsa subtree yonse.

Zobisika za kukhazikitsa

Tiyeni tione mwatsatanetsatane mbali zina za kukhazikitsa laibulale mawonekedwe mu machitidwe osiyanasiyana.

Hierarchy mu etcd

Kusunga mawonedwe apamwamba mu etcd kunakhala imodzi mwantchito zosangalatsa kwambiri. Mafunso osiyanasiyana amapangitsa kuti zikhale zosavuta kupeza mndandanda wa makiyi okhala ndi mawu oyambira. Mwachitsanzo, ngati mukufuna zonse zomwe zimayambira "/foo", mukupempha zosiyanasiyana ["/foo", "/fop"). Koma izi zitha kubweretsanso gawo lonse la kiyi, zomwe sizingakhale zovomerezeka ngati mtengowo ndi waukulu. Poyamba tidakonza zogwiritsa ntchito njira yomasulira, zakhazikitsidwa mu zetcd. Kumaphatikizapo kuwonjezera baiti imodzi kumayambiriro kwa kiyi, yofanana ndi kuya kwa node mumtengo. Ndiroleni ndikupatseni chitsanzo.

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

Kenako pezani ana onse achinsinsi "/foo" zotheka popempha osiyanasiyana ["u02/foo/", "u02/foo0"). Inde, mu ASCII "0" imayima pambuyo pake "/".

Koma momwe mungagwiritsire ntchito kuchotsa vertex mu nkhani iyi? Zikuoneka kuti muyenera kuchotsa onse osiyanasiyana a mtunduwo ["uXX/foo/", "uXX/foo0") kwa XX kuchokera ku 01 mpaka FF. Ndiyeno tinathamangira chiwerengero cha ntchito mkati mwa malonda amodzi.

Zotsatira zake, njira yosavuta yosinthira makiyi idapangidwa, yomwe idapangitsa kuti zitheke kugwiritsa ntchito bwino kuchotsa fungulo ndikupeza mndandanda wa ana. Ndikokwanira kuwonjezera khalidwe lapadera pamaso pa chizindikiro chomaliza. Mwachitsanzo:

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

Ndiye deleting kiyi "/very" kusanduka kufufutidwa "/u00very" ndi range ["/very/", "/very0"), ndi kupeza ana onse - mu pempho la makiyi osiyanasiyana ["/very/u00", "/very/u01").

Kuchotsa kiyi mu ZooKeeper

Monga ndanenera kale, mu ZooKeeper simungathe kuchotsa node ngati ili ndi ana. Tikufuna kuchotsa kiyi pamodzi ndi subtree. Kodi nditani? Timachita zimenezi ndi chiyembekezo. Choyamba, timadutsa mobwerezabwereza, ndikupeza ana a vertex iliyonse ndi funso losiyana. Kenaka timapanga malonda omwe amayesa kuchotsa ma node onse a subtree mu dongosolo lolondola. Zachidziwikire, kusintha kumatha kuchitika pakati pa kuwerenga kamphindi kakang'ono ndikuchotsa. Pankhaniyi, ntchitoyo idzalephera. Komanso, subtree ikhoza kusintha panthawi yowerengera. Pempho la ana a node yotsatira likhoza kubwezera cholakwika ngati, mwachitsanzo, node iyi yachotsedwa kale. Muzochitika zonsezi, timabwereza ndondomeko yonse kachiwiri.

Njirayi imapangitsa kuchotsa chinsinsi kukhala chosagwira ntchito ngati ili ndi ana, ndipo makamaka ngati ntchitoyo ikupitiriza kugwira ntchito ndi subtree, kuchotsa ndi kupanga makiyi. Komabe, izi zidatithandiza kupewa kusokoneza kugwiritsa ntchito njira zina mu etcd ndi Consul.

khalani mu ZooKeeper

Mu ZooKeeper pali njira zosiyana zomwe zimagwira ntchito ndi mtengo wamtengo (pangani, fufutani, getChildren) ndi zomwe zimagwira ntchito ndi deta mu node (setData, getData) Komanso, njira zonse zimakhala ndi zovomerezeka zokhazikika: kulenga kudzabweretsa zolakwika ngati node ili kale kale. idapangidwa, kufufuta kapena setData - ngati kulibe. Tinafunikira njira yokhazikitsidwa yomwe ingatchulidwe popanda kuganizira za kukhalapo kwa kiyi.

Njira imodzi ndikutenga njira yachiyembekezo, monga kufufuta. Onani ngati node ilipo. Ngati ilipo, imbani setData, apo ayi pangani. Ngati njira yomaliza idabweza cholakwika, bwerezaninso. Chinthu choyamba kudziwa ndi chakuti kuyesa kukhalapo kulibe phindu. Mutha kuyimba nthawi yomweyo kulenga. Kumaliza bwino kudzatanthauza kuti nodeyo kulibe ndipo idapangidwa. Kupanda kutero, kupanga kudzabwezera cholakwika choyenera, pambuyo pake muyenera kuyimbira setData. Zachidziwikire, pakati pa mafoni, vertex ikhoza kuchotsedwa ndi kuyimba kopikisana, ndipo setData ingabweretsenso cholakwika. Pachifukwa ichi, mutha kubwerezanso, koma kodi ndizoyenera?

Ngati njira zonse ziwiri zimabweretsa cholakwika, ndiye tikudziwa motsimikiza kuti kuchotsedwa kopikisana kunachitika. Tiyerekeze kuti kufufutidwa kunachitika pambuyo poyimba foni. Ndiye tanthauzo lililonse lomwe tikuyesera kukhazikitsa lafufutika kale. Izi zikutanthauza kuti titha kuganiza kuti seti idachitidwa bwino, ngakhale palibe chomwe chidalembedwa.

Zambiri zaukadaulo

M'chigawo chino tikhala ndi nthawi yopuma kuchokera ku machitidwe ogawidwa ndikulankhula za coding.
Chimodzi mwazofunikira kwambiri kwa kasitomala chinali nsanja: chimodzi mwazinthuzo ziyenera kuthandizidwa pa Linux, MacOS ndi Windows. Poyambirira, tidapangira Linux yokha, ndikuyamba kuyesa pamakina ena pambuyo pake. Izi zinayambitsa mavuto ambiri, omwe kwa nthawi ndithu sankadziwika bwino momwe angayankhire. Zotsatira zake, mautumiki onse atatu ogwirizira tsopano akuthandizidwa pa Linux ndi MacOS, pomwe Consul KV yokha imathandizidwa pa Windows.

Kuyambira pachiyambi, tinkayesetsa kugwiritsa ntchito malaibulale okonzedwa kale kuti tipeze ntchito. Pankhani ya ZooKeeper, kusankha kudagwa ZooKeeper C++, zomwe pamapeto pake zidalephera kuphatikiza pa Windows. Izi, komabe, sizodabwitsa: laibulaleyi ili ngati linux-only. Kwa Consul njira yokhayo inali ppconsul. Thandizo linayenera kuwonjezeredwa kwa izo magawo и zochita. Kwa etcd, laibulale yathunthu yochirikiza mtundu waposachedwa wa protocol sinapezeke, kotero ife mophweka opangidwa grpc kasitomala.

Kutengera mawonekedwe a asynchronous laibulale ya ZooKeeper C ++, tidaganiza zokhazikitsanso mawonekedwe asynchronous. ZooKeeper C++ imagwiritsa ntchito zoyambira zamtsogolo / zolonjeza pa izi. Mu STL, mwatsoka, amagwiritsidwa ntchito modzichepetsa kwambiri. Mwachitsanzo, ayi ndiye njira, yomwe imagwiritsa ntchito ntchito yodutsa pazotsatira zamtsogolo ikadzapezeka. Kwa ife, njira yotereyi ndiyofunikira kuti mutembenuzire zotsatira kukhala mtundu wa laibulale yathu. Kuti tithane ndi vutoli, tidayenera kukhazikitsa dziwe lathu losavuta, chifukwa popempha kasitomala sitikanatha kugwiritsa ntchito malaibulale olemera a chipani chachitatu monga Boost.

Kukhazikitsa kwathu ndiye kumagwira ntchito motere. Akaitanidwa, malonjezo owonjezera / awiri amtsogolo amapangidwa. Tsogolo latsopano limabwezeretsedwa, ndipo lomwe ladutsa limayikidwa limodzi ndi ntchito yofananira ndi lonjezo lowonjezera pamzere. Ulusi wochokera padziwe umasankha zam'tsogolo zingapo pamzere ndikuwasankha pogwiritsa ntchito wait_for. Zotsatira zikapezeka, ntchito yofananira imayitanidwa ndipo mtengo wake wobwerera umaperekedwa kulonjezano.

Tidagwiritsa ntchito dziwe lomwelo kuti tiyankhe mafunso kwa etcd ndi Consul. Izi zikutanthauza kuti ma library omwe ali pansi amatha kupezeka ndi ulusi wosiyanasiyana. ppconsul siwotetezeka ulusi, chifukwa chake kuyimbirako kumatetezedwa ndi maloko.
Mutha kugwira ntchito ndi grpc kuchokera ku ulusi wambiri, koma pali zobisika. Mu etcd mawotchi amayendetsedwa kudzera pa mitsinje ya grpc. Awa ndi njira ziwiri zotumizira mauthenga amtundu wina. Laibulale imapanga ulusi umodzi wamawotchi onse ndi ulusi umodzi womwe umakonza mauthenga obwera. Chifukwa chake grpc imaletsa zolemba zofanana kuti ziziyenda. Izi zikutanthauza kuti poyambitsa kapena kuchotsa wotchi, muyenera kudikirira mpaka pempho lapitalo litamaliza kutumiza musanatumize ina. Timagwiritsa ntchito kulunzanitsa zosintha zokhazikika.

Zotsatira

Dziwoneni nokha: libofkv.

Gulu lathu: Raed Romanov, Ivan Glushenkov, Wotchedwa Dmitry Kamaldinov, Victor Krapivensky, Vitaly Ivanin.

Source: www.habr.com

Kuwonjezera ndemanga