Cloister → ka hoʻokele pūʻulu OTP maʻalahi

Aneane e komo koke nā palapala ʻoihana kūleʻa i kahi manawa e koi ʻia ai ka hoʻonui ʻana. I nā manawa he nui, hiki iā ʻoe ke hoʻomaka i kahi manawa hou a hoʻemi i ka awelika ukana. Akā aia kekahi mau hihia liʻiliʻi e pono ai mākou e hōʻoia i ka ʻike ʻana o nā node ʻē aʻe e pili ana i kekahi a e puʻunaue pono i ka hana.

Cloister → ka hoʻokele pūʻulu OTP maʻalahi

Laki loa ia erlang, a mākou i koho ai no kāna syntax ʻoluʻolu a me ka hype a puni ia, he papa mua kākoʻo no nā ʻōnaehana puʻunaue. Ma ke kumumanaʻo, he mea koʻikoʻi kēia:

ʻO ka hele ʻana o ka memo ma waena o nā kaʻina hana ma nā node like ʻole, a ma waena o nā loulou a me nā mākaʻikaʻi, maopopo […]

Ma ka hoʻomaʻamaʻa, ʻoi aku ka paʻakikī o nā mea a pau. Hoʻolaha ʻia erlang Ua hoʻomohala ʻia ka "container" i ka pahu hao nui no ka hoʻouna ʻana, a ʻo ka "docker" kahi huaʻōlelo like no ka longshoreman. IN IP4 he nui nā ʻōlelo i noho ʻole ʻia, ʻo ka hoʻomaha ʻana o ka pūnaewele ma muli o ka ʻai ʻana o nā ʻiole i ke kaula, a ua ana ʻia ka awelika o ka manawa hana o ka ʻōnaehana hana i nā makahiki.

I kēia manawa ua lawa mākou a pau iā mākou iho, hoʻopaʻa ʻia, a hāʻawi ʻia erlang i loko o kahi kaiapuni kahi e hāʻawi ʻia ai nā helu IP koʻikoʻi ma ke kumu o ka randomness nui, a hiki ke ʻike ʻia nā nodes a nalowale i ka makemake o ka kuʻekuʻe hema o ka mea hoʻonohonoho. No ka pale ʻana i nā puʻu o ka boilerplate code i kēlā me kēia pāhana e holo ana i kahi māhele erlang, no ka hakakā ʻana i ka ʻāina ʻino, pono ke kōkua.

i hoʻopuka: Ua ike au aia libcluster. Maikaʻi loa, aia ma luna o hoʻokahi kaukani hōkū, kaulana ka mea kākau ma ke kaiāulu, a me nā mea a pau. Inā lawa nā ʻano hana i hāʻawi ʻia e kēia pūʻulu no ka hana ʻana a me ka mālama ʻana i kahi pūpū, hauʻoli wau iā ʻoe. ʻO ka mea pōʻino, makemake nui au. Makemake au e hoʻomalu i ka hoʻonohonoho i nā kikoʻī a ʻaʻole e lilo i mea nānā ma waho i ka hale kiʻiʻoniʻoni o ka hui hou ʻana.

koi

ʻO kaʻu mea i makemake ai he hale waihona puke nāna e hoʻomalu i ka pūʻulu a loaʻa iā ia nā waiwai penei:

  • hana akaka me ka papa inoa paʻakikī o nā nodes a me ka ʻike ikaika ma o nā lawelawe erlang;
  • ka hoʻihoʻi ʻana i ka hana piha no kēlā me kēia hoʻololi topology (node ​​ma laila, node ma aneʻi, paʻa ʻole o ka pūnaewele, ʻokiʻoki);
  • kaʻana like no ka wehe ʻana i kahi pūʻulu me nā inoa lōʻihi a pōkole, e like me :nonode@nohost;
  • Kākoʻo ʻo Docker ma waho o ka pahu, me ka ʻole e kākau i ka code infrastructure.

ʻO ka mea hope ma hope o koʻu hoʻāʻo ʻana i ka noi ma ka wahi :nonode@nohost, a i ʻole ma kahi kaiapuni i hoʻolaha ʻia me ka hoʻohana ʻana test_cluster_task, Makemake au e holo docker-compose up --scale my_app=3 a ʻike pehea e hoʻokō ai i ʻekolu mau manawa ma docker me ka ʻole o nā loli code. Makemake au i nā noi hilinaʻi like mnesia - i ka wā e loli ai ka topology, ma hope o nā hiʻohiʻona e kūkulu hou lākou i ka pūʻulu e ola me ka ʻole o nā kī hou mai ka noi.

Hui ʻAʻole i manaʻo ʻia e lilo i hale waihona puke e hiki ai i nā mea āpau mai ke kākoʻo ʻana i kahi hui a hiki i ka hana kope. ʻAʻole ia he pōkā kālā e manaʻo ana e uhi i nā hihia āpau, a i ʻole he hopena hoʻonaʻauao piha i ka manaʻo o nā theorists mai CS hookomo i keia huaolelo. Hoʻolālā ʻia kēia waihona e lawelawe i kahi kumu maopopo loa, akā e hana pono i kāna hana ʻaʻole nui loa. ʻO kēia pahuhopu ka hāʻawi ʻana i ka ʻike piha ma waena o ke kaiapuni hoʻomohala kūloko a me kahi kaiapuni elastic i hāʻawi ʻia i piha i nā ipu ʻenemi.

ʻO ke ala koho

Hui manaʻo ʻia e holo ʻia ma ke ʻano he noi, ʻoiai hiki i nā mea hoʻohana kiʻekiʻe ke hana me ka hui ʻana a me ka mālama ʻana i ka pūʻulu me ka lima ma ka holo pololei ʻana Cloister.Manager i loko o ka lāʻau luna o ka noi.

Ke holo ʻia ma ke ʻano he noi, hilinaʻi ka waihona config, mai laila e heluhelu ai i nā waiwai kumu:

config :cloister,
  otp_app: :my_app,
  sentry: :"cloister.local", # or ~w|n1@foo n2@bar|a
  consensus: 3,              # number of nodes to consider
                             #    the cluster is up
  listener: MyApp.Listener   # listener to be called when
                             #    the ring has changed

ʻO nā ʻāpana ma luna ke ʻano maoli kēia: Hui hoʻohana ʻia no ka noi OTP :my_app, hoʻohana ʻike lawelawe erlang e hoʻohui i nā node, ʻekolu paha, a MyApp.Listener module (hoʻokō @behaviour Cloister.Listener) ua hoʻonohonoho ʻia e loaʻa nā leka e pili ana i nā loli topology. Hiki ke loaʻa kahi wehewehe kikoʻī o ka hoʻonohonoho piha ma palapala.

Me kēia hoʻonohonoho, ka noi Hui e e hoʻolana i nā pae, hoʻopaneʻe i ke kaʻina hana o ka hoʻomaka ʻana i ka noi nui a hiki i ka ʻae ʻana (ʻekolu mau nodes i hoʻopili ʻia a hoʻopili ʻia, e like me ka laʻana ma luna.) Hāʻawi kēia i ka noi nui i ka manawa e manaʻo ai i ka wā e hoʻomaka ai, ua loaʻa ka cluster. I kēlā me kēia manawa e loli ai ka topology (e nui ana lākou, no ka mea ʻaʻole hoʻomaka nā nodes me ka synchronously), e kapa ʻia ka mea lawelawe. MyApp.Listener.on_state_change/2. ʻO ka hapa nui o ka manawa mākou e hana i kahi hana ke loaʻa iā mākou kahi memo kūlana %Cloister.Monitor{status: :up}, ʻo ia hoʻi: “Aloha, ua ʻākoakoa ka hui.”

I ka hapanui o nā hihia, hoʻokomo consensus: 3 ʻoi aku ka maikaʻi no ka mea inā mākou e manaʻo e hoʻopili hou aku nā nodes, e hele ka callback status: :rehashingstatus: :up ma kekahi node hou i hoʻohui ʻia a wehe ʻia paha.

Ke hoʻomaka i ke ʻano hoʻomohala, pono ʻoe e hoʻonohonoho consensus: 1 и Hui hauʻoli ʻo ia i ke kali ʻana no ka hui puʻupuʻu ke ʻike ʻo ia :nonode@nohostole :node@hostole :[email protected] - ma muli o ke ʻano i hoʻonohonoho ʻia ai ka node (:none | :shortnames | :longnames).

Hoʻoponopono Noi Hoʻolaha

ʻO nā noi i hāʻawi ʻia ʻaʻole i loko o kahi ʻūhā maʻamau e loaʻa nā hilinaʻi puʻupuʻu, e like me mnesia. He mea maʻalahi iā mākou ke mālama i kā lākou hoʻonohonoho hou ʻana mai ka callback like on_state_change/2. Eia, no ka laʻana, he wehewehe kikoʻī o ka hoʻonohonoho hou ʻana mnesia ma ka lele i loko palapala Hui.

ʻO ka pono nui o ka hoʻohana Hui ʻo ia ka hana i nā hana e pono ai e kūkulu hou i ka hui ma hope o kahi loli topology ma lalo o ka pāpale. Ke holo wale nei ka palapala noi ma kahi kaiapuni i hoʻomākaukau mua ʻia, me nā nodes a pau e pili ana, me ka ʻike ʻole i ka helu IP a no laila nā inoa node ma mua, a i ʻole ua hoʻololi ʻia lākou. ʻAʻole pono kēia i nā hoʻonohonoho hoʻonohonoho docker kūikawā a mai ka manaʻo o ka mea hoʻomohala noi, ʻaʻohe ʻokoʻa ma waena o ka holo ʻana i kahi kaiapuni a i ʻole ka holo ʻana i kahi kūloko. :nonode@nohost. Hiki iā ʻoe ke heluhelu hou aʻe e pili ana i kēia ma palapala.

ʻOiai hiki ke hoʻololi i ka topology ma o ka hoʻokō maʻamau MyApp.Listener, aia paha nā hihia lihi i hōʻike ʻia kēia mau palena waihona a me nā hoʻonohonoho hoʻonohonoho i nā pōhaku kihi o ka hoʻokō. Ua maikaʻi, e lawe wale i ka mea i luna libcluster, ʻoi aku ka manaʻo maʻamau, a i ʻole e hoʻopaʻa i ka puʻupuʻu haʻahaʻa haʻahaʻa iā ʻoe iho. ʻO ka pahuhopu o kēia waihona code ʻaʻole ia e uhi i kēlā me kēia hiʻohiʻona hiki, akā e hoʻohana i ke ʻano maʻamau me ka ʻole o ka ʻeha a me ka paʻakikī paʻakikī.

'Ōlelo Aʻo: I kēia manawa i loko o ka mea kumu, aia ka huaʻōlelo "Happy clustering!", a ʻo Yandex, kahi aʻu e unuhi ai (ʻaʻole pono iaʻu e hele i nā puke weheweheʻōlelo), hāʻawi mai iaʻu i ke koho "Happy clustering!" ʻAʻole hiki ke noʻonoʻo i kahi unuhi ʻoi aku ka maikaʻi, ʻoi aku ka maikaʻi o ke kūlana geopolitical o kēia manawa.

Source: www.habr.com

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