Cloister β†’ nyore OTP cluster manejimendi

Anenge ese akabudirira bhizinesi application nekukurumidza kana gare gare inopinda muchikamu icho chakachinjika chiyero chinodiwa. Muzviitiko zvakawanda, iwe unogona kungotanga chiitiko chitsva uye kuderedza mutoro wepakati. Asi kunewo zviitiko zvidiki izvo isu tinofanirwa kuve nechokwadi chekuti node dzakasiyana dzinoziva nezve mumwe nemumwe uye nekunyatso kugovera basa.

Cloister β†’ nyore OTP cluster manejimendi

Zvakaita rombo rakanaka kuti erlang, iyo yatakasarudza kune yayo inonakidza syntax uye hype yakaitenderedza, ine yekutanga-kirasi kutsigirwa kwezvirongwa zvakagoverwa. Muchirevo, izvi zvinonzwika zvisina maturo zvachose:

Mharidzo inopfuura pakati pemaitiro panzvimbo dzakasiyana, pamwe nepakati pezvinongedzo nemamonitor, iri pachena […]

Mukuita, zvinhu zvose zvishoma zvakaoma. Distributed erlang Yakagadzirwa apo "container" yaireva bhokisi hombe resimbi rekutakura, uye "docker" raingove rimwechete rekuti longshoreman. IN IP4 maive nemakero akawanda asina kubatwa, network breaks yaiwanzokonzerwa nemakonzo achitsenga netambo, uye avhareji uptime yegadziriro yekugadzira yakayerwa mumakumi emakore.

Iye zvino isu tese tave kuzviriritira zvinoshamisa, takaputirwa, uye tichimhanya takagoverwa erlang munzvimbo umo maadhiresi eIP ane simba anopihwa pamusimboti wekusagadzikana kukuru, uye node dzinogona kuoneka nekunyangarika pakuda kwechitsitsinho chekuruboshwe chemugadziri. Kuti udzivise mirwi yeboilerplate kodhi mune yega purojekiti iri kuita yakagoverwa erlang, kurwisana nemhoteredzo ine utsinye, rubatsiro runodiwa.

taura pfungwa: Ndinoziva kuti zviripo libcluster. Zvakanaka chaizvo, zvine nyeredzi dzinopfuura chiuru, munyori ane mukurumbira munharaunda, uye zvese izvo. Kana nzira dzinopihwa neiyi package yekugadzira nekuchengetedza sumbu dzakakukwanira iwe, ndinofara newe. Zvinosuruvarisa, ndinoda zvakawanda. Ini ndinoda kudzora kuseta zvakadzama uye kuti ndisava muoni wekunze mune theatre yekurongazve sumbu.

zvinodiwa

Chandaida pachangu yaive raibhurari yaizotora manejimendi echikwata ichi uye yaizova nezvinhu zvinotevera:

  • basa rakajeka nezvose zviri zviviri zvakaomesesa-coded rondedzero yemanodhi uye ine simba kuwanikwa kuburikidza nemasevhisi erlang;
  • inoshanda zvizere kufona kune yega yega topology shanduko (node ​​ipapo, node pano, kusagadzikana kwetiweki, kupatsanurwa);
  • transparent interface yekutangisa cluster ine mazita marefu uye mapfupi, sekunge :nonode@nohost;
  • Docker rutsigiro kunze kwebhokisi, pasina kunyora kodhi yezvivakwa.

Iyo yekupedzisira inoreva kuti mushure mekunge ndayedza application munharaunda imomo :nonode@nohost, kana munzvimbo yakagovaniswa zvisirizvo uchishandisa test_cluster_task, ndinoda kumhanya chete docker-compose up --scale my_app=3 uye ona kuti inoita sei zviitiko zvitatu mu docker pasina chero shanduko yekodhi. Ini ndinodawo zvinoenderana neapps senge mnesia - kana iyo topology yachinja, kuseri kwezviitiko ivo vanovakazve cluster mhenyu pasina imwe yekuwedzera kick kubva mukushandisa.

Cloister haina kuitirwa kuve raibhurari inokwanisa zvese kubva pakutsigira sumbu kusvika pakugadzira kofi. Haisi bara resirivheri rinovavarira kuvhara nyaya dzese dzinobvira, kana kuve mhinduro yakakwana mune zvedzidzo mupfungwa yekuti theorists kubva. CS kuiswa mutemu iyi. Raibhurari iyi yakagadzirirwa kuita chinangwa chakajeka, asi ita basa rayo risiri rakakura-zvakanyanya. Ichi chinangwa chichava chekupa pachena kuzere pakati penzvimbo yekusimudzira yenzvimbo uye yakagoverwa elastic nharaunda izere nemidziyo ine hutsinye.

Nzira yakasarudzwa

Cloister inoitirwa kuti imhanyirwe sechishandiso, kunyangwe vashandisi vepamberi vanogona kushanda nekuungana uye kugadzirisa sumbu racho nemaoko nekumhanya zvakananga. Cloister.Manager mune yakanangwa application's supervisor tree.

Kana ichimhanya sechishandiso, raibhurari inovimba nayo config, parinoverenga zvinotevera zvakakosha zvakakosha:

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

Maparameter ari pamusoro anoreva chaizvo zvinotevera: Cloister inoshandiswa kuOTP application :my_app, inoshandisa erlang sevhisi kuwanikwa kubatanidza node, kanenge matatu, uye MyApp.Listener module (kuita @behaviour Cloister.Listener) inogadzirirwa kugamuchira zviziviso pamusoro pekuchinja kwetopology. Tsanangudzo yakadzama yegadziriro yakakwana inogona kuwanikwa mukati zvinyorwa.

Nekugadziriswa uku, iyo application Cloister vachava kutanga mumatanho, kunonoka nzira yekutanga chikumbiro chikuru kusvikira kubvumirana kwasvika (node ​​nhatu dzakabatana uye dzakabatana, semuenzaniso uri pamusoro.) Izvi zvinopa chikumbiro chikuru mukana wekufungidzira kuti painotanga, sumbu ratovepo. Pese panochinja iyo topology (pachave neakawanda awo, nekuti node hadzitangi zvakazara synchronously), mubati achadaidzwa. MyApp.Listener.on_state_change/2. Nguva zhinji tinoita chiitiko kana tagamuchira mamiriro meseji %Cloister.Monitor{status: :up}, zvinoreva kuti: β€œMhoroi, sumbu racho raungana.”

Kazhinji, kuiswa consensus: 3 yakakwana nekuti kunyangwe isu tichitarisira mamwe ma node kuti abatanidze, iyo callback ichapfuura status: :rehashing β†’ status: :up pane chero ichangobva kuwedzerwa kana kubviswa node.

Paunenge uchitanga mukuvandudza mode, iwe unongoda kuseta consensus: 1 ΠΈ Cloister achasvetuka nemufaro kumirira kuungana kwecluster kana aona :nonode@nohost, kana :node@host, kana :[email protected] - zvichienderana nekuti iyo node yakagadziriswa sei (:none | :shortnames | :longnames).

Distributed Application Management

Zvishandiso zvakagoverwa zvisiri muvacuum zvinowanzo sanganisira zvinotsamira zvakagoverwa, senge mnesia. Zviri nyore kwatiri kubata kugadziridza kwavo kubva kune imwechete callback on_state_change/2. Heino, semuenzaniso, ine tsananguro yakadzama yekuti ungagadzirisa sei mnesia pakubhururuka mukati zvinyorwa Cloister.

Kubatsira kukuru kwekushandisa Cloister ndeyekuti inoita mabasa ese anodiwa ekuvaka patsva cluster mushure mekuchinja kwetopology pasi pehodhi. Chikumbiro chinongomhanya munzvimbo yakatogadzirirwa yakagoverwa, iine node dzese dzakabatana, zvisinei nekuti tinoziva kero dzeIP uye nekudaro mazita enode pamberi, kana ivo vakapihwa zvine simba / kushandurwa. Izvi hazvidi zvachose yakakosha docker kumisikidzwa marongero uye kubva kune yekuvandudza application pamaonero, hapana mutsauko pakati pekumhanya munzvimbo yakagoverwa kana kumhanya mune yemuno. :nonode@nohost. Unogona kuverenga zvakawanda pamusoro peizvi mu zvinyorwa.

Kunyangwe kubata kwakaoma kwekuchinja kwetopology kunogoneka kuburikidza nekuita tsika MyApp.Listener, panogona kunge paine zviitiko zvemupendero apo izvi zvimisikidzo zveraibhurari uye zvigadziriso zvakarerekera zvinoratidza kuti ndiwo makona ekuita. Zvakanaka, ingotora zviri pamusoro libcluster, iyo inonyanya-chinangwa, kana kutobata iyo yakaderera-level cluster iwe pachako. Chinangwa cheiyi kodhi raibhurari hachisi chekuvhara zvese zvinogoneka, asi kushandisa iyo yakajairika mamiriro pasina marwadzo asina kufanira uye anorema kopi-namira.

Cherechedza: panguva ino mune yepakutanga pakanga paine mutsara wekuti "Happy clustering!", Uye Yandex, iyo yandinoshandura nayo (handifanire kuenda nemaduramazwi ini), yakandipa sarudzo "Kufara kubatanidza!" Zvichida hazvibviri kufungidzira shanduro iri nani, kunyanya maererano nemamiriro ezvinhu ezvematongerwo enyika aripo.

Source: www.habr.com

Voeg