Cloister β†’ kasamalidwe kosavuta kagulu ka OTP

Pafupifupi ntchito iliyonse yopambana yabizinesi posachedwa kapena pambuyo pake imalowa m'gawo lomwe makulitsidwe opingasa amafunikira. Nthawi zambiri, mutha kungoyambitsa zatsopano ndikuchepetsa kuchuluka kwa katundu. Koma palinso milandu yocheperako pomwe tifunika kuwonetsetsa kuti ma node osiyanasiyana amadziwana ndikugawa mosamala ntchitoyo.

Cloister β†’ kasamalidwe kosavuta kagulu ka OTP

Zinakhala mwayi kuti erlang, yomwe tidasankha chifukwa cha mawu ake osangalatsa komanso hype mozungulira, ili ndi kalasi yoyamba kuthandizira machitidwe ogawidwa. M'malingaliro, izi zikuwoneka ngati zazing'ono:

Mauthenga odutsa pakati pa njira zosiyanasiyana, komanso pakati pa maulalo ndi zowunikira, ndi zowonekera […]

Pochita, zonse zimakhala zovuta kwambiri. Zogawidwa erlang linapangidwa pamene "chotengera" chimatanthawuza bokosi lalikulu lachitsulo lotumizira, ndipo "docker" linali liwu lofanana ndi la longshoreman. MU IP4 panali maadiresi ambiri osagwiritsidwa ntchito, kusweka kwa maukonde nthawi zambiri kumayambitsidwa ndi makoswe omwe amatafuna kudzera pa chingwe, ndipo nthawi yowonjezereka ya nthawi yopangira kupanga inayesedwa zaka zambiri.

Tsopano tonse ndife odzidalira modabwitsa, timapakidwa, komanso timagawidwa erlang m'malo omwe ma adilesi osinthika a IP amaperekedwa pa mfundo yachisawawa chachikulu, ndipo node zimatha kuwoneka ndikuzimiririka pakufuna kwa chidendene chakumanzere cha wopanga. Kupewa milu ya ma boilerplate code mu polojekiti iliyonse yomwe ikugawidwa erlang, polimbana ndi malo odana nawo, chithandizo chimafunika.

ndemanga: Ndikudziwa kuti alipo libcluster. Ndizozizira kwambiri, zili ndi nyenyezi zoposa chikwi, wolembayo ndi wotchuka m'deralo, ndi zonsezo. Ngati njira zoperekedwa ndi phukusili popanga ndi kusunga masango ndizokwanira kwa inu, ndine wokondwa kwa inu. Tsoka ilo, ndikufuna zambiri. Ndikufuna kuwongolera khwekhwe mwatsatanetsatane osati kukhala wowonera kunja kwa zisudzo zakukonzanso magulu.

amafuna

Zomwe ndimafunikira ndekha zinali laibulale yomwe ingatenge kasamalidwe ka gululi ndipo ikhale ndi zinthu zotsatirazi:

  • ntchito yowonekera ndi mndandanda wazolemba zolimba komanso zodziwika bwino kudzera mu mautumiki erlang;
  • kuyimbanso kogwira ntchito pakusintha kulikonse kwa topology (node ​​apo, node apa, kusakhazikika kwa netiweki, kugawanika);
  • mawonekedwe owonekera poyambitsa gulu lomwe lili ndi mayina aatali komanso achidule, monga momwe zilili :nonode@nohost;
  • Thandizo la Docker kuchokera m'bokosi, osalemba nambala yachitukuko.

Zomalizazi zikutanthauza kuti nditayesa kugwiritsa ntchito kwanuko :nonode@nohost, kapena m'malo ogawidwa mongogwiritsa ntchito test_cluster_task, ndikungofuna kuthamanga docker-compose up --scale my_app=3 ndikuwona momwe imachitira maulendo atatu mu docker popanda kusintha kwa code. Ndikufunanso mapulogalamu odalira ngati mnesia - topology ikasintha, kuseri kwazithunzi amamanganso gululo popanda kukankha kwina kulikonse kuchokera pakugwiritsa ntchito.

Wofotokozera sinalingaliridwa kukhala laibulale yokhoza kuchita chilichonse kuyambira pagulu mpaka kupanga khofi. Si chipolopolo chasiliva chomwe chimafuna kuphimba milandu yonse yomwe ingatheke, kapena kukhala yankho lathunthu pamaphunziro monga momwe akatswiri amayambira. CS kuyikidwa mu nthawi iyi. Laibulale iyi idapangidwa kuti izigwira ntchito momveka bwino, koma imagwira ntchito yake osati yayikulu kwambiri. Cholinga ichi chidzakhala kupereka kuwonekera kwathunthu pakati pa chitukuko cha m'deralo ndi malo ogawanika otanuka odzaza ndi zotengera zankhanza.

Njira yosankhidwa

Wofotokozera idapangidwa kuti iziyendetsedwa ngati pulogalamu, ngakhale ogwiritsa ntchito apamwamba amatha kugwira ntchito ndikusonkhanitsa ndikukonza gululo pamanja poyendetsa mwachindunji. Cloister.Manager mu mtengo woyang'anira ntchito yomwe mukufuna.

Ikayendetsedwa ngati pulogalamu, laibulale imadalira config, pomwe amawerenga mfundo zotsatirazi:

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

Ma parameter ali pamwambawa akutanthauza izi: Wofotokozera amagwiritsidwa ntchito pa OTP :my_app, amagwiritsa kupezeka kwa erlang service kulumikiza mfundo, osachepera atatu, ndi MyApp.Listener module (kukhazikitsa @behaviour Cloister.Listener) imakonzedwa kuti ilandire zidziwitso za kusintha kwa topology. Kufotokozera mwatsatanetsatane kasinthidwe wathunthu angapezeke mu zolemba.

Ndi kasinthidwe izi, ntchito Wofotokozera kudzakhala kuyambitsa mwamagawo, kuchedwetsa njira yoyambira ntchito yaikulu mpaka mgwirizano ufikire (mfundo zitatu zikugwirizana ndi kugwirizana, monga momwe tawonetsera pamwambapa.) Izi zimapereka mwayi waukulu wogwiritsa ntchito mwayi woganiza kuti pamene ayamba, gululo likupezeka kale. Nthawi zonse topology ikasintha (padzakhala ambiri aiwo, chifukwa ma node samayamba molumikizana), wogwirizira adzatchedwa MyApp.Listener.on_state_change/2. Nthawi zambiri timachitapo kanthu tikalandira meseji %Cloister.Monitor{status: :up}, kutanthauza: β€œMoni, tsango lasonkhanitsidwa.”

Nthawi zambiri, unsembe consensus: 3 ndizabwino chifukwa ngakhale tikuyembekeza kuti ma node ambiri alumikizane, kuyimbanso kumadutsa status: :rehashing β†’ status: :up pa mfundo iliyonse yomwe yangowonjezeredwa kumene kapena kuchotsedwa.

Mukayamba mumalowedwe achitukuko, mumangofunika kukhazikitsa consensus: 1 ΠΈ Wofotokozera adzalumpha mosangalala kudikirira msonkhano wamagulu akawona :nonode@nohost, kapena :node@host, kapena :[email protected] - kutengera momwe node idakhazikitsidwa (:none | :shortnames | :longnames).

Distributed Application Management

Ntchito zogawidwa zomwe sizili mu vacuum nthawi zambiri zimakhala ndi zodalira zomwe zimagawidwa, monga mnesia. Ndizosavuta kwa ife kuthana ndi kukonzanso kwawo kuchokera pakuyimbanso komweko on_state_change/2. Pano, mwachitsanzo, ndikulongosola mwatsatanetsatane momwe mungakhazikitsirenso mnesia pa ntchentche zolemba Wofotokozera.

Ubwino waukulu wogwiritsa ntchito Wofotokozera ndikuti imagwira ntchito zonse zofunika kuti amangenso tsango pambuyo pa kusintha kwa topology pansi pa hood. Ntchitoyi imangoyenda m'malo omwe adagawidwa kale, ndi ma node onse olumikizidwa, mosasamala kanthu kuti timadziwa ma adilesi a IP motero mayina a node pasadakhale, kapena apatsidwa / kusinthidwa mwamphamvu. Izi sizifuna makonda apadera a docker ndipo kuchokera pamalingaliro a wopanga mapulogalamu, palibe kusiyana pakati pa kuthamanga kumalo ogawidwa kapena kuthamanga komweko. :nonode@nohost. Mutha kuwerenga zambiri za izi mu zolemba.

Ngakhale kusintha kovutirapo kwa kusintha kwa topology kumatheka kudzera pakukhazikitsa makonda MyApp.Listener, pakhoza kukhala nthawi zonse zomwe zili m'mphepete mwa ma laibulalewa ndi zokonda za kasinthidwe zimatsimikizira kukhala maziko a kukhazikitsa. Zili bwino, ingotengani pamwambapa libcluster, yomwe ili ndi cholinga chambiri, kapena gwiritsani ntchito gulu lotsika nokha. Cholinga cha laibulale ya code iyi sikungofotokoza zochitika zilizonse, koma kugwiritsa ntchito zochitika zodziwika bwino popanda kupweteka kosafunikira komanso kukopa-paste.

Taonani: pa nthawi iyi pachiyambi panali mawu oti "Kusonkhana kwachimwemwe!", Ndipo Yandex, yomwe ndimamasulira (sindiyenera kudutsa m'madikishonale ndekha), inandipatsa mwayi woti "Kusonkhana kwachimwemwe!" Mwina ndizosatheka kulingalira kumasulira kwabwinoko, makamaka potengera momwe dziko lilili.

Source: www.habr.com

Kuwonjezera ndemanga