Sgaoil còignear oileanach agus trì prìomh stòran luach

No mar a sgrìobh sinn leabharlann C ++ teachdaiche airson ZooKeeper, msaa agus Consul KV

Ann an saoghal nan siostaman sgaoilte, tha grunn ghnìomhan àbhaisteach ann: a 'stòradh fiosrachadh mu cho-dhèanamh a' chnuasachd, a 'stiùireadh rèiteachadh nodan, a' lorg nodan lochtach, a 'taghadh stiùiriche agus feadhainn eile. Gus fuasgladh fhaighinn air na duilgheadasan sin, chaidh siostaman sgaoilte sònraichte a chruthachadh - seirbheisean co-òrdanachaidh. A-nis bidh ùidh againn ann an trì dhiubh: ZooKeeper, msaa agus Consul. A-mach às a h-uile gnìomh beairteach aig Consul, cuiridh sinn fòcas air Consul KV.

Sgaoil còignear oileanach agus trì prìomh stòran luach

Gu dearbh, tha na siostaman sin uile nan stòran a tha a’ fulang le lochdan, le prìomh luach sreathach. Ged a tha eadar-dhealachaidhean mòra aig na modailean dàta aca, air am bi sinn a 'bruidhinn nas fhaide air adhart, bidh iad a' fuasgladh nan aon dhuilgheadasan practaigeach. Gu follaiseach, tha gach tagradh a chleachdas an t-seirbheis co-òrdanachaidh ceangailte ri aon dhiubh, a dh ’fhaodadh leantainn gu feum air taic a thoirt do ghrunn shiostaman ann an aon ionad dàta a dh’ fhuasglas na h-aon dhuilgheadasan airson diofar thagraidhean.

Thàinig am beachd airson an duilgheadas seo fhuasgladh bho bhuidheann comhairleachaidh ann an Astràilia, agus thàinig e oirnn, sgioba bheag de dh’ oileanaich, a chuir an gnìomh, agus is e sin a tha mi a’ dol a bhruidhinn.

Chaidh againn air leabharlann a chruthachadh a bheir seachad eadar-aghaidh cumanta airson a bhith ag obair le ZooKeeper, msaa agus Consul KV. Tha an leabharlann sgrìobhte ann an C++, ach tha planaichean ann airson a ghluasad gu cànanan eile.

Modailean dàta

Gus eadar-aghaidh cumanta a leasachadh airson trì siostaman eadar-dhealaichte, feumaidh tu tuigsinn dè a tha aca ann an cumantas agus mar a tha iad eadar-dhealaichte. Feuch an dèan sinn a-mach e.

Sùgh-glèidhidh

Sgaoil còignear oileanach agus trì prìomh stòran luach

Tha na h-iuchraichean air an eagrachadh ann an craobh agus canar nodan riutha. A rèir sin, airson nód gheibh thu liosta den chloinn aige. Tha gnìomhachd cruthachadh znode (cruthaich) agus atharrachadh luach (setData) air an sgaradh: chan urrainnear ach iuchraichean gnàthaichte a leughadh agus atharrachadh. Faodar uaireadairean a cheangal ris an obair gus sgrùdadh a dhèanamh air nòta, leughadh luach, agus faighinn clann. Tha faire na bhrosnachadh aon-ùine a bhios a’ losgadh nuair a dh’ atharraicheas an dreach den dàta co-fhreagarrach air an fhrithealaiche. Bithear a’ cleachdadh nodan geàrr-ùine gus fàilligidhean a lorg. Tha iad ceangailte ri seisean an neach-dèiligidh a chruthaich iad. Nuair a dhùineas neach-dèiligidh seisean no nuair a stadas e fios a thoirt do ZooKeeper gu bheil e ann, thèid na nodan sin a dhubhadh às gu fèin-ghluasadach. Thathas a’ toirt taic do ghnothaichean sìmplidh - seata de ghnìomhachd a bhios uile a’ soirbheachadh no a’ fàilligeadh mura h-eil seo comasach airson co-dhiù aon dhiubh.

etc

Sgaoil còignear oileanach agus trì prìomh stòran luach

Bha luchd-leasachaidh an t-siostam seo gu soilleir air am brosnachadh le ZooKeeper, agus mar sin rinn iad a h-uile dad ann an dòigh eadar-dhealaichte. Chan eil rangachd iuchraichean ann, ach tha iad nan seata òrdaichte le faclaireachd. Gheibh thu no sguab às a h-uile iuchair a bhuineas do raon sònraichte. Is dòcha gu bheil coltas neònach air an structar seo, ach gu dearbh tha e gu math brìoghmhor, agus faodar sealladh rangachd a shamhlachadh gu furasta troimhe.

chan eil gnìomhachd coimeas-agus-seata àbhaisteach aig etcd, ach tha rudeigin nas fheàrr aige: gnothaichean. Gu dearbh, tha iad ann anns na trì siostaman, ach tha gnothaichean msaa gu sònraichte math. Tha iad air an dèanamh suas de thrì blocaichean: seic, soirbheachas, fàilligeadh. Anns a 'chiad bhloc tha seata de shuidheachaidhean, an dàrna agus an treas - obrachaidhean. Tha an gnothach air a chuir gu bàs gu atomically. Ma tha a h-uile suidheachadh fìor, thèid am bloc soirbheachais a chuir gu bàs, air neo thèid am bloc fàilligeadh a chuir gu bàs. Ann an API 3.3, faodaidh gnothaichean neadachaidh a bhith ann am blocaichean soirbheachais is fàilligeadh. Is e sin, tha e comasach togail gu h-atamach de ìre neadachaidh cha mhòr neo-riaghailteach. Faodaidh tu barrachd ionnsachadh mu na sgrùdaidhean agus na gnìomhan a tha ann sgrìobhainnean.

Tha uaireadairean an seo cuideachd, ged a tha iad beagan nas iom-fhillte agus faodar an ath-chleachdadh. Is e sin, às deidh dhut uaireadair a chuir a-steach air prìomh raon, gheibh thu a h-uile ùrachadh san raon seo gus an cuir thu dheth an uaireadair, agus chan e dìreach a’ chiad fhear. Ann am msaa, tha an analog de sheiseanan teachdaiche ZooKeeper air màl.

Consal K.V.

Chan eil structar rangachd teann an seo cuideachd, ach faodaidh Consul an coltas a th’ ann a chruthachadh: gheibh thu agus cuir às do na h-iuchraichean gu lèir leis an ro-leasachan ainmichte, is e sin, obraich le “fo-chraobh” na h-iuchrach. Canar ath-chuairteachadh ri ceistean mar seo. A bharrachd air an sin, chan urrainn don Chonsal ach iuchraichean a thaghadh anns nach eil an caractar ainmichte às deidh an ro-leasachan, a tha a rèir a bhith a’ faighinn “clann” sa bhad. Ach is fhiach cuimhneachadh gur e seo dìreach coltas structar rangachd: tha e gu math comasach iuchair a chruthachadh mura h-eil am pàrant ann no cuir às do iuchair aig a bheil clann, fhad ‘s a chumas a’ chlann air an stòradh san t-siostam.

Sgaoil còignear oileanach agus trì prìomh stòran luach
An àite uaireadairean, tha Consal air casg a chuir air iarrtasan HTTP. Gu dearbh, is e gairmean àbhaisteach a tha seo don dòigh leughaidh dàta, airson a bheil, còmhla ri crìochan eile, an dreach mu dheireadh den dàta air a chomharrachadh. Ma tha an tionndadh làithreach den dàta co-fhreagarrach air an fhrithealaiche nas motha na an tè a chaidh a shònrachadh, thèid am freagairt a thilleadh sa bhad, air dhòigh eile - nuair a dh'atharraicheas an luach. Tha seiseanan ann cuideachd a dh'fhaodar a cheangal ri iuchraichean aig àm sam bith. Is fhiach a bhith mothachail, eu-coltach ri msaa agus ZooKeeper, far a bheil cuir às do sheiseanan a’ leantainn gu cuir às do iuchraichean co-cheangailte, tha modh ann far a bheil an seisean dìreach gun cheangal bhuapa. Ri fhaighinn gnothaichean, gun gheugan, ach le gach seòrsa seic.

A 'cur a h-uile càil ri chèile

Tha am modail dàta as cruaidhe aig ZooKeeper. Chan urrainnear na ceistean raon brìoghmhor a tha rim faighinn ann am msaa a bhith air an aithris gu h-èifeachdach ann an ZooKeeper no Consul. A’ feuchainn ris a’ chuid as fheàrr de na seirbheisean uile a thoirt a-steach, chrìochnaich sinn le eadar-aghaidh cha mhòr co-ionann ri eadar-aghaidh ZooKeeper leis na h-eisgeadan cudromach a leanas:

  • sreath, soitheach agus nodan TTL chan eil taic ann
  • Chan eil taic ri ACLS
  • bidh an dòigh stèidhichte a’ cruthachadh iuchair mura h-eil e ann (ann an ZK setData tillidh mearachd sa chùis seo)
  • tha dòighean seata agus cas air an sgaradh (ann an ZK tha iad gu ìre mhòr an aon rud)
  • bidh an dòigh sguabaidh às a’ cuir às do nód còmhla ris an fho-chraobh aige (ann an ZK sguab às a’ tilleadh mearachd ma tha clann aig an nód)
  • Airson gach iuchair chan eil ann ach aon dreach - an dreach luach (ann an ZK tha trì dhiubh ann)

Tha diùltadh nodan sreathach mar thoradh air nach eil taic stèidhichte aig etcd agus Consul dhaibh, agus faodaidh an neach-cleachdaidh an cur an gnìomh gu furasta air mullach an eadar-aghaidh leabharlainn a thig às.

Le bhith a’ cur an gnìomh giùlan coltach ri ZooKeeper nuair a bhiodh tu a’ sguabadh às vertex dh’ fheumadh cunntas cloinne fa-leth a chumail airson gach iuchair ann am etcd agus Consul. Leis gun do dh’ fheuch sinn ri fiosrachadh meta a sheachnadh, chaidh co-dhùnadh an subtree gu lèir a dhubhadh às.

Bun-bheachdan buileachaidh

Bheir sinn sùil nas mionaidiche air cuid de thaobhan de bhith a’ buileachadh eadar-aghaidh an leabharlainn ann an diofar shiostaman.

Rangachd ann an etcd

B’ e aon de na gnìomhan as inntinniche a bhith a’ cumail sealladh rangachd ann am msaa. Tha ceistean raon ga dhèanamh furasta liosta iuchraichean fhaighinn air ais le ro-leasachan ainmichte. Mar eisimpleir, ma tha feum agad air a h-uile càil a thòisicheas "/foo", tha thu ag iarraidh raon ["/foo", "/fop"). Ach bheireadh seo air ais fo-chraobh iomlan na h-iuchrach, rud is dòcha nach gabhar ris ma tha an fho-chraobh mòr. An toiseach bha sinn an dùil prìomh dhòigh eadar-theangachaidh a chleachdadh, air a chur an gnìomh ann an zetcd. Tha e a 'ciallachadh a bhith a' cur aon byte aig toiseach na h-iuchrach, co-ionann ri doimhneachd an nód sa chraoibh. Leig dhomh eisimpleir a thoirt dhut.

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

An uairsin faigh a h-uile leanabh sa bhad den iuchair "/foo" comasach le bhith ag iarraidh raon ["u02/foo/", "u02/foo0"). Tha, ann an ASCII "0" seasamh dìreach às a dhèidh "/".

Ach ciamar a bheir thu air falbh vertex sa chùis seo? Tha e a 'tionndadh a-mach gum feum thu a sguabadh às a h-uile raon den t-seòrsa ["uXX/foo/", "uXX/foo0") airson XX bho 01 gu FF. Agus an uairsin ruith sinn a-steach crìoch àireamh obrachaidh taobh a-staigh aon ghnothach.

Mar thoradh air an sin, chaidh siostam tionndaidh iuchrach sìmplidh a chruthachadh, a rinn e comasach an dà chuid cuir às do iuchair agus faighinn liosta chloinne a chuir an gnìomh gu h-èifeachdach. Tha e gu leòr caractar sònraichte a chur ris ron tòcan mu dheireadh. Mar eisimpleir:

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

An uairsin sguab às an iuchair "/very" tionndadh gu bhith air a sguabadh às "/u00very" agus raon ["/very/", "/very0"), agus a 'faighinn a h-uile leanabh - ann an iarrtas airson iuchraichean bhon raon ["/very/u00", "/very/u01").

A’ toirt air falbh iuchair ann an ZooKeeper

Mar a thuirt mi mu thràth, ann an ZooKeeper chan urrainn dhut nód a sguabadh às ma tha clann aige. Tha sinn airson an iuchair a sguabadh às còmhla ris an fho-chraobh. Dè bu chòir dhomh a dhèanamh? Bidh sinn a’ dèanamh seo le dòchas. An toiseach, bidh sinn a 'dol thairis air an fho-chraobh gu ath-chuairteach, a' faighinn clann gach vertex le ceist air leth. An uairsin bidh sinn a’ togail malairt a dh’ fheuchas ri cuir às a h-uile nod den fho-chraobh san òrdugh cheart. Gu dearbh, faodaidh atharrachaidhean tachairt eadar leughadh fo-chraobh agus cuir às dha. Anns a 'chùis seo, bidh an gnothach a' fàilligeadh. A bharrachd air an sin, faodaidh an subtree atharrachadh tron ​​​​phròiseas leughaidh. Faodaidh iarrtas airson clann an ath nód mearachd a thilleadh ma tha, mar eisimpleir, an nód seo air a dhubhadh às mu thràth. Anns an dà chùis, bidh sinn ag ath-aithris a 'phròiseas gu lèir a-rithist.

Tha an dòigh-obrach seo a ’dèanamh cuir às do iuchair gu math neo-èifeachdach ma tha clann aige, agus eadhon nas motha ma chumas an tagradh ag obair leis an subtree, cuir às agus cruthaich iuchraichean. Ach, leig seo leinn a bhith a’ seachnadh cur an gnìomh dòighean eile ann am etcd agus Consul.

suidhichte ann an ZooKeeper

Ann an ZooKeeper tha dòighean air leth ann a bhios ag obair le structar na craoibhe (cruthaich, cuir às, faighChildren) agus a bhios ag obair le dàta ann an nodan (setData, getData). air a chruthachadh, air a sguabadh às no air a shuidheachadhData - mura h-eil e ann mu thràth. Bha feum againn air dòigh stèidhichte a dh’ fhaodar a ghairm gun a bhith a’ smaoineachadh mu làthaireachd iuchair.

Is e aon roghainn dòigh-obrach dòchasach a ghabhail, mar le sguabadh às. Dèan cinnteach a bheil nòta ann. Ma tha, cuir fòn gu setData, air neo cruthaich. Ma thill an dòigh mu dheireadh mearachd, cuir a-rithist e a-rithist. Is e a’ chiad rud a bu chòir a thoirt fa-near gu bheil an deuchainn bith-beò gun fheum. Faodaidh tu fios a chuir gu cruthaich sa bhad. Bidh crìochnachadh soirbheachail a’ ciallachadh nach robh an nód ann agus chaidh a chruthachadh. Rud eile, tillidh cruthaich am mearachd iomchaidh, às deidh sin feumaidh tu fios a chuir gu setData. Gu dearbh, eadar gairmean, dh ’fhaodadh vertex a bhith air a dhubhadh às le gairm farpaiseach, agus bhiodh setData cuideachd a’ tilleadh mearachd. Anns a 'chùis seo, faodaidh tu a dhèanamh a-rithist, ach is fhiach e e?

Ma thilleas an dà dhòigh mearachd, tha fios againn le cinnt gun deach cuir às do cho-fharpaiseach. Smaoinichidh sinn gun do thachair an sguabadh às seo às deidh an t-seata gairm. An uairsin tha ciall sam bith a tha sinn a’ feuchainn ri stèidheachadh air a dhubhadh às mu thràth. Tha seo a’ ciallachadh gun urrainn dhuinn gabhail ris gun deach an seata a chuir gu bàs gu soirbheachail, eadhon ged nach deach dad a sgrìobhadh.

Barrachd mion-fhiosrachaidh teicnigeach

Anns an earrainn seo bheir sinn fois bho shiostaman sgaoilte agus bruidhnidh sinn mu chòdachadh.
B 'e aon de phrìomh riatanasan an neach-cleachdaidh tar-àrd-ùrlar: feumar taic a thoirt do co-dhiù aon de na seirbheisean air Linux, MacOS agus Windows. An toiseach, leasaich sinn airson Linux a-mhàin, agus thòisich sinn a’ dèanamh deuchainn air siostaman eile nas fhaide air adhart. Dh'adhbhraich seo tòrr dhuilgheadasan, a bha airson ùine gu tur mì-chinnteach ciamar a dhèiligeas iad. Mar thoradh air an sin, tha na trì seirbheisean co-òrdanachaidh a-nis a’ faighinn taic air Linux agus MacOS, agus chan eil ach Consul KV a’ faighinn taic air Windows.

Bhon fhìor thoiseach, dh’ fheuch sinn ri leabharlannan deiseil a chleachdadh gus faighinn gu seirbheisean. A thaobh ZooKeeper, thuit an roghainn air adhart Zookeeper C++, nach do chuir ri chèile air Windows aig a’ cheann thall. Chan eil seo, ge-tà, na iongnadh: tha an leabharlann air a shuidheachadh mar linux a-mhàin. Airson Consul bha an aon roghainn ppconsal. Dh'fheumadh taic a chur ris seiseanan и gnothaichean. Airson msaa, cha deach leabharlann làn-chuimseach a’ toirt taic don dreach as ùire den phròtacal a lorg, agus mar sin tha sinn dìreach neach-dèiligidh grpc air a chruthachadh.

Air a bhrosnachadh leis an eadar-aghaidh asyncronach de leabharlann ZooKeeper C ++, chuir sinn romhainn cuideachd eadar-aghaidh asyncronach a chuir an gnìomh. Bidh ZooKeeper C ++ a’ cleachdadh prìomhairean san àm ri teachd / gealltanas airson seo. Ann an STL, gu mì-fhortanach, tha iad air an cur an gnìomh gu math beag. Mar eisimpleir, chan eil an uairsin modh, a tha a’ buntainn ris a’ ghnìomh a chaidh seachad ri toradh an ama ri teachd nuair a bhios e ri fhaighinn. Anns a 'chùis againn, tha feum air dòigh mar seo gus an toradh a thionndadh gu cruth ar leabharlann. Gus faighinn timcheall air an duilgheadas seo, bha againn ri ar n-amar snàithlean sìmplidh fhèin a chuir an gnìomh, oir air iarrtas an neach-ceannach cha b’ urrainn dhuinn leabharlannan treas-phàrtaidh trom leithid Boost a chleachdadh.

Bidh ar buileachadh an uairsin ag obair mar seo. Nuair a thèid an gairm, thèid gealladh a bharrachd / paidhir san àm ri teachd a chruthachadh. Tha an àm ri teachd ùr air a thilleadh, agus tha am fear a chaidh seachad air a chuir còmhla ris a ’ghnìomh fhreagarrach agus gealladh a bharrachd anns a’ chiudha. Bidh snàithlean bhon linne a’ taghadh grunn amannan ri teachd bhon ciudha agus gan bhòtadh a’ cleachdadh wait_for. Nuair a bhios toradh ri fhaighinn, canar an gnìomh co-fhreagarrach ris agus thèid a luach tilleadh chun gheallaidh.

Chleachd sinn an aon amar snàithlean gus ceistean a chuir an gnìomh gu msaa agus Consul. Tha seo a’ ciallachadh gum faighear cothrom air na leabharlannan bunaiteach tro iomadh snàithlean eadar-dhealaichte. Chan eil ppconsul snàithlean sàbhailte, agus mar sin tha fiosan thuige air an dìon le glasan.
Faodaidh tu obrachadh le grpc bho iomadh snàithlean, ach tha subtleties ann. Ann an etcd tha uaireadairean air an cur an gnìomh tro shruthan grpc. Tha iad sin nan seanalan dà-thaobhach airson teachdaireachdan de sheòrsa sònraichte. Bidh an leabharlann a’ cruthachadh aon snàithlean airson a h-uile uaireadair agus aon snàithlean a bhios a’ pròiseasadh teachdaireachdan a thig a-steach. Mar sin tha grpc a’ toirmeasg sgrìobhadh co-shìnte gu sruth. Tha seo a’ ciallachadh nuair a thòisicheas tu no nuair a sguabas tu às uaireadair, gum feum thu feitheamh gus am bi an t-iarrtas roimhe air a chuir a-steach mus cuir thu an ath fhear. Bidh sinn a 'cleachdadh airson sioncronadh caochladairean cumhach.

An toradh

Faic airson thu fhèin: liboffkv.

An sgioba againn: Raed Romanov, Ivan Glushchenko, Dmitry Kamaldinov, Victor Krapivensky, Vitaly Ivanin.

Source: www.habr.com

Cuir beachd ann