I-Cloister β†’ ulawulo olulula lweqela le-OTP

Phantse zonke izicelo zeshishini eziphumeleleyo ngokukhawuleza okanye kamva zingena kwinqanaba apho kufuneka ukulinganisa okuthe tye. Kwiimeko ezininzi, unokuqalisa nje umzekelo omtsha kwaye unciphise umndilili womthwalo. Kodwa kukho iimeko ezincinci apho kufuneka siqinisekise ukuba iindawo ezahlukeneyo ziyazi malunga nomnye kwaye zisasaze ngononophelo umthwalo womsebenzi.

I-Cloister β†’ ulawulo olulula lweqela le-OTP

Kwavela ngethamsanqa ukuba erlang, esiyikhethileyo ngenxa ye-syntax yayo emnandi kunye ne-hype ejikeleze kuyo, inodidi lokuqala inkxaso kwiinkqubo ezisasazwayo. Ngokwethiyori, oku kuvakala kuyinto engenamsebenzi ngokupheleleyo:

Umyalezo odlulayo phakathi kweenkqubo kwiindawo ezahlukeneyo, kunye naphakathi kwamakhonkco kunye nabahloli, uyabonakala […]

Enyanisweni, yonke into inzima ngakumbi. Kusasazwe erlang yaphuhliswa xa igama elithi "container" lithetha ibhokisi yentsimbi enkulu yokuthunyelwa ngenqanawa, kwaye "docker" yayisisithethantonye selongshoreman. IN IP4 kwakukho iidilesi ezininzi ezingasetyenziswanga, ukucinywa kwenethiwekhi ngokuqhelekileyo kwakubangelwa ngamagundane ahlafuna ngeentambo, kunye nexesha eliqhelekileyo lenkqubo yokuvelisa imilinganiselo yamashumi eminyaka.

Ngoku sonke sizimele ngokumangalisayo, sipakishwe, kwaye sisebenza sisasazwa erlang kwindawo apho iidilesi ze-IP eziguquguqukayo zinikezelwa kumgaqo wokungakhethi okukhulu, kunye neendawo ezinokuthi zivele kwaye zinyamalale kwi-whim yesithende sasekhohlo somcwangcisi. Ukunqanda imfumba yekhowudi yeboilerplate kwiprojekthi nganye eqhuba ukuhanjiswa erlang, ukulwa nemekobume enobutshaba, uncedo luyafuneka.

Qaphela:: Ndiyazi ukuba ukhona libcluster. Ipholile ngokwenene, ineenkwenkwezi ezingaphezu kwewaka, umbhali udumile ekuhlaleni, nayo yonke loo nto. Ukuba iindlela ezinikezelwa yile phakheji zokudala kunye nokugcina iqoqo zanele kuwe, ndonwabile kuwe. Ngelishwa, ndifuna kakhulu ngakumbi. Ndifuna ukulawula ukuseta ngokweenkcukacha kwaye ndingabi ngumbukeli wangaphandle kwithiyetha yohlengahlengiso lweqela.

iimfuno

Into ebendiyidinga ngokwam yayilithala leencwadi elaliza kuthatha ulawulo lweqela kwaye lizakuba nezi propati zilandelayo:

  • umsebenzi ocacileyo kunye noluhlu olunzima lwekhowudi kunye nokufumanisa okuguquguqukayo ngeenkonzo erlang;
  • Ukufowunelwa okusebenzayo ngokupheleleyo kulo lonke utshintsho lwe-topology (indawo apho, indawo apha, ukungazinzi kwenethiwekhi, ukwahlula);
  • ujongano olucacileyo lokwazisa iqela elinamagama amade namafutshane, njengaku :nonode@nohost;
  • Inkxaso yeDocker ngaphandle kwebhokisi, ngaphandle kokubhala ikhowudi yeziseko zophuhliso.

Le yokugqibela ithetha ukuba emva kokuba ndivavanye isicelo ekuhlaleni :nonode@nohost, okanye kwindawo esasazwe ngokwenziwa kusetyenziswa test_cluster_task, ndifuna nje ukubaleka docker-compose up --scale my_app=3 kwaye ubone ukuba iqhuba njani iimeko ezintathu kwi-docker ngaphandle kotshintsho lwekhowudi. Ndifuna kwakhona izicelo ezixhomekeke njenge mnesia -Xa i-topology itshintsha, emva kwemidlalo bayakha kwakhona iqela ngaphandle kokukhaba okongeziweyo kwisicelo.

UCloister kwakungenzelwanga ukuba ibe lithala leencwadi elikwaziyo ukwenza yonke into ukusuka ekuxhaseni iqela ukuya ekwenzeni ikofu. Ayiyombumbulu yesilivere ejonge ukugubungela zonke iimeko ezinokubakho, okanye ibe sisisombululo esipheleleyo ngokwemfundo ngokwengqiqo yokuba iithiyori ezivela CS ibekwe kweli xesha. Eli thala leencwadi lenzelwe ukukhonza injongo ecacileyo, kodwa lenze umsebenzi walo ongemkhulu kakhulu ngokugqibeleleyo. Le njongo iya kuba kukubonelela ngokungafihlisi okupheleleyo phakathi kwemekobume yophuhliso lwengingqi kunye nemekobume enwebekayo esasaziweyo ezele zizikhongozeli ezinobutshaba.

Indlela ekhethiweyo

UCloister yenzelwe ukuba iqhutywe njengesicelo, nangona abasebenzisi abaphambili banokusebenza ngokuhlanganisa kunye nokugcinwa kweqela ngesandla ngokuqhuba ngokuthe ngqo. Cloister.Manager kumthi womphathi wesicelo ekujoliswe kuko.

Xa iqhutywa njengesicelo, ithala leencwadi lixhomekeke kuyo config, apho ifunda khona la maxabiso asisiseko alandelayo:

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

Iiparamitha ezingasentla zithetha ngokuthe ngqo oku kulandelayo: UCloister isetyenziselwa usetyenziso lwe-OTP :my_app, isebenzisa ukufunyanwa kwenkonzo yeerlang ukudibanisa iindawo, ubuncinane ezintathu, kunye MyApp.Listener imodyuli (ukuphumeza @behaviour Cloister.Listener) ilungiselelwe ukufumana izaziso malunga notshintsho lwetopology. Inkcazo eneenkcukacha yoqwalaselo olupheleleyo inokufumaneka kwi amaxwebhu.

Ngolu qwalaselo, isicelo UCloister iya kuba sungula ngokwamanqanaba, ukulibazisa inkqubo yokuqaliswa kwesicelo esiphambili de kufike ukuvumelana (ii-nodes ezintathu zixhunyiwe kwaye zixhunyiwe, njengoko kumzekelo ongentla.) Oku kunika isicelo esiphambili ithuba lokucinga ukuba xa iqala, i-cluster sele ikhona. Nanini na i-topology itshintsha (ziya kubakho ezininzi, kuba iindawo zokuhlala zingaqalisi ngokupheleleyo ngaxeshanye), umphathi uya kubizwa ngokuba MyApp.Listener.on_state_change/2. Amaxesha amaninzi sisenza isenzo xa sifumana umyalezo wesimo %Cloister.Monitor{status: :up}, okuthetha ukuthi: "Molo, iqela lihlangene."

Kwiimeko ezininzi, ukufakela consensus: 3 yeyona nto ilungileyo kuba nokuba silindele ukuba iindawo ezininzi ziqhagamshelane, i-callback iya kudlula status: :rehashing β†’ status: :up kuyo nayiphi na indawo entsha yokongeza okanye esusiweyo.

Xa uqala kwimo yophuhliso, kufuneka nje ukuseta consensus: 1 ΠΈ UCloister izakutsiba ngovuyo ukulinda indibano yeqela xa ibona :nonode@nohostokanye :node@hostokanye :[email protected] - kuxhomekeke kwindlela i node yamiselwa ngayo (:none | :shortnames | :longnames).

ULawulo lweSicelo esiSasaziwe

Izicelo ezisasaziweyo ezingekho kwi-vacuum zihlala zibandakanya ukuxhomekeka kokusasazwa, njenge mnesia. Kulula kuthi ukuba siphathe uhlengahlengiso lwabo kwi-callback efanayo on_state_change/2. Apha, umzekelo, inkcazo eneenkcukacha yendlela yokuqwalasela kwakhona mnesia kubhabho ungene amaxwebhu UCloister.

Inzuzo ephambili yokusebenzisa UCloister kukuba yenza yonke imisebenzi eyimfuneko yokwakha ngokutsha iqela emva kotshintsho lwe-topology phantsi kwentloko. Isicelo siqhuba ngokulula kwindawo esele ilungisiwe esasaziweyo, nazo zonke iindawo eziqhagamshelweyo, kungakhathaliseki ukuba siyazazi iidilesi ze-IP kwaye ngoko ke amagama eendawo eziphambili kwangaphambili, okanye ziye zabelwa/zitshintshiwe. Oku kufuna ukuba akukho mahluko okhethekileyo woqwalaselo lwedocker kwaye ukusuka kwindawo yembono yomphuhlisi wesicelo, akukho mahluko phakathi kokusebenza kwindawo esasaziweyo okanye ukusebenza kwindawo yendawo. :nonode@nohost. Unokufunda ngakumbi malunga noku kwi amaxwebhu.

Nangona ukuphathwa okuntsonkothileyo kotshintsho lwe-topology kunokwenzeka ngokuphunyezwa kwesiko MyApp.Listener, kunokuhlala kukho iimeko apho le mida yethala leencwadi kunye nokuthambekela koqwalaselo kubonakala kusisiseko sokuphunyezwa. Kulungile, thatha nje oku kungasentla libcluster, eyona njongo-jikelele ngakumbi, okanye nokubamba iqela elikumgangatho ophantsi ngokwakho. Injongo yale khowudi yelayibrari ayikokugubungela yonke imeko enokwenzeka, kodwa kukusebenzisa eyona meko iqhelekileyo ngaphandle kweentlungu ezingeyomfuneko kunye nekopi-uncamathisele enzima.

Qaphela: ngeli xesha kwi-original kwakukho ibinzana elithi "Iqela elonwabileyo!", Kwaye i-Yandex, endiyiguqulela ngayo (akufuneki ndihambe ngezichazi-magama ngokwam), yandinika ukhetho "Ukudibanisa okuvuyisayo!" Mhlawumbi akunakwenzeka ukucinga inguqulelo engcono, ngakumbi xa kujongwa imeko yangoku ye-geopolitical.

umthombo: www.habr.com

Yongeza izimvo