Cloister β†’ yooj yim OTP pawg tswj

Yuav luag txhua daim ntawv thov kev lag luam ua tiav sai lossis tom qab nkag mus rau theem uas yuav tsum tau ntsuas kab rov tav. Feem ntau, koj tuaj yeem pib qhov piv txwv tshiab thiab txo qhov nruab nrab ntawm qhov nruab nrab. Tab sis kuj tseem muaj cov teeb meem tsis tseem ceeb uas peb yuav tsum ua kom ntseeg tau tias cov nodes sib txawv paub txog ib leeg thiab ua tib zoo faib cov haujlwm.

Cloister β†’ yooj yim OTP pawg tswj

Nws muab tawm thiaj li muaj hmoo erlang, uas peb xaiv rau nws qab ntxiag syntax thiab hype nyob ib ncig ntawm nws, muaj ib tug thawj-chav kawm ntawv kev them nyiaj yug rau kev faib tshuab. Hauv kev xav, qhov no suab tsis tseem ceeb kiag li:

Cov lus hla ntawm cov txheej txheem ntawm cov nodes sib txawv, nrog rau ntawm kev sib txuas thiab saib, yog pob tshab […]

Hauv kev xyaum, txhua yam yog me ntsis nyuaj. Muab faib erlang tau tsim thaum "container" txhais tau hais tias lub thawv hlau loj rau kev xa khoom, thiab "docker" tsuas yog ib lub ntsiab lus rau longshoreman. IN IP4 muaj ntau qhov chaw nyob tsis muaj neeg nyob, kev sib tsoo network feem ntau yog tshwm sim los ntawm cov nas zom los ntawm cov kab hluav taws xob, thiab qhov nruab nrab uptime ntawm cov txheej txheem tsim khoom tau ntsuas nyob rau hauv kaum xyoo.

Tam sim no peb txhua tus muaj peev xwm ua tau tus kheej txaus, ntim, thiab khiav faib erlang nyob rau hauv ib qho chaw nyob qhov twg dynamic IP chaw nyob raug xa tawm ntawm lub hauv paus ntsiab lus ntawm randomness zoo, thiab cov nodes tuaj yeem tshwm sim thiab ploj ntawm lub siab ntawm sab laug pob taws ntawm tus teem sijhawm. Txhawm rau kom tsis txhob pawg ntawm boilerplate code nyob rau hauv txhua qhov project khiav ib qho kev faib erlang, txhawm rau tiv thaiv ib puag ncig hostile, kev pab yog xav tau.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Kuv paub tias muaj libcluster. Nws yog txias heev, nws muaj tshaj ib txhiab lub hnub qub, tus sau yog nto moo nyob rau hauv lub zej zog, thiab tag nrho cov ntawd. Yog tias cov txheej txheem muab los ntawm pob no rau kev tsim thiab tswj cov pawg txaus rau koj, kuv zoo siab rau koj. Hmoov tsis zoo, kuv xav tau ntau ntxiv. Kuv xav tswj kev teeb tsa hauv kev nthuav dav thiab tsis yog tus saib sab nraud hauv kev ua yeeb yam ntawm pawg reorganization.

uas yuav tsum tau

Qhov kuv tus kheej xav tau yog lub tsev qiv ntawv uas yuav tswj hwm pawg thiab yuav muaj cov khoom hauv qab no:

  • pob tshab ua hauj lwm nrog ob lub hard-coded npe ntawm nodes thiab dynamic nrhiav tau los ntawm cov kev pab cuam erlang;
  • tag nrho kev ua haujlwm hu rov qab rau txhua qhov kev hloov pauv topology (node ​​muaj, node ntawm no, network tsis ruaj khov, sib cais);
  • pob tshab interface rau launching ib pawg nrog ntev thiab luv lub npe, xws li nrog :nonode@nohost;
  • Docker kev txhawb nqa tawm ntawm lub thawv, tsis tas yuav sau cov txheej txheem kev teeb tsa.

Qhov kawg txhais tau tias tom qab kuv sim daim ntawv thov hauv zos hauv :nonode@nohost, los yog nyob rau hauv ib puag ncig kev faib khoom siv test_cluster_task, Kuv tsuas xav khiav docker-compose up --scale my_app=3 thiab saib seb nws ua li cas peb zaug hauv docker yam tsis muaj kev hloov pauv. Kuv kuj xav tau daim ntawv thov raws li mnesia - Thaum lub topology hloov, tom qab scenes lawv rov tsim lub pawg nyob tsis muaj kev ncaws pob ntxiv los ntawm daim ntawv thov.

Lub tsev teev ntuj tsis yog npaj los ua ib lub tsev qiv ntawv muaj peev xwm ntawm txhua yam los ntawm kev txhawb nqa pawg ua kas fes. Nws tsis yog ib lub mos txwv nyiaj uas lub hom phiaj los npog tag nrho cov teeb meem tshwm sim, los yog kev kawm tiav kev daws teeb meem hauv kev nkag siab tias cov kws tshawb fawb los ntawm CS muab tso rau hauv lo lus no. Lub tsev qiv ntawv no yog tsim los ua haujlwm kom meej meej, tab sis ua nws txoj haujlwm tsis dhau-loj zoo kawg nkaus. Lub hom phiaj no yuav yog los muab cov pob tshab tiav ntawm ib puag ncig kev txhim kho hauv zos thiab ib puag ncig uas muaj kev ywj pheej uas muaj tag nrho ntawm cov thawv tsis zoo.

Xaiv txoj kev

Lub tsev teev ntuj yog npaj los khiav raws li daim ntawv thov, txawm hais tias cov neeg siv siab heev tuaj yeem ua haujlwm nrog kev sib dhos thiab kev saib xyuas ntawm pawg manually los ntawm kev khiav ncaj qha Cloister.Manager nyob rau hauv lub hom phiaj daim ntawv thov tus thawj saib xyuas tsob ntoo.

Thaum khiav raws li daim ntawv thov, lub tsev qiv ntawv tso siab rau config, los ntawm qhov uas nws nyeem cov hauv qab no qhov tseem ceeb:

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

Cov parameter saum toj no txhais tau hais tias cov hauv qab no: Lub tsev teev ntuj siv rau daim ntawv thov OTP :my_app, siv kev pabcuam nrhiav pom txuas nodes, yam tsawg kawg peb, thiab MyApp.Listener module (ua @behaviour Cloister.Listener) tau teeb tsa kom tau txais cov ntawv ceeb toom txog kev hloov pauv topology. Cov lus piav qhia ntxaws txog kev teeb tsa tiav tuaj yeem pom hauv cov ntaub ntawv.

Nrog rau qhov kev teeb tsa no, daim ntawv thov Lub tsev teev ntuj yuav tso rau hauv cov theem, ncua cov txheej txheem ntawm kev pib daim ntawv thov tseem ceeb kom txog thaum kev pom zoo tau mus txog (peb lub nodes tau txuas thiab txuas nrog, zoo li hauv qhov piv txwv saum toj no.) Qhov no muab lub sijhawm rau daim ntawv thov tseem ceeb los xav tias thaum nws pib, pawg twb muaj lawm. Thaum twg lub topology hloov (yuav muaj ntau ntawm lawv, vim hais tias cov nodes tsis pib kiag li synchronously), tus handler yuav raug hu. MyApp.Listener.on_state_change/2. Feem ntau peb ua ib qho kev nqis tes ua thaum peb tau txais xov xwm xwm txheej %Cloister.Monitor{status: :up}, uas txhais tau tias: "Nyob zoo, pawg tau sib sau ua ke."

Feem ntau, installation consensus: 3 yog qhov zoo tshaj plaws vim tias txawm tias peb cia siab tias yuav txuas ntxiv cov nodes, kev hu rov qab yuav dhau mus status: :rehashing β†’ status: :up ntawm ib qho tshiab ntxiv lossis tshem tawm node.

Thaum pib hauv hom kev loj hlob, koj tsuas yog yuav tsum tau teeb tsa consensus: 1 ΠΈ Lub tsev teev ntuj yuav zoo siab hla qhov tos rau pawg sib dhos thaum nws pom :nonode@nohost, lossis :node@host, lossis :[email protected] - nyob ntawm seb qhov node tau teeb tsa li cas (:none | :shortnames | :longnames).

Distributed Application Management

Distributed applications tsis nyob rau hauv lub tshuab nqus tsev feem ntau muaj xws li faib dependencies, xws li mnesia. Nws yog ib qho yooj yim rau peb lis lawv reconfiguration los ntawm tib callback on_state_change/2. Ntawm no, piv txwv li, yog cov lus piav qhia ntxaws txog yuav ua li cas rov kho dua mnesia ntawm ya hauv cov ntaub ntawv Lub tsev teev ntuj.

Lub ntsiab kom zoo dua ntawm kev siv Lub tsev teev ntuj yog tias nws ua txhua yam haujlwm tsim nyog los tsim kho pawg tom qab hloov pauv topology hauv qab hood. Daim ntawv thov tsuas yog khiav hauv ib puag ncig uas twb tau npaj lawm, nrog rau tag nrho cov nodes txuas nrog, tsis hais seb peb puas paub tus IP chaw nyob thiab yog li cov npe ntawm cov npe ua ntej, lossis lawv tau raug xa tawm / hloov pauv. Qhov no yuav tsum tsis muaj qhov tshwj xeeb docker configuration teeb tsa thiab los ntawm tus tsim daim ntawv thov kev xav, tsis muaj qhov sib txawv ntawm kev khiav hauv ib puag ncig los yog khiav hauv ib cheeb tsam. :nonode@nohost. Koj tuaj yeem nyeem ntxiv txog qhov no hauv cov ntaub ntawv.

Txawm hais tias txoj kev tuav ntawm topology hloov pauv tau los ntawm kev ua raws li kev cai MyApp.Listener, tej zaum yuav muaj cov rooj plaub ntug uas cov tsev qiv ntawv txwv thiab kev teeb tsa tsis ncaj ncees ua pov thawj tias yog lub hauv paus ntawm kev siv. Nws zoo, cia li nqa cov saum toj no libcluster, uas yog lub hom phiaj ntau dua, lossis txawm tias tuav cov pawg qis ntawm koj tus kheej. Lub hom phiaj ntawm lub tsev qiv ntawv code no tsis yog los npog txhua qhov teeb meem tshwm sim, tab sis siv cov xwm txheej feem ntau yam tsis muaj qhov mob tsis tsim nyog thiab cumbersome copy-paste.

Nco ntsoov: Nyob rau ntawm lub sijhawm no hauv tus thawj muaj cov kab lus "Zoo siab pawg!", thiab Yandex, uas kuv txhais lus (Kuv tsis tas yuav mus rau hauv phau ntawv txhais lus kuv tus kheej), muab rau kuv xaiv "Zoo siab pawg!" Tej zaum nws tsis yooj yim sua kom xav txog qhov kev txhais lus zoo dua, tshwj xeeb tshaj yog nyob rau hauv lub teeb ntawm qhov xwm txheej tam sim no.

Tau qhov twg los: www.hab.com

Ntxiv ib saib