E rima nga akonga me nga toa e toru kua tohatohahia

Me pehea ranei ta matou tuhi i tetahi whare pukapuka C++ kiritaki mo ZooKeeper, etcd me Consul KV

I roto i te ao o nga punaha tohatoha, he maha nga mahi angamaheni: te penapena korero mo te hanganga o te tautau, te whakahaere i te whirihoranga o nga pona, te kimi i nga pona hapa, te kowhiri i tetahi kaiarahi. me etahi atu. Hei whakaoti i enei raruraru, kua hangaia nga punaha tohatoha motuhake - ratonga ruruku. Inaianei ka aro tatou ki te toru o enei: ZooKeeper, etcd me Consul. Mai i nga mahi whai kiko katoa a Consul, ka aro tatou ki a Consul KV.

E rima nga akonga me nga toa e toru kua tohatohahia

Ko te tikanga, ko enei punaha katoa he toa-whakaaro-a-te-hape, he toa uara-nui e taea ai te raina. Ahakoa he nui nga rereketanga o o raatau tauira raraunga, ka korerohia e tatou i muri mai, ka whakaotihia e raatau nga raruraru whaitake. Ko te tikanga, ko ia tono e whakamahi ana i te ratonga ruruku e herea ana ki tetahi o aua mea, tera pea te hiahia ki te tautoko i nga punaha maha i roto i te pokapū raraunga kotahi hei whakaoti rapanga mo nga tono rereke.

I ahu mai te whakaaro ki te whakaoti i tenei raruraru i roto i tetahi tari whiriwhiri o Ahitereiria, a, i taka mai ki a matou, he roopu iti o nga tauira, ki te whakatinana, koinei taku korero.

I taea e matou te hanga whare pukapuka e whakarato ana i te atanga noa mo te mahi tahi me ZooKeeper, etcd me Consul KV. Kua tuhia te whare pukapuka ki te C++, engari he mahere ki te kawe ki etahi atu reo.

Tauira Raraunga

Hei whakawhanake i tetahi atanga noa mo nga punaha rereke e toru, me maarama koe he aha o raatau rereke me pehea te rereke. Kia mohio tatou.

Kaitiaki Kaitiaki Zoo

E rima nga akonga me nga toa e toru kua tohatohahia

Kua whakaritea nga ki ki roto i te rakau ka kiia ko nga node. No reira, mo te node ka taea e koe te tiki rarangi o ana tamariki. Ko nga mahi o te hanga i te znode (hanga) me te huri i tetahi uara (setData) kua wehea: ko nga taviri o naianei anake ka taea te panui me te whakarereke. Ka taea te hono nga mataaratanga ki nga mahi o te tirotiro i te noho o te node, te panui i tetahi uara, me te tango tamariki. Ko te mataaratanga he keu kotahi-wa ka ahi ina huri te putanga o nga raraunga e pa ana ki te tūmau. Ka whakamahia nga node ephemeral ki te kite i nga rahunga. Kua herea ratou ki te wahanga o te kiritaki nana ratou i hanga. Ina katia e te kiritaki tetahi huihuinga, ka mutu ranei te whakamohio atu ki a ZooKeeper mo tona oranga, ka mukua aunoa enei pona. Ka tautokohia nga tauwhitinga ngawari - he huinga mahi ka angitu katoa, ka hinga ranei ki te kore e taea mo tetahi o ratou.

etcd

E rima nga akonga me nga toa e toru kua tohatohahia

Ko nga kaiwhakawhanake o tenei punaha i tino whakaawehia e ZooKeeper, na reira he rereke nga mahi katoa. Karekau he raupapa o nga taviri, engari ka hanga he huinga kupu kupu. Ka taea e koe te tiki, te muku ranei i nga taviri katoa no tetahi awhe. He rereke te ahua o tenei hanganga, engari he tino whakaatu, a ka ngawari te whai i te tirohanga aroākapa.

etcd karekau he mahi whakataurite-a-whakaritenga paerewa, engari he mea pai ake: nga whakawhitinga. Ae ra, kei roto i nga punaha katoa e toru, engari he pai rawa atu nga whakawhitinga etcd. E toru nga poraka: tirohia, angitu, kore. Kei roto i te poraka tuatahi he huinga tikanga, te tuarua me te tuatoru - nga mahi. Ka mahia te tauwhitinga ngota. Mena he pono nga tikanga katoa, ka mahia te poraka angitu, ki te kore ka mahia te paraka rahunga. I roto i te API 3.3, ka taea e nga poraka angitu me nga rahunga nga whakawhitinga kohanga. Arā, ka taea te mahi ngota i nga hanganga herenga o te taumata ohanga tata. Ka taea e koe te ako atu mo nga arowhai me nga mahi ka puta mai tuhinga.

Kei konei ano nga mataaratanga, ahakoa he uaua ake, ka taea te whakamahi ano. Arā, i muri i te whakauru i te mataaratanga ki runga i te awhe matua, ka whiwhi koe i nga whakahoutanga katoa i tenei awhe tae noa ki te whakakore i te mataaratanga, kaua ko te mea tuatahi anake. I etahi atu, he riihi te ahua o nga huihuinga a te kiritaki ZooKeeper.

Kaikaunihera K.V.

Kaore ano he hanganga hierarchical i konei, engari ka taea e Consul te hanga i te ahua e noho ana: ka taea e koe te tiki me te whakakore i nga kii katoa me te tohu tuatahi, ara, mahi me te "subtree" o te ki. Ko enei patai ka kiia ko te recursive. I tua atu, ka taea e Consul te kowhiri i nga taviri anake kaore i roto i te ahua kua tohua i muri i te tohu tuatahi, e rite ana ki te whiwhi "tamariki" tonu. Engari he mea tika kia maumahara koinei tonu te ahua o te hanganga hierarchical: ka taea te hanga i tetahi taviri mena karekau ona matua ka whakakore ranei i tetahi kii he tamariki, ka mau tonu nga tamariki ki te punaha.

E rima nga akonga me nga toa e toru kua tohatohahia
Engari i nga mataaratanga, kua aukatihia e Consul nga tono HTTP. Ko te tikanga, he waea noa enei ki te tikanga panui raraunga, na, me etahi atu taapiri, ka tohuhia te waahanga whakamutunga o nga raraunga. Mena he nui ake te putanga o naianei o nga raraunga e tika ana i runga i te tūmau i te mea kua tohua, ka whakahokia tonu te whakautu, ki te kore - ka huri te uara. He waahi ano ka taea te hono ki nga taviri i nga wa katoa. He mea tika kia mohiohia kaore i rite ki te etcd me te ZooKeeper, ko te whakakore i nga waahi ka arahi ki te whakakore i nga taviri e hono ana, he aratau e kore e hono noa te waahi mai i a raatau. Kei te waatea hokohoko, kaore he manga, engari me nga momo haki katoa.

Te whakakotahi katoa

Kei a ZooKeeper te tauira raraunga tino uaua. Ko nga patai awheawhe e waatea ana i roto i te etcd kaore e taea te whai pai i roto i te ZooKeeper, Consul ranei. I te ngana ki te whakauru i nga mea pai mai i nga ratonga katoa, ka mutu he atanga tata e rite ana ki te atanga ZooKeeper me nga waahanga nui e whai ake nei:

  • raupapa, ipu me nga pona TTL kaore i tautokona
  • Kaore i te tautokohia nga ACL
  • ka hanga e te tikanga huinga he taviri mena karekau (i te ZK setData ka whakahoki he hapa i tenei keehi)
  • kua wehea nga tikanga huinga me te cas (i te ZK he rite tonu te ahua)
  • Ko te tikanga ūkui ka mukua tetahi node me tana rakau iti (i te ZK delete ka whakahoki he hapa mena he tamariki te node)
  • Mo ia kī kotahi anake te putanga - ko te putanga uara (i te ZK e toru o ratou)

Ko te whakakorenga o nga pona raupapa na te mea kaore he tautoko a te etcd me te Consul mo ratou, a ka taea e te kaiwhakamahi te whakamahi i runga ake o te atanga whare pukapuka ka puta.

Ko te whakatinana i te whanonga e rite ana ki te ZooKeeper i te wa e mukua ana he poutokomanawa me mau tonu he porotiti tamaiti motuhake mo ia matua i roto i te etcd me te Consul. I te mea ka ngana matou ki te karo i te penapena korero meta, i whakatauhia kia mukua te katoa o te rakau iti.

Nga mea iti o te whakatinanatanga

Kia ata titiro ki etahi ahuatanga o te whakatinana i te atanga whare pukapuka ki nga punaha rereke.

Hierarchy in etcd

Ko te pupuri i te tirohanga hierarchical i roto i te etcd i puta ko tetahi o nga mahi tino pai. Ko nga patai awhe ka ngawari ki te tiki rarangi o nga taviri me te tohu tuatahi. Hei tauira, ki te hiahia koe ki nga mea katoa ka timata "/foo", kei te tono koe mo te awhe ["/foo", "/fop"). Engari ma tenei ka whakahoki te katoa o te rakau iti o te ki, kare pea e whakaaetia mena he nui te rakau iti. I te tuatahi i whakaaro matou ki te whakamahi i tetahi tikanga whakamaori matua, whakatinana i roto i te zetcd. Ka uru ki te taapiri i tetahi paita i te timatanga o te ki, kia rite ki te hohonutanga o te node o te rakau. Ka hoatu e ahau he tauira.

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

Na ka tikina nga tamariki katoa o te kii "/foo" ka taea ma te tono awhe ["u02/foo/", "u02/foo0"). Ae, i roto i te ASCII "0" tu tonu i muri "/".

Engari me pehea te whakatinana i te tangohanga o te tihi i tenei keehi? Te ahua nei me muku koe i nga awhe katoa o te momo ["uXX/foo/", "uXX/foo0") mo te XX mai i te 01 ki te FF. Na ka oma matou ki roto tepe tau mahi i roto i te hokohoko kotahi.

Ko te hua o tenei, i hangaia he punaha hurihuri matua ngawari, i taea ai te whakatinana pai i te whakakore i te taviri me te whiwhi rarangi tamariki. He nui ki te taapiri i tetahi tohu motuhake i mua i te tohu whakamutunga. Hei tauira:

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

Na ka whakakore i te matua "/very" ka huri ki te whakakore "/u00very" me te awhe ["/very/", "/very0"), me te tiki tamariki katoa - i roto i te tono mo nga taviri mai i te awhe ["/very/u00", "/very/u01").

Te tango i tetahi kī i roto i te ZooKeeper

Ka rite ki taku korero, i ZooKeeper e kore e taea e koe te muku i tetahi node mena he tamariki ana. E hiahia ana matou ki te muku i te matua me te rakau iti. Me aha ahau? Ka mahia e matou tenei i runga i te tumanako. Tuatahi, ka hikoi whakamuri tatou i te rakau-iti, ka whiwhi i nga tamariki o ia pito me tetahi patai motuhake. Na ka hanga e matou he tauwhitinga e ngana ana ki te whakakore i nga pona katoa o te rakau iti i runga i te raupapa tika. Ae ra, ka puta nga huringa i waenga i te panui i tetahi rakau iti me te whakakore. I tenei keehi, ka taka te tauwhitinga. I tua atu, ka rereke pea te rakau iti i te wa e panui ana. Ko te tono mo nga tamariki o te node e whai ake nei ka whakahoki he hapa mena, hei tauira, kua mukua kee tenei pona. I nga wahanga e rua, ka tukuna ano e matou te tukanga katoa.

Ko tenei huarahi ka kore e whai hua te whakakore i tetahi matua mena he tamariki ana, me te mea ka mahi tonu te tono me te rakau iti, te whakakore me te hanga ki. Heoi, na tenei ka taea e matou te karo i te whakararu i te whakatinanatanga o etahi atu tikanga i roto i te etcd me te Consul.

whakaturia ki ZooKeeper

Kei roto i te ZooKeeper etahi tikanga motuhake e mahi ana me te hanganga rakau (te hanga, te whakakore, te tikiChildren) me te mahi me nga raraunga i roto i nga pona (setData, getData I tua atu, ko nga tikanga katoa he tino tikanga: ko te hanga ka hoki mai he hapa mena kua puta ke te node). kua waihangahia, mukua, tautuhiaRaraunga ranei - mena kaore ano kia noho. I hiahiatia e matou he tikanga tautuhi ka taea te karanga me te kore e whakaaro mo te waahi o te ki.

Ko tetahi o nga whiringa ko te whai i te huarahi pai, penei me te whakakore. Takina mena kei te noho he node. Mena kei te noho, waea atu ki te setData, ki te kore hanga. Ki te whakahoki te tikanga whakamutunga i te hapa, tuaruatia ano. Ko te mea tuatahi kia mahara ko te whakamatautau oranga he horihori. Ka taea e koe te karanga tonu hanga. Ko te otinga angitū ko te tikanga karekau te node i te noho, ka hangaia. Ki te kore, ka hoki mai te hanga i te hapa e tika ana, ka mutu me waea koe ki te setData. Ae ra, i waenga i nga waea, ka taea te whakakore i tetahi tohu ma te waea whakataetae, a ka hoki mai ano he hapa a setData. I tenei keehi, ka taea e koe te whakahoki ano i nga mea katoa, engari he pai?

Mena ka hoki mai nga tikanga e rua i te he, katahi ka tino mohio tatou i puta he whakataetae whakakorenga. Me whakaaro tatou i puta tenei mukunga i muri i te karanga huinga. Na ko nga tikanga e ngana ana tatou ki te whakatuu kua murua. Ko te tikanga ka taea e tatou te kii i tutuki pai taua huinga, ahakoa kaore he mea i tuhia.

Ētahi atu taipitopito hangarau

I tenei wahanga ka okioki tatou mai i nga punaha tohatoha ka korero mo te whakawaehere.
Ko tetahi o nga whakaritenga matua a te kaihoko ko te whitiwhiti: me tautoko tetahi o nga ratonga i runga i te Linux, MacOS me Windows. I te timatanga, i whakawhanakehia e matou mo Linux anake, ka timata te whakamatautau ki etahi atu punaha i muri mai. He maha nga raruraru i puta mai i tenei, mo etahi wa kaore i tino marama me pehea te whakatata atu. Ko te mutunga mai, kei te tautokohia nga ratonga ruruku e toru i runga i te Linux me te MacOS, engari ko Consul KV anake e tautokohia ana i runga Windows.

Mai i te timatanga, ka ngana matou ki te whakamahi i nga whare pukapuka kua rite ki te uru atu ki nga ratonga. Mo te ZooKeeper, i taka te whiringa ZooKeeper C++, i rahua te whakahiato i runga Windows. Heoi, ehara tenei i te mea miharo: ko te wharepukapuka he linux-anake. Mo te Kaihopu ko te mea anake ppconsul. Ko te tautoko me taapiri atu huihuinga и hokohoko. Mo te etcd, karekau i kitea he whare pukapuka katoa e tautoko ana i te putanga hou o te kawa, no reira ka ngawari noa i hangaia te kiritaki grpc.

I whakaaweahia e te atanga tukutahi o te whare pukapuka ZooKeeper C++, i whakatau matou ki te whakatinana i tetahi atanga tukutahi. Kei te whakamahi a ZooKeeper C++ i nga korero o mua mo tenei. I roto i te STL, engari, he tino ngawari te whakatinana. Hei tauira, kaore katahi tikanga, e whakamahi ana i te mahi kua paahitia ki te hua o te heke mai ina watea ana. I roto i to maatau, he mea tika tenei tikanga ki te huri i te hua ki te whakatakotoranga o to maatau whare pukapuka. Hei whakatika i tenei raru, me whakatinana taatau ake puna miro ngawari, na te mea i te tono a te kaihoko kaore e taea e matou te whakamahi i nga whare pukapuka tuatoru penei i te Boost.

Ko ta maatau whakatinanatanga ka penei te mahi. Ina karangahia, ka waihangahia he kupu whakaari / takirua a muri ake nei. Ka hoki mai te wa kei te heke mai, ka tukuna te mea kua paahitia me te mahi e rite ana me tetahi atu kupu whakaari ki te rarangi. Ko te miro mai i te puna kaukau ka kowhiri i etahi wa kei te tutira ka pooti ma te whakamahi wait_for. Ina watea mai he hua, ka karangahia te mahi e rite ana, ka tukuna tona uara whakahoki ki te oati.

I whakamahia e matou te puna miro kotahi ki te whakahaere patai ki etcd me Consul. Ko te tikanga ka taea te uru atu ki nga whare pukapuka o raro e nga miro rereke maha. Ko te ppconsul ehara i te miro haumaru, na reira ka tiakina nga waea ki a ia e nga raka.
Ka taea e koe te mahi tahi me te grpc mai i nga miro maha, engari he mea iti. I roto i nga maataki etcd ka whakatinanahia ma nga awa grpc. He hongere ararua enei mo nga karere o tetahi momo. Ka hangaia e te whare pukapuka he miro kotahi mo nga mataaratanga katoa me te miro kotahi e tukatuka ana i nga karere taumai. Na ka aukati a grpc i nga tuhi whakarara ki te rere. Ko te tikanga ka arawhiti, ka mukua ranei he mataaratanga, me tatari koe kia oti ra ano te tono o mua i te tuku i mua i te tuku atu. Ka whakamahia e matou mo te tukutahi taurangi herenga.

Ko te hua

Tirohia koe: liboffkv.

To tatou kapa: Raed Romanov, Ivan Glushenkov, Dmitry Kamaldinov, Ko Victor Krapivensky, Vitaly Ivanin.

Source: will.com

Tāpiri i te kōrero