Shan arday iyo saddex dukaamada qiimaha muhiimka ah ayaa loo qaybiyay

Ama sida aan ugu qornay macmiilka C++ maktabadda ZooKeeper, etcd iyo Qunsulka KV

Dunida nidaamyada qaybsan, waxaa jira dhowr hawlood oo caadi ah: kaydinta macluumaadka ku saabsan isku dhafka kooxda, maaraynta qaabeynta qanjidhada, ogaanshaha qanjidhada cilladaysan, doorashada hoggaamiye iyo kuwo kale. Si loo xalliyo dhibaatooyinkan, habab gaar ah oo loo qaybiyay ayaa la sameeyay - adeegyada isuduwidda. Hadda waxaan xiisayn doonaa saddex ka mid ah: ZooKeeper, iwm iyo Qunsulka. Dhammaan shaqada hodanka ah ee Qunsulka, waxaan diiradda saari doonaa Qunsulka KV.

Shan arday iyo saddex dukaamada qiimaha muhiimka ah ayaa loo qaybiyay

Nuxur ahaan, dhammaan nidaamyadani waa kuwa u dulqaadan kara qaladka, bakhaarrada qiimaha muhiimka ah oo toosan. Inkasta oo moodooyinkooda xogtu ay leeyihiin kala duwanaansho muhiim ah, kuwaas oo aan ka hadli doono dambe, waxay xalliyaan isla dhibaatooyinka la taaban karo. Sida iska cad, codsi kasta oo isticmaala adeegga isku-dubaridku wuxuu ku xidhan yahay mid ka mid ah, taas oo keeni karta baahida loo qabo in lagu taageero dhowr nidaamyo hal xarun xog ah oo xalliya dhibaatooyinka isku midka ah ee codsiyada kala duwan.

Fikradda lagu xallinayo dhibaatadan waxay ka timid hay'ad la-talin Australia ah, waxayna nagu dhacday annaga, koox yar oo arday ah, si aan u hirgelino, taas oo ah waxa aan ka hadli doono.

Waxaan ku guuleysanay inaan abuurno maktabad bixisa is dhexgal guud oo lagula shaqeeyo ZooKeeper, iwm iyo Qunsulka KV. Maktabadu waxay ku qoran tahay C++, laakiin waxaa jira qorshooyin lagu wareejinayo luqado kale.

Qaababka Xogta

Si aad u horumariso is-dhexgal guud oo loogu talagalay saddex nidaam oo kala duwan, waxaad u baahan tahay inaad fahamto waxa ay wadaagaan iyo sida ay u kala duwan yihiin. Aynu ogaano.

Zookeeper

Shan arday iyo saddex dukaamada qiimaha muhiimka ah ayaa loo qaybiyay

Furayaasha waxaa loo habeeyey geed waxaana loo yaqaannaa nodes. Sidaas awgeed, noodhka waxaad heli kartaa liiska carruurtiisa. Hawlgallada abuurista znode (abuurista) iyo beddelka qiimaha (setData) waa la kala saaray: furayaasha jira oo keliya ayaa la akhriyi karaa oo la beddeli karaa. Saacadaha waxaa lagu lifaaqi karaa hawlgallada hubinta jiritaanka noode, akhrinta qiimaha, iyo helitaanka carruurta. Watch waa kiciye hal mar ah oo guba marka nooca xogta u dhiganta ee server-ka ay isbedesho. Nodes Ephemeral waxaa loo isticmaalaa in lagu ogaado guuldarrooyinka. Waxay ku xidhan yihiin fadhiga macmiilka iyaga abuuray. Marka macmiilku xidho fadhiga ama joojiyo ogeysiinta ZooKeeper jiritaankiisa, noodhadhkan si toos ah ayaa loo tirtiraa. Wax kala iibsiga fudud waa la taageeraa - hawlgalo kala duwan oo midkood guulaysto ama guuldarraysto haddii aanay taasi suurtogal ahayn ugu yaraan mid ka mid ah.

iwm

Shan arday iyo saddex dukaamada qiimaha muhiimka ah ayaa loo qaybiyay

Horumarinta nidaamkan waxaa si cad u dhiirigeliyay ZooKeeper, sidaas darteed wax walba si ka duwan ayay u sameeyeen. Ma jiro kala sareynta furayaasha, laakiin waxay sameeyaan hab qaamuus ahaan la dalbaday. Waxaad heli kartaa ama tirtiri kartaa dhammaan furayaasha ka tirsan qayb gaar ah. Qaab-dhismeedkani wuxuu u ekaan karaa mid qariib ah, laakiin dhab ahaantii waa mid aad u qeexan, waxaana si fudud loogu dayan karaa aragtida kala sareynta.

iwm Dabcan, waxay ku jiraan dhammaan saddexda nidaam, laakiin macaamilka iwm ayaa si gaar ah u wanaagsan. Waxay ka kooban yihiin saddex qaybood: jeeg, guul, guuldarro. Qeybta koowaad waxay ka kooban tahay shuruudo, kan labaad iyo saddexaad - hawlgallada. Wax kala iibsiga waxa loo fuliyaa atomi ahaan. Haddii dhammaan shuruudaha ay run yihiin, markaa xannibaadda guusha ayaa la fuliyaa, haddii kale xannibaadda fashilka ayaa la fuliyay. Gudaha API 3.3, baloogyada guusha iyo guuldarrada waxay ka koobnaan karaan macaamil ganacsi Taasi waa, waxaa suurtogal ah in si atomiyan ah loo fuliyo dhismooyin shuruudaysan oo ku dhow heer buul-saarid aan sabab lahayn. Waxaad wax badan ka baran kartaa waxa jeegaga iyo hawlgallada jira dukumentiyo.

Daawashada ayaa sidoo kale ka jira halkan, in kasta oo ay ka yara adag yihiin oo dib loo isticmaali karo. Taasi waa, ka dib markaad ku rakibto saacad ku taal kala duwanaanta muhiimka ah, waxaad heli doontaa dhammaan cusbooneysiinta xadkan ilaa aad ka noqoto saacadda, oo ma aha oo keliya kan ugu horreeya. IWM, analoogga kalfadhiyada macmiilka ee ZooKeeper waa heshiisyo.

Qunsulka K.V.

Sidoo kale ma jiro qaab dhismeed adag oo halkan ah, laakiin Qunsulka ayaa abuuri kara muuqaalka uu jiro: waxaad heli kartaa oo tirtiri kartaa dhammaan furayaasha horgalaha la cayimay, taas oo ah, la shaqeyso "geed-hoosaadka" furaha. Weydiimaha noocaan ah waxaa loo yaqaannaa dib-u-eegis. Intaa waxaa dheer, Qunsulka wuxuu dooran karaa furayaasha kaliya ee aan ku jirin dabeecadda la cayimay ka dib horgalaha, taas oo u dhiganta helitaanka "carruur" degdeg ah. Laakiin waxaa habboon in la xasuusto in tani ay si sax ah u tahay muuqaalka qaabdhismeedka kala sareynta: waa suurtagal in la abuuro furaha haddii waalidku aanu jirin ama la tirtiro furaha carruurta leh, halka carruurtu ay sii wadi doonaan in lagu kaydiyo nidaamka.

Shan arday iyo saddex dukaamada qiimaha muhiimka ah ayaa loo qaybiyay
Halkii saacadaha, Qunsulka ayaa xannibay codsiyada HTTP. Nuxur ahaan, kuwani waa wicitaano caadi ah oo loogu talagalay habka akhriska xogta, kuwaas oo, oo ay weheliyaan qiyaaso kale, nuqulkii ugu dambeeyay ee xogta ayaa la tilmaamay. Haddii nooca hadda ee xogta u dhiganta ee server-ka uu ka weyn yahay midka la cayimay, jawaabta isla markiiba waa la soo celiyaa, haddii kale - marka qiimaha isbeddelo. Waxa kale oo jira fadhiyo lagu xidhi karo furayaasha wakhti kasta. Waxaa xusid mudan in ka duwan etcd iyo ZooKeeper, halkaas oo tirtiridda fadhiyada keenaysaa in la tirtiro ee furayaasha la xidhiidha, waxaa jira hab kaas oo kalfadhigu si fudud un link iyaga ka. La heli karo wax kala iibsiga, oo aan lahayn laamo, laakiin leh dhammaan noocyada jeegagga.

Isku soo wada duuboo

ZooKeeper ayaa leh qaabka xogta ugu adag. Weydiimaha kala duwan ee qeexan ee laga heli karo iwm si wax ku ool ah looguma dayan karo ZooKeeper ama Qunsulka midkood. Isku day in lagu daro kuwa ugu wanaagsan dhammaan adeegyada, waxaan ku soo afjarnay interface ku dhawaad ​​u dhigma interface ZooKeeper oo leh waxyaabaha soo socda ee muhiimka ah:

  • isku xigxiga, weel iyo qanjidhada TTL lama taageero
  • ACLs lama taageero
  • Habka dejisan wuxuu abuuraa fure haddii uusan jirin (ZK setData waxay soo celisaa qalad kiiskan)
  • Hababka loo dhigay iyo kuwa cas waa la kala soocay (ZK asal ahaan waa isku shay)
  • Habka tirtirku wuxuu tirtiraa noodhka oo ay weheliso geed-hoosaadkiisa (ZK tirtirka wuxuu soo celinayaa qalad haddii noodu ay carruur leedahay)
  • Fure kasta waxaa jira hal nooc oo keliya - nooca qiimaha (ee ZK waa saddex ka mid ah)

Diidmada qanjidhada taxanaha ah waxaa sabab u ah xaqiiqda ah in etcd iyo Qunsulka aysan haysan taageero ku dhisan iyaga, waxaana si fudud u hirgelin kara isticmaaluhu dusha sare ee interneedka maktabadda ee ka dhashay.

Hirgelinta habdhaqan la mid ah ZooKeeper marka la tirtirayo vertexka waxay u baahan tahay in la haysto miiska ilmaha ee furaha iwm iyo Qunsulka. Tan iyo markii aan isku daynay inaan ka fogaano kaydinta macluumaadka meta, waxaa la go'aamiyay in la tirtiro dhammaan geed-hoosaadka.

Daahsoonaanshaha fulinta

Aynu si qoto dheer u eegno qaar ka mid ah dhinacyada fulinta interface interface ee hababka kala duwan.

Kala sareynta iwm

Ilaalinta aragtida kala sareynta ee etcd waxay noqotay mid ka mid ah hawlaha ugu xiisaha badan. Weydiimaha kala duwani waxay sahlaysaa in la soo saaro liiska furayaasha oo leh horgale cayiman. Tusaale ahaan, haddii aad u baahan tahay wax kasta oo ka bilaabma "/foo", waxaad codsanaysaa tiro kala duwan ["/foo", "/fop"). Laakiin tani waxay soo celinaysaa dhammaan geed-hoosaadka furaha, taas oo laga yaabo inaan la aqbali karin haddii geed-hoosaadku weyn yahay. Markii hore waxaan qorsheynay inaan isticmaalno habka tarjumaada muhiimka ah, lagu hirgeliyay zetcd. Waxay ku lug leedahay in lagu daro hal byte bilowga furaha, oo la mid ah qoto dheer ee qanjirada geedka. Aan tusaale ku siiyo.

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

Markaa soo hel dhammaan carruurta ugu dhow ee furaha "/foo" suurto gal ah iyadoo codsanaya kala duwan ["u02/foo/", "u02/foo0"). Haa, gudaha ASCII "0" isla markiiba taagan "/".

Laakiin sida loo hirgeliyo ka saarista vertex kiiskan? Waxaa soo baxday inaad u baahan tahay inaad tirtirto dhammaan noocyada kala duwan ee nooca ["uXX/foo/", "uXX/foo0") loogu talagalay XX laga bilaabo 01 ilaa FF. Ka dibna waanu ku dhex yaacnay xadka lambarka hawlgalka gudaha hal macaamil ganacsi.

Natiijo ahaan, nidaam beddelaad furaha fudud ayaa la sameeyay, kaas oo suurtageliyay in si wax ku ool ah loo fuliyo labadaba tirtiridda furaha iyo helitaanka liiska carruurta. Waa ku filan in lagu daro dabeecad gaar ah ka hor calaamadda ugu dambeysa. Tusaale ahaan:

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

Kadibna tirtir furaha "/very" waxay isu beddeshaa tirtirid "/u00very" iyo kala duwanaansho ["/very/", "/very0"), iyo helitaanka dhammaan carruurta - codsiga furayaasha kala duwan ["/very/u00", "/very/u01").

Kasaarida furaha ZooKeeper

Sidaan horeyba u soo sheegay, ZooKeeper ma tirtiri kartid node haddii ay carruur leedahay. Waxaan rabnaa inaan tirtirno furaha oo ay la socdaan geed-hoosaadka. Maxaan sameeyaa? Waxaan tan ku sameyneynaa rajo wanaagsan. Marka hore, waxaan si isdaba joog ah u mareynaa geed-hoosaadka, anagoo heleyna carruurta barx kasta oo leh su'aal gooni ah. Kadibna waxaan dhiseynaa macaamil ganacsi oo isku dayaya inuu tirtiro dhammaan noodaha geedka hoose ee habka saxda ah. Dabcan, isbeddeladu waxay ku dhici karaan akhrinta geed hoosaadka iyo tirtiridda. Xaaladdan oo kale, wax kala iibsigu wuu fashilmi doonaa. Waxaa intaa dheer, geed-hoosaadku wuu isbeddeli karaa inta lagu jiro habka akhriska. Codsiga carruurta qanjirada xigta waxay soo celin kartaa qalad haddii, tusaale ahaan, noodhkan mar hore la tirtiray. Labada xaaladoodba, waxaan ku celineynaa habka oo dhan mar kale.

Habkani waxa uu ka dhigayaa in furaha la tirtiro mid aan waxtar lahayn haddii uu carruur leeyahay, iyo weliba si ka sii badan haddii codsigu sii wado la shaqaynta geed-hoosaadka, tirtiridda iyo abuurista furayaasha. Si kastaba ha ahaatee, tani waxay noo ogolaatay inaan ka fogaano inaan sii adkeyno hirgelinta hababka kale ee etcd iyo Qunsulka.

dhigay ZooKeeper

ZooKeeper waxaa jira habab kala duwan oo la shaqeeya qaab dhismeedka geedka (abuur, tirtir, heliCarruur) iyo kuwa ku shaqeeya xogta noodhka (setData, getData) Waxaa intaa dheer, dhammaan hababka waxay leeyihiin shuruudo adag oo adag: abuurku wuxuu soo celin doonaa qalad haddii noodu horay u leedahay. la abuuray, tirtir ama setData - haddii aanay hore u jirin. Waxaan u baahnay hab go'an oo la odhan karo iyada oo aan laga fikirin joogitaanka furaha.

Mid ka mid ah ikhtiyaarka ayaa ah in la qaato hab rajo leh, sida tirtirka. Hubi haddii udubku jiro. Haddii ay jirto, wac setData, haddii kale samee. Haddii habka ugu dambeeya uu soo celiyo qalad, ku celi mar kale. Waxa ugu horreeya in la xuso waa in imtixaanka jiritaanku uu yahay mid aan macno lahayn. Isla markiiba waxaad wici kartaa Create. Dhamaystirka guusha leh waxay ka dhigan tahay in noodu aanu jirin oo la abuuray. Haddii kale, abuurku wuxuu soo celin doonaa qaladka ku habboon, ka dib markaa waxaad u baahan tahay inaad wacdo setData. Dabcan, inta u dhaxaysa wicitaanada, vertex waxaa lagu tirtiri karaa wicitaan tartamaya, iyo setData waxay sidoo kale soo celin doontaa qalad. Xaaladdan oo kale, waad sameyn kartaa mar kale, laakiin miyay u qalantaa?

Haddii labada habba ay soo celiyaan qalad, markaas waxaan ognahay in si dhab ah loo tirtiray tartanka. Aynu qiyaasno in tirtirkani dhacay ka dib markii la wacay. Markaa macne kasta oo aan isku dayeyno inaan dhidibbada u taagno ayaa mar hore la tirtiray. Tani waxay ka dhigan tahay inaan u qaadan karno in si guul leh loo fuliyay, xitaa haddii dhab ahaantii aan waxba la qorin.

Faahfaahin dheeraad ah oo farsamo

Qeybtaan waxaan ka nasan doonaa nidaamyada la qeybiyay waxaanan ka hadli doonaa codeynta.
Mid ka mid ah shuruudaha ugu muhiimsan ee macaamilka ayaa ahaa iskutallaab: ugu yaraan mid ka mid ah adeegyada waa in lagu taageero Linux, MacOS iyo Windows. Markii hore, waxaan u sameynay Linux oo kaliya, waxaanan bilownay tijaabinta nidaamyada kale markii dambe. Tani waxay keentay dhibaatooyin badan, kuwaas oo in muddo ah aan si buuxda loo fahmin sida loo wajaho. Natiijo ahaan, dhammaan saddexda adeeg ee isuduwidda ayaa hadda lagu taageeraa Linux iyo MacOS, halka Qunsulka KV oo keliya laga taageeray Windows.

Bilowgii hore, waxaan isku daynay inaan isticmaalno maktabado diyaarsan si aan u helno adeegyada. Xaaladda ZooKeeper, doorashadu way ku dhacday ZooKeeper C++, kaas oo aakhirkii ku guul daraystay in lagu ururiyo Windows. Tani, si kastaba ha ahaatee, maaha wax la yaab leh: maktabadda waxay u taagan tahay Linux-kaliya. Qunsulka doorashada kaliya ayaa ahayd ppconsul. Waxay ahayd in taageero lagu kordhiyo fadhiyada и wax kala iibsiga. Wixii etcd ah, maktabad dhamaystiran oo taageerta nooca ugu dambeeyay ee borotokoolka lama helin. curiyay grpc macmiilka.

Waxaa dhiirigeliyay is-dhex-galka asynchronous-ka ee maktabadda ZooKeeper C++, waxaan go'aansanay inaan sidoo kale hirgelinno is-dhexgal asynchronous ah. ZooKeeper C++ waxay u isticmaashaa mustaqbalka/ballanqaadka hore ee tan. Gudaha STL, nasiib daro, waxaa loo fuliyaa si xishood leh. Tusaale ahaan, maya ka dibna habka, taas oo khusaysa shaqada la gudbiyay natiijada mustaqbalka marka ay noqoto mid la heli karo. Xaaladeena, habkan oo kale ayaa lagama maarmaan u ah in natiijada loo beddelo qaabka maktabadda. Si aan uga gudubno dhibaatadan, waxay ahayd inaan hirgelinno barkada dunta fudud ee noo gaar ah, maadaama codsiga macaamilka aynaan isticmaali karin maktabado culus oo dhinac saddexaad ah sida Boost.

Fulinteenu markaa waxay u shaqaysaa sidan. Marka loo yeedho, ballan/lamaan mustaqbalka ah oo dheeraad ah ayaa la abuuraa. Mustaqbalka cusub waa la soo celiyaa, kii la gudbayna waxaa la dhigayaa iyada oo la socota shaqada u dhiganta iyo ballan dheeraad ah oo safka ku jira. Dunta barkada ka soo baxda ayaa safka ka doorata mustaqbalka dhawr ah oo ka codayn doona iyaga oo isticmaalaya wait_for. Marka natiijadu noqoto mid la heli karo, shaqada u dhiganta ayaa loo yeeraa oo qiimihiisu soo laabashada ayaa loo gudbiyaa ballanta.

Waxaan u isticmaalnay isla barkada dunta si aan u fulino weydiimaha iwm iyo Qunsulka. Tani waxay ka dhigan tahay in maktabadaha hoose lagu geli karo tiro badan oo kala duwan. ppconsul ma aha dun ammaan ah, sidaas darteed wicitaanada loo soo diro waxaa ilaaliya qufullo.
Waxaad kula shaqayn kartaa grpc ka timaadda dunta badan, laakiin waxaa jira wax aan macquul ahayn. Saacadaha iwmd waxaa lagu hirgeliyaa durdurrada grpc. Kuwani waa kanallo laba jiho ah oo loogu talagalay farriimaha nooc gaar ah. Maktabadu waxay u samaysaa hal dun dhammaan saacadaha iyo hal dun oo socodsiisa fariimaha soo socda. Markaa grpc waxay mamnuucday qoraallada isbar-bar socda ee qulqulka. Tani waxay ka dhigan tahay marka bilawga ama tirtirka saacadda, waa inaad sugtaa ilaa codsigii hore uu dhammeeyo diritaanka ka hor intaadan dirin kan ku xiga. Waxaan u isticmaalnaa isku xidhka doorsoomayaal shuruudaysan.

Natiijada

U fiirso naftaada: liboffkv.

Kooxdayada: Raed Romanov, Ivan Glushenkov, Dmitry Kamaldinov, Victor Krapvensky, Vitaly Ivanin.

Source: www.habr.com

Add a comment