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.
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
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
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
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
Nrog rau qhov kev teeb tsa no, daim ntawv thov Lub tsev teev ntuj yuav MyApp.Listener.on_state_change/2
%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
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
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