Ka nānā ʻana i nā hana mai ka hālāwai kūkā Hydra - hoʻopaʻa ʻana i ka ukana a me ka mālama ʻana i ka hoʻomanaʻo

Ua hana ʻia i kekahi mau lā i hala Ahaolelo Hydra. Ua kono nā kāne mai ka hui JUG.ru i nā mea kamaʻilio moe (Leslie Lamport! Cliff Click! Martin Kleppmann!) ʻO Kontur kekahi o nā hoa ʻekolu o ka ʻaha kūkā. Ua kamaʻilio mākou ma ka hale kūʻai, kamaʻilio e pili ana i kā mākou waihona i puʻunaue ʻia, pāʻani bingo, a hoʻoponopono i nā puʻupuʻu.

He pou kēia me ka nānā ʻana i nā hana ma ke kahua Kontur mai ka mea kākau o kā lākou kikokikona. ʻO wai ma ka Hydra - ʻo ia kāu kumu e hoʻomanaʻo ai i ka ʻike leʻaleʻa, ʻaʻole ia - kahi manawa e hoʻolōʻihi i kou lolo nui ʻO-notation.

Aia kekahi poʻe i hoʻokaʻawale i ka pepa paheʻe e kākau i kā lākou hoʻoholo. ʻAʻole wau e ʻakaʻaka - hāʻawi lākou i kēia pūʻulu pepa no ka hōʻoia ʻana:

Ka nānā ʻana i nā hana mai ka hālāwai kūkā Hydra - hoʻopaʻa ʻana i ka ukana a me ka mālama ʻana i ka hoʻomanaʻo

ʻEkolu mau hana a pau:

  • e pili ana i ke koho ʻana i nā replicas ma ke kaupaona ʻana no ke kaupaona ʻana
  • e pili ana i ka hoʻokaʻawale ʻana i nā hualoaʻa e pili ana i kahi waihona waihona hoʻomanaʻo
  • ma ka hoʻoili mokuʻāina ma kahi ʻōnaehana puʻunaue me ka topology apo

Hana 1. ClusterClient

He mea pono ke noi i kahi algorithm no ke koho pono ana o K mai N replicas kaumaha o ka nenoai mahele.

Hoʻokumu ʻia kāu hui i ka hoʻomohala ʻana i kahi waihona mea kūʻai aku no kahi puʻupuʻu puʻupuʻu nui o N nodes. Mālama ka waihona i nā metadata like ʻole e pili ana i nā nodes (e laʻa, ko lākou mau latencies, 4xx/5xx pane pākēneka, a me nā mea ʻē aʻe) a hāʻawi iā lākou i nā paona lana W1..WN iā lākou. I mea e kākoʻo ai i ka hoʻolālā hoʻokō like, pono e hiki i ka waihona ke koho i nā K o N nodes ma ke ʻano maʻamau—pono ke koho ʻia e like me ke kaumaha o ka node.

E noi i kahi algorithm e koho pono ai i nā nodes. E koho i kona paʻakikī helu me ka hoʻohana ʻana i ka notation O nui.

No ke aha ka mea a pau ma ka ʻōlelo Pelekania?

No ka mea, ma kēia ʻano, ua hakakā ka poʻe hui kūkā me lākou a no ka mea ʻo ka ʻōlelo Pelekane ka ʻōlelo kūhelu o Hydra. Ua like nā hana penei:

Ka nānā ʻana i nā hana mai ka hālāwai kūkā Hydra - hoʻopaʻa ʻana i ka ukana a me ka mālama ʻana i ka hoʻomanaʻo

E lawe i ka pepa a me ka penikala, e noʻonoʻo, mai wikiwiki e wehe koke i nā mea hao 🙂

ʻIkepili o ka hoʻonā (wikiō)

E hoʻomaka ana ma ka hola 5:53, 4 mau minuke wale nō:

A eia ke ʻano o nā kāne me ka flipchart i kau ai i kā lākou hopena:


ʻIkepili o ka hāʻina (kikokikona)

Aia ka ha'ina ma lalo nei ma luna o ka ili: e houluulu i na paona o na replica a pau, e hana i ka helu maalea mai ka 0 a i ka huina o na paona a pau, a laila e koho i ka i-replica e like me ka huina o na paona paona mai 0 a (i-1)th ʻoi aku ka liʻiliʻi ma mua o ka helu maʻamau, a ʻo ka huina o nā paona paona mai ka 0 a i ka i-th - ʻoi aku ka nui ma mua o ia. No laila hiki ke koho i hoʻokahi kope, a no ke koho ʻana i ka mea aʻe, pono ʻoe e hana hou i ke kaʻina hana holoʻokoʻa me ka noʻonoʻo ʻole i ka replica i koho ʻia. Me ia algorithm, ʻo ka paʻakikī o ke koho ʻana i hoʻokahi kope ʻo O(N), ʻo ka paʻakikī o ke koho ʻana i nā kope K ʻo ia ʻo O(N K) ~ O(N2).

Ka nānā ʻana i nā hana mai ka hālāwai kūkā Hydra - hoʻopaʻa ʻana i ka ukana a me ka mālama ʻana i ka hoʻomanaʻo

He ʻino ka paʻakikī Quadratic, akā hiki ke hoʻomaikaʻi ʻia. No ka hana ʻana i kēia, e kūkulu mākou lāʻau ʻāpana no na huina kaumaha. E kiʻi ʻia kahi lāʻau hohonu lg N, i loko o nā lau e loaʻa nā paona paona, a ma nā nodes i koe - nā huina hapa, a hiki i ka huina o nā kaupaona āpau ma ke kumu o ka lāʻau. A laila, hoʻopuka mākou i kahi helu maʻamau mai ka 0 a i ka huina o nā kaupaona a pau, e ʻimi i ka replica i-th, e wehe iā ia mai ka lāʻau, a e hana hou i ke kaʻina hana e ʻike i nā kope i koe. Me kēia algorithm, ʻo ka paʻakikī o ke kūkulu ʻana i kumu lāʻau ʻo O(N), ʻo ka paʻakikī o ka loaʻa ʻana o ka i-th replica a wehe ʻia mai ka lāʻau ʻo O(lg N), ʻo ka paʻakikī o ke koho ʻana i nā kope K ʻo O(N + K. lg N) ~ O(N lg N) .

Ka nānā ʻana i nā hana mai ka hālāwai kūkā Hydra - hoʻopaʻa ʻana i ka ukana a me ka mālama ʻana i ka hoʻomanaʻo

ʻOi aku ka maikaʻi o ka paʻakikī laina-log ma mua o ka paʻakikī quadratic, ʻoi aku hoʻi no ka nui K.

ʻO kēia ka algorithm hoʻokō ʻia ma ke code Nā hale waihona puke ClusterClient mai ka papahana "Komohana". (Ma laila, kūkulu ʻia ka lāʻau ma O(N lg N), akā ʻaʻole pili kēia i ka paʻakikī hope o ka algorithm.)

Hana 2. Zebra

He mea pono e hoʻolauna i kahi algorithm no ka hoʻokaʻawale maikaʻi ʻana i nā palapala i ka hoʻomanaʻo ʻana e kahi kahua i kuhikuhi ʻole ʻia:

Hoʻokumu ʻia kāu hui i ka hoʻomohala ʻana i kahi waihona palapala i hoʻomanaʻo ʻia. ʻO kahi haʻahaʻa hana maʻamau, ʻo ia ke koho ʻana i nā palapala N kiʻekiʻe i hoʻokaʻawale ʻia e kahi kahua helu arbitrary (non-indexed) mai kahi hōʻiliʻili o ka nui M (maʻa mau N <100 << M). ʻO kahi haʻahaʻa haʻahaʻa maʻamau ka koho ʻana i luna N ma hope o ka lele ʻana i nā palapala S luna (S ~ N).

Manaʻo i kahi algorithm e hoʻokō pono i nā nīnau. E hoʻohālikelike i ka paʻakikī o ka helu ʻana me ka hoʻohana ʻana i ka helu O nui i ka hihia maʻamau a me nā hiʻohiʻona ʻino loa.

ʻIkepili o ka hoʻonā (wikiō)

E hoʻomaka ana ma 34:50, 6 mau minuke wale nō:


ʻIkepili o ka hāʻina (kikokikona)

ʻO ka hoʻonā ʻili: hoʻokaʻawale i nā palapala āpau (no ka laʻana me hoʻoiho wikiwiki), a laila e lawe i nā palapala N+S. I kēia hihia, ʻo ka paʻakikī o ka hoʻokaʻawale ʻana ma ka awelika O (M lg M), ma ka ʻoi loa o O (M2).

ʻIke ʻia ʻo ka hoʻokaʻawale ʻana i nā palapala M āpau a laila lawe wale i kahi hapa liʻiliʻi o lākou ʻaʻole kūpono. I ʻole e hoʻokaʻawale i nā palapala āpau, kūpono kahi algorithm koho wikiwiki, e koho iā N + S o nā palapala i makemake ʻia (hiki ke hoʻokaʻawale ʻia e kekahi algorithm). I kēia hihia, e emi ana ka paʻakikī i O(M) ma ka awelika, ʻoiai e mau ana ka hihia ʻino loa.

Eia naʻe, hiki iā ʻoe ke hana ʻoi aku ka maikaʻi - e hoʻohana i ka algorithm ke kahe ʻana o ka puʻu binary. I kēia hihia, hoʻohui ʻia nā palapala N+S mua i ka min- a i ʻole max-heap (ma muli o ke kuhikuhi ʻana), a laila hoʻohālikelike ʻia kēlā me kēia palapala aʻe me ke kumu o ka lāʻau, aia ka palapala liʻiliʻi a i ʻole ka nui o kēia manawa. a hoʻohui ʻia i ka lāʻau inā pono. I kēia hihia, ʻo ka paʻakikī i ka hihia ʻoi loa, ke kūkulu hou ʻoe i ka lāʻau, ʻo ia ʻo O(M lg M), ʻo ka paʻakikī ma ka awelika ʻo O (M), e like me ka koho wikiwiki.

Eia naʻe, ʻoi aku ka maikaʻi o ka hoʻoheheʻe ʻana o ka puʻu ma muli o ka hoʻomaʻamaʻa ʻana i ka hapa nui o nā palapala e hiki ke hoʻolei ʻia me ka ʻole o ke kūkulu hou ʻana i ka puʻu ma hope o ka hoʻohālikelike hoʻokahi me kāna kumu kumu. Hoʻokomo ʻia kēlā ʻano ʻano ma ka Zebra in-memory document database i kūkulu ʻia a hoʻohana ʻia ma Kontur.

Hana 3. Hoʻololi mokuʻāina

Pono e hoʻolālā i ka algorithm maikaʻi loa no ka hoʻololi ʻana i nā mokuʻāina:

Hoʻokumu ʻia kāu hui i ka hoʻomohala ʻana i kahi mīkini hoʻololi mokuʻāina nani no kahi puʻupuʻu puʻupuʻu o N nodes. Pono e hoʻoneʻe ʻia ka mokuʻāina o ka i-th node i ka (i+1)-th node, pono e hoʻoneʻe ʻia ka mokuʻāina o N-th node i ka node mua. ʻO ka hana wale nō i kākoʻo ʻia ʻo ka swap mokuʻāina ke hoʻololi ʻelua nodes i kā lākou mokuʻāina i ka atomically. Ua ʻike ʻia ka lawe ʻana o ka mokuʻāina i M milliseconds. Hiki i kēlā me kēia node ke komo i kahi hoʻololi mokuʻāina i kēlā me kēia manawa.

Pehea ka lōʻihi o ka hoʻoili ʻana i nā mokuʻāina o nā node a pau i loko o kahi pūʻulu?

ʻIkepili o ka hāʻina (kikokikona)

ʻO ka hoʻonā ʻili: hoʻololi i nā mokuʻāina o ka mea mua a me ka lua, a laila ka mua a me ke kolu, a laila ka mua a me ka hā, a pēlā aku. Ma hope o kēlā me kēia hoʻololi, aia ka mokuʻāina o hoʻokahi mea i ke kūlana i makemake ʻia. Pono ʻoe e hana i nā hoʻololi O(N) a hoʻolilo i ka manawa O (N M).

Ka nānā ʻana i nā hana mai ka hālāwai kūkā Hydra - hoʻopaʻa ʻana i ka ukana a me ka mālama ʻana i ka hoʻomanaʻo

He lōʻihi ka manawa laina, no laila hiki iā ʻoe ke hoʻololi i nā mokuʻāina o nā mea i ʻelua: ka mua me ka lua, ke kolu me ka hā, a pēlā aku. Ma hope o kēlā me kēia hoʻololi mokuʻāina, aia kēlā me kēia mea ʻelua i ke kūlana kūpono. Pono ʻoe e hana i nā hoʻololi O(lg N) a hoʻolilo i ka manawa O (M lg N).

Ka nānā ʻana i nā hana mai ka hālāwai kūkā Hydra - hoʻopaʻa ʻana i ka ukana a me ka mālama ʻana i ka hoʻomanaʻo

Eia naʻe, hiki ke hana i ka hoʻololi i ʻoi aku ka maikaʻi - ʻaʻole ma ka laina laina, akā i ka manawa mau. No ka hana ʻana i kēia, i ka pae mua, pono ʻoe e hoʻololi i ke kūlana o ka mea mua me ka mea hope, ka lua me ka penultimate, a pēlā aku. Aia ke kūlana o ka mea hope i ke kūlana kūpono. A i kēia manawa pono mākou e hoʻololi i ka mokuʻāina o ka lua me ka mea hope, ke kolu me ka penultimate, a pēlā aku. Ma hope o kēia pōʻai o ka hoʻololi ʻana, aia nā mokuʻāina o nā mea āpau i ke kūlana kūpono. Loaʻa nā hoʻololi O(2M) ~ O(1) i ka huina.

Ka nānā ʻana i nā hana mai ka hālāwai kūkā Hydra - hoʻopaʻa ʻana i ka ukana a me ka mālama ʻana i ka hoʻomanaʻo

ʻAʻole e kāhāhā kēlā ʻano hoʻonā i ka mea makemakika e hoʻomanaʻo mau nei ʻo ka hoʻololi ʻana he haku ia o ʻelua symmetries axial. Ma ke ala, ua hoʻonui nui ʻia no ka hoʻololi ʻana ʻaʻole e hoʻokahi, akā ma nā kūlana K <N. (E kākau i nā manaʻo pehea ka pololei.)

Makemake ʻoe i nā pāʻani? ʻIke ʻoe i nā hoʻonā ʻē aʻe? Kaʻana ma nā manaʻo.

A eia kekahi mau loulou pono i ka hopena:

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka