Prèske tout aplikasyon biznis siksè pi bonè oswa pita antre nan yon faz kote orizontal dekale obligatwa. Nan anpil ka, ou ka senpleman kòmanse yon nouvo egzanp epi redwi mwayèn chaj la. Men, gen tou ka mwens trivial kote nou bezwen asire ke diferan nœuds konnen youn sou lòt epi ak anpil atansyon distribye kantite travay la.
Li te tounen tèlman gen chans sa erlang, ke nou te chwazi pou sentaks bèl li yo ak battage alantou li, gen yon premye klas
Mesaj pase ant pwosesis sou diferan nœuds, osi byen ke ant lyen ak monitè, se transparan [...]
Nan pratik, tout bagay se yon ti kras pi konplike. Distribiye erlang te devlope lè "veso" vle di yon gwo bwat fè pou anbake, ak "docker" te tou senpleman yon sinonim pou longshoreman. NAN IP4 te gen anpil adrès ki pa okipe, kraze rezo yo te koze anjeneral pa rat moulen nan kab la, epi yo te mezire kantite lajan an mwayèn nan sistèm pwodiksyon an nan dè dekad.
Koulye a, nou tout ekstrèmman endepandan, pake, ak kouri distribye erlang nan yon anviwònman kote adrès IP dinamik yo distribye sou prensip la nan gwo owaza, ak nœuds ka parèt ak disparèt nan kapris nan talon gòch la nan orè a. Pou evite pil kòd boilerplate nan chak pwojè kouri yon distribiye erlang, pou konbat anviwònman ostil la, èd nesesè.
Note: Mwen konnen ke gen libcluster
Kondisyon pou
Ki sa mwen pèsonèlman te bezwen se te yon bibliyotèk ki ta pran kontwòl gwoup la epi ki ta gen pwopriyete sa yo:
- travay transparan ak tou de yon lis difisil-kode nan nœuds ak dekouvèt dinamik atravè sèvis yo erlang;
- callback totalman fonksyonèl pou chak chanjman topoloji (nòd la, ne isit la, enstabilite rezo a, divize);
- koòdone transparan pou lanse yon gwoup ak non long ak kout, menm jan ak
:nonode@nohost
; - Docker sipò soti nan bwat la, san yo pa bezwen ekri kòd enfrastrikti.
Lèt la vle di ke apre mwen teste aplikasyon an lokalman nan :nonode@nohost
, oswa nan yon anviwònman distribye atifisyèlman lè l sèvi avèk test_cluster_task
docker-compose up --scale my_app=3
epi wè ki jan li egzekite twa ka nan Docker san okenn chanjman kòd. Mwen vle tou aplikasyon depandan tankou mnesia
- Lè topoloji a chanje, dèyè sèn yo rebati gwoup la ap viv san okenn kout pye anplis nan aplikasyon an.
Mistè pa t 'gen entansyon yo dwe yon bibliyotèk ki kapab tout bagay soti nan sipòte yon gwoup nan fè kafe. Se pa yon bal an ajan ki vize pou kouvri tout ka posib, oswa yon solisyon akademik konplè nan sans ke teorisyen soti nan CS mete nan tèm sa a. Bibliyotèk sa a fèt pou sèvi yon objektif trè klè, men fè travay li pa twò gwo parfe. Objektif sa a pral bay transparans konplè ant anviwònman devlopman lokal la ak yon anviwonman elastik distribiye plen kontenè ostil.
Apwòch chwazi
Mistè gen entansyon kouri kòm yon aplikasyon, byenke itilizatè avanse ka travay ak asanble ak antretyen nan gwoup la manyèlman lè yo kouri dirèkteman. Cloister.Manager
nan pye bwa sipèvizè aplikasyon sib la.
Lè kouri kòm yon aplikasyon, bibliyotèk la depann sou config
, ki soti nan li li valè debaz sa yo:
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
Paramèt ki anwo yo vle di literalman sa ki annapre yo: Mistè itilize pou aplikasyon OTP :my_app
, itilize dekouvèt sèvis erlang konekte nœuds, omwen twa, ak MyApp.Listener
modil (aplike @behaviour Cloister.Listener
Avèk konfigirasyon sa a, aplikasyon an Mistè pral MyApp.Listener.on_state_change/2
%Cloister.Monitor{status: :up}
, ki vle di: "Bonjou, gwoup la reyini."
Nan pifò ka yo, enstalasyon consensus: 3
se pi bon paske menm si nou espere plis nœuds konekte, callback la pral pase status: :rehashing
→ status: :up
sou nenpòt ne ki fèk ajoute oswa retire.
Lè w kòmanse nan mòd devlopman, ou jis bezwen mete consensus: 1
и Mistè pral san pwoblèm mwen tap sote tann pou asanble gwoup lè li wè :nonode@nohost
Oswa :node@host
Oswa :[email protected]
- depann sou ki jan ne la te konfigirasyon (:none | :shortnames | :longnames
).
Jesyon Aplikasyon Distribiye
Aplikasyon distribiye pa nan yon vakyòm anjeneral gen ladan depandans distribiye, tankou mnesia
. Li fasil pou nou jere rekonfigirasyon yo nan menm apèl la on_state_change/2
. Isit la, pou egzanp, se yon deskripsyon detaye sou kòman yo rkonfigirasyon mnesia
sou vole nan
Avantaj prensipal la nan itilize Mistè se ke li fè tout operasyon ki nesesè yo rebati gwoup la apre yon chanjman topoloji anba kapo a. Aplikasyon an tou senpleman kouri nan yon anviwònman distribye ki deja prepare, ak tout nœuds konekte, kèlkeswa si nou konnen adrès IP yo ak Se poutèt sa non yo davans, oswa yo te dinamikman plase / chanje. Sa a mande pou absoliman okenn paramèt konfigirasyon docker espesyal ak nan pwen de vi yon pwomotè aplikasyon an, pa gen okenn diferans ant kouri nan yon anviwònman distribye oswa kouri nan yon anviwònman lokal. :nonode@nohost
. Ou ka li plis sou sa nan
Malgre ke konplèks manyen nan chanjman topoloji se posib atravè yon aplikasyon koutim MyApp.Listener
, ka toujou gen ka kwen kote limit bibliyotèk sa yo ak patipri konfigirasyon pwouve yo dwe poto yo nan aplikasyon an. Li ok, jis pran pi wo a libcluster
, ki se plis jeneral-bi, oswa menm okipe gwoup la ba-nivo tèt ou. Objektif bibliyotèk kòd sa a se pa kouvri tout senaryo posib, men sèvi ak senaryo ki pi komen an san doulè pa nesesè ak ankonbran kopi-kole.
Remak: nan pwen sa a nan orijinal la te gen fraz la "Kè kontan gwoupman!", ak Yandex, ak ki mwen tradui (mwen pa bezwen ale nan diksyonè tèt mwen), ofri m 'opsyon an "Kè kontan gwoupman!" Li petèt enposib imajine yon pi bon tradiksyon, sitou nan limyè sitiyasyon jeopolitik aktyèl la.
Sous: www.habr.com