No ke aha ʻoe e makemake ai i ka hoʻopiʻi semi-synchronous?

Aloha kākou. Hoʻopili ʻo Vladislav Rodin. I kēia manawa ke aʻo nei au i nā papa ma ka Software Architecture a me High-Stress Software Architecture ma OTUS. I ka hoʻomaka ʻana o kahi kahawai papa hou "Hoʻolālā Haʻawe Kiʻekiʻe" Ua hoʻoholo wau e kākau i kahi ʻāpana pōkole o nā mea kumu aʻu e makemake ai e kaʻana like me ʻoe.

No ke aha ʻoe e makemake ai i ka hoʻopiʻi semi-synchronous?

Hōʻike

Ma muli o ka hiki i ka HDD ke hana ma kahi o 400-700 mau hana i kēlā me kēia kekona (he mea like ʻole me nā rps maʻamau ma kahi ʻōnaehana kiʻekiʻe), ʻo ka ʻikepili disk maʻamau ka bottleneck o ka hoʻolālā. No laila, pono e nānā pono i nā ʻano scaling o kēia waihona.

I kēia manawa, aia 2 mau ʻano hoʻohālikelike ʻikepili: replication a sharding. Hāʻawi ʻo Sharding iā ʻoe e hoʻonui i ka hana kākau, a ma muli o ka hopena, e hoʻemi i ka rps no ke kākau ʻana i kēlā me kēia kikowaena i kāu hui. Hiki iā ʻoe ke hana i ka hana like, akā me nā hana heluhelu. ʻO ia ke kumu i hoʻolaʻa ʻia ai kēia ʻatikala.

Hoʻopili hou

Inā ʻoe e nānā i ka replication ma kahi kiʻekiʻe loa, he mea maʻalahi ia: hoʻokahi kāu kikowaena, aia ka ʻikepili ma luna, a laila ʻaʻole hiki i kēia kikowaena ke hoʻokō i ka ukana o ka heluhelu ʻana i kēia ʻikepili. Hoʻohui ʻoe i ʻelua mau kikowaena hou aʻe, hoʻonohonoho i ka ʻikepili ma nā kikowaena āpau, a hiki i ka mea hoʻohana ke heluhelu mai kekahi kikowaena i kāu hui.

ʻOiai ka maʻalahi o ka maʻalahi, aia kekahi mau koho no ka hoʻokaʻawale ʻana i nā hoʻokō like ʻole o kēia papahana:

  • Ma nā kuleana ma ka pūʻulu (master-master or master-slave)
  • Ma nā mea i hoʻouna ʻia (ma muli o ka lālani, ma muli o ka ʻōlelo a i ʻole hui ʻia)
  • E like me ka mīkini hoʻonohonoho node

I kēia lā e hana mākou i ka helu 3.

Pehea e loaʻa ai kahi hana hoʻolimalima?

ʻAʻole pili pololei kēia kumuhana i ka hoʻopili hou ʻana; hiki ke kākau ʻia kahi ʻatikala ʻokoʻa ma luna, akā no ka mea ʻaʻole pono ka heluhelu hou ʻana me ka ʻole o ka hoʻomaopopo ʻana i ke ʻano hana hoʻopaʻa ʻana, e hoʻomanaʻo wau iā ʻoe i nā mea maʻamau. Hana ʻia kahi hana kālepa i 3 mau pae:

  1. Ke hoʻopaʻa ʻana i kahi kālepa i ka waihona waihona.
  2. Ke hoʻohana nei i kahi kālepa ma kahi mīkini waihona.
  3. E hoʻihoʻi ana i ka hōʻoia i ka mea kūʻai aku ua hoʻokō pono ʻia ke kālepa.

Ma nā ʻikepili like ʻole, hiki i kēia algorithm ke loaʻa nā nuances: no ka laʻana, i loko o ka ʻenekini InnoDB o ka waihona MySQL aia nā 2 logs: hoʻokahi no ka replication (binary log), a ʻo kekahi no ka mālama ʻana i ka ACID (undo/redo log), ʻoiai ma PostgreSQL aia hoʻokahi log e hana ana i nā hana ʻelua (kākau i mua log = WAL). Akā ʻo ka mea i hōʻike ʻia ma luna nei, ʻo ia ka manaʻo maʻamau, e ʻae ʻole i ka noʻonoʻo ʻana i kēlā mau nuances.

Hoʻopili like (sync).

E hoʻohui i ka loiloi e hana hou i nā loli i loaʻa i ka algorithm commit transaction:

  1. Ke hoʻopaʻa ʻana i kahi kālepa i ka waihona waihona.
  2. Ke hoʻohana nei i kahi kālepa ma kahi mīkini waihona.
  3. Ka hoʻouna ʻana i ka ʻikepili i nā kope a pau.
  4. Loaʻa i ka hōʻoia mai nā replicas a pau ua hoʻopau ʻia kahi kālepa ma luna o lākou.
  5. E hoʻihoʻi ana i ka hōʻoia i ka mea kūʻai aku ua hoʻokō pono ʻia ke kālepa.

Me kēia ala, loaʻa iā mākou kekahi mau hemahema:

  • kali ka mea kūʻai no ka hoʻololi ʻana i nā replicas a pau.
  • ke piʻi aʻe ka helu o nā nodes i loko o ka puʻupuʻu, hoʻemi mākou i ka hiki ke holomua ka hana kākau.

Inā ʻoi aʻe a ʻoi aku ka liʻiliʻi o nā mea a pau me ka helu 1, a laila pono e wehewehe nā kumu o ka helu 2. Inā ʻaʻole i loaʻa iā mākou kahi pane mai ka liʻiliʻi o hoʻokahi node i ka manawa o ka hoʻopiʻi synchronous, hoʻohuli mākou i ke kālepa. No laila, ma ka hoʻonui ʻana i ka helu o nā nodes i ka pūʻulu, hoʻonui ʻoe i ka likelihood e hāʻule ka hana kākau.

Hiki iā mākou ke kali no ka hōʻoia ʻana mai kahi pākēneka o nā nodes, no ka laʻana, mai 51% (quorum)? ʻAe, hiki iā mākou, akā i ka mana maʻamau, koi ʻia ka hōʻoia ʻana mai nā nodes a pau, no ka mea, ʻo ia ke ala e hiki ai iā mākou ke hōʻoia i ka paʻa ʻana o ka ʻikepili i loko o ka pūʻulu, kahi mea kānalua ʻole o kēia ʻano o ka replication.

Hoʻopili like ʻole (async).

E hoʻololi kākou i ka algorithm mua. E hoʻouna mākou i ka ʻikepili i nā replicas "i kekahi manawa ma hope", a "i kekahi manawa ma hope" e hoʻopili ʻia nā loli i nā replicas:

  1. Ke hoʻopaʻa ʻana i kahi kālepa i ka waihona waihona.
  2. Ke hoʻohana nei i kahi kālepa ma kahi mīkini waihona.
  3. E hoʻihoʻi ana i ka hōʻoia i ka mea kūʻai aku ua hoʻokō pono ʻia ke kālepa.
  4. Ka hoʻouna ʻana i ka ʻikepili i nā kope a me ka hoʻololi ʻana iā lākou.

Ke alakaʻi nei kēia ala i ka ʻoiaʻiʻo e hana wikiwiki ka puʻupuʻu, no ka mea ʻaʻole mākou e mālama i ka mea kūʻai aku e kali ana i ka ʻikepili e hiki i nā replicas a hoʻokō ʻia.

Akā ʻo ke ʻano o ka hoʻolei ʻana i ka ʻikepili ma luna o nā replicas "i kekahi manawa ma hope" hiki ke alakaʻi i ka nalowale o kahi kālepa, a i ka nalowale o kahi kālepa i hōʻoia ʻia e ka mea hoʻohana, no ka mea inā ʻaʻole i loaʻa ka manawa e hoʻopili ʻia ka ʻikepili, kahi hōʻoia i ka mea kūʻai aku. e pili ana i ka kūleʻa o ka hana i hoʻouna ʻia, a ʻo ka node i hiki mai ai nā loli i hāʻule i ka HDD, nalowale mākou i ke kālepa, hiki ke alakaʻi i nā hopena maikaʻi ʻole.

Hoʻopili Semisync

ʻO ka hope loa, hele mākou i ka replication semi-synchronous. ʻAʻole ʻike nui ʻia kēia ʻano hana hou a maʻamau paha, akā he mea hoihoi nui ia no ka mea hiki iā ia ke hoʻohui i nā pono o ka replication synchronous a me asynchronous.

E ho'āʻo kākou e hoʻohui i nā ʻaoʻao 2 mua. ʻAʻole mākou e mālama i ka mea kūʻai aku no ka lōʻihi, akā makemake mākou e hoʻopili hou ʻia ka ʻikepili:

  1. Ke hoʻopaʻa ʻana i kahi kālepa i ka waihona waihona.
  2. Ke hoʻohana nei i kahi kālepa ma kahi mīkini waihona.
  3. Ka hoʻouna ʻana i nā ʻikepili i nā kope.
  4. Loaʻa i ka hōʻoia mai ka replica ua loaʻa nā hoʻololi (e hoʻohana ʻia lākou "i kekahi manawa ma hope").
  5. E hoʻihoʻi ana i ka hōʻoia i ka mea kūʻai aku ua hoʻokō pono ʻia ke kālepa.

E ʻoluʻolu e hoʻomaopopo me kēia algorithm, loaʻa ka poho kālepa inā ʻaʻole i loaʻa i ka node nā loli a me ka node kope. Ua manaʻo ʻia ka haʻahaʻa o ka hiki ʻole o ia hemahema, a ua ʻae ʻia kēia mau pilikia.

Akā me kēia ʻano hiki ke loaʻa ka pilikia o ka heluhelu phantom. E noʻonoʻo kākou i kēia hiʻohiʻona: ma ka ʻanuʻu 4, ʻaʻole i loaʻa iā mākou ka hōʻoia mai kekahi kope. Pono mākou e hoʻihoʻi i kēia kālepa a ʻaʻole e hoʻihoʻi i kahi hōʻoia i ka mea kūʻai aku. Ma muli o ka hoʻohana ʻia ʻana o ka ʻikepili ma ka ʻanuʻu 2, aia kahi manawa ma waena o ka pau ʻana o ka ʻanuʻu 2 a me ka rollback o ke kālepa, i ka wā e hiki ai i nā hana like ke ʻike i nā loli pono ʻole i loko o ka waihona.

ʻO ka hoʻopiʻi semisync nalowale

Inā ʻoe e noʻonoʻo liʻiliʻi, hiki iā ʻoe ke hoʻohuli i nā ʻanuʻu o ka algorithm a hoʻoponopono i ka pilikia o ka heluhelu ʻana o phantom i kēia ʻano:

  1. Ke hoʻopaʻa ʻana i kahi kālepa i ka waihona waihona.
  2. Ka hoʻouna ʻana i ka ʻikepili kope.
  3. Loaʻa i ka hōʻoia mai ka replica ua loaʻa nā hoʻololi (e hoʻohana ʻia lākou "i kekahi manawa ma hope").
  4. Ke hoʻohana nei i kahi kālepa ma kahi mīkini waihona.
  5. E hoʻihoʻi ana i ka hōʻoia i ka mea kūʻai aku ua hoʻokō pono ʻia ke kālepa.

I kēia manawa, hana mākou i nā hoʻololi inā ua hana hou ʻia.

hopena

E like me nā manawa a pau, ʻaʻohe hopena kūpono; aia kahi hoʻonohonoho o nā hoʻonā, aia kēlā me kēia mea i kona pono ponoʻī a me nā hemahema a kūpono no ka hoʻoponopono ʻana i nā papa like ʻole o nā pilikia. He ʻoiaʻiʻo loa kēia no ke koho ʻana i kahi mīkini no ka hoʻonohonoho ʻana i ka ʻikepili i loko o kahi waihona replicated. ʻO ka hoʻonohonoho o nā mea maikaʻi i loaʻa i ka replication semi-synchronous he paʻa a hoihoi i hiki ke noʻonoʻo ʻia he kūpono ke nānā ʻia, ʻoiai ka haʻahaʻa haʻahaʻa.

ʻo ia wale nō. E ʻike iā ʻoe ma papa!

Source: www.habr.com

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