Cloister → njikwa ụyọkọ OTP dị mfe

Ihe fọrọ nke nta ka ọ bụrụ ngwa azụmahịa ọ bụla na-aga nke ọma n'oge na-adịghị anya na-abanye n'usoro ebe achọrọ ntugharị kwụ ọtọ. N'ọtụtụ ọnọdụ, ị nwere ike ibido ihe atụ ọhụrụ wee belata nkezi ibu. Mana enwerekwa ikpe ndị na-adịchaghị mkpa ebe anyị kwesịrị ijide n'aka na ọnụ ụzọ dị iche iche mara banyere ibe ha ma jiri nlezianya kesaa ibu ọrụ.

Cloister → njikwa ụyọkọ OTP dị mfe

Ọ tụgharịrị nke ọma na ndudue, nke anyị họọrọ maka syntax na-atọ ụtọ na hype gburugburu ya, nwere klas mbụ nkwado maka usoro ekesa. Na tiori, nke a na-ada kpam kpam obere ihe:

Ozi na-agafe n'etiti usoro na ọnụ ụzọ dị iche iche, yana n'etiti njikọ na nlekota, bụ ihe doro anya [...]

Na omume, ihe niile dị ntakịrị mgbagwoju anya. Kesara ndudue emepụtara mgbe "container" pụtara nnukwu igbe ígwè maka mbupu, na "docker" bụ nanị otu okwu maka longshoreman. N'ime IP4 enwere ọtụtụ adreesị ndị mmadụ na-enweghị, nkwụsị netwọk na-emekarị site na oke na-ata ahụhụ site na eriri, na nkezi oge nke usoro mmepụta ihe ka a tụrụ atụ n'ime iri afọ.

Ugbu a, anyị niile na-ezuru onwe anyị nke ukwuu, chịkọta ọnụ, na-agba ọsọ na-ekesa ndudue na gburugburu ebe a na-enyefe adreesị IP dị ike n'ụkpụrụ nke oke randomness, na ọnụ nwere ike ịpụta na-apụ n'anya n'ọchịchọ nke ikiri ụkwụ aka ekpe nke onye nhazi. Iji zere ikpo koodu mmiri ọkụ n'ime ọrụ ọ bụla na-eme nkesa ndudue, iji luso gburugburu ebe obibi iro ọgụ, enyemaka achọrọ.

Примечание: Amaara m na e nwere libcluster. Ọ dị mma nke ukwuu, ọ nwere ihe karịrị otu puku kpakpando, onye edemede a ma ama na obodo, yana ihe niile. Ọ bụrụ na usoro nke ngwugwu a na-enye maka ịmepụta na idobe ụyọkọ ezuru gị, enwere m obi ụtọ maka gị. Ọ dị nwute, achọrọ m ọtụtụ ihe. Achọrọ m ịchịkwa ntọlite ​​​​n'ụzọ zuru ezu ma ghara ịbụ onye na-ekiri n'èzí na ụlọ ihe nkiri nke nhazigharị ụyọkọ.

chọrọ

Ihe m chọrọ n'onwe m bụ ọbá akwụkwọ ga-eweghara njikwa ụyọkọ ahụ ma nwee ihe ndị a:

  • ọrụ nghọta yana ma ndepụta ọnụ ọnụ nke nwere koodu siri ike yana nchọpụta siri ike site na ọrụ ndudue;
  • oku na-arụ ọrụ zuru oke maka mgbanwe topology ọ bụla (ọnụ ebe ahụ, ọnụ ebe a, enweghị ntụkwasị obi netwọkụ, nkewa);
  • transperent interface maka launching a ụyọkọ nwere ogologo na nkenke aha, dị ka na :nonode@nohost;
  • Docker na-akwado site na igbe ahụ, na-enweghị ide koodu akụrụngwa.

Nke ikpeazụ pụtara na ka m nwalechara ngwa a na mpaghara :nonode@nohost, ma ọ bụ na gburugburu artificially ekesa na-eji test_cluster_task, Achọrọ m ịgba ọsọ docker-compose up --scale my_app=3 wee hụ ka o si eme ugboro atọ na docker na-enweghị mgbanwe koodu ọ bụla. Achọrọ m ngwa dabere dị ka mnesia - mgbe topology na-agbanwe, n'azụ ihe nkiri ha na-ewughachi ụyọkọ ahụ na-adị ndụ na-enweghị mgbagha ọ bụla site na ngwa ahụ.

Cloister e bughị n'obi ka ọ bụrụ ọbá akwụkwọ nke nwere ike ime ihe niile site n'ịkwado ụyọkọ ruo n'ịme kọfị. Ọ bụghị mgbọ ọlaọcha nke na-achọ ikpuchi ikpe niile enwere ike, ma ọ bụ bụrụ ihe ngwọta zuru oke nke agụmakwụkwọ n'echiche nke ndị ọkà mmụta sayensị si. CS tinye n'okwu a. Emebere ọba akwụkwọ a ka ọ bụrụ ebumnuche doro anya, mana rụọ ọrụ ya na-adịghị oke oke nke ọma. Ihe mgbaru ọsọ a ga-abụ inye nghọta zuru oke n'etiti gburugburu ebe mmepe obodo na gburugburu ebe obibi na-agbanwe agbanwe nke jupụtara na ihe ndị na-adịghị mma.

Ụzọ a họọrọ

Cloister e bu n'obi na-agba ọsọ dị ka ngwa, ọ bụ ezie na ndị ọrụ dị elu nwere ike ịrụ ọrụ na mgbakọ na nhazi nke ụyọkọ ahụ site n'ịgba ọsọ ozugbo. Cloister.Manager n'ime osisi nlekọta nke ngwa ebumnuche.

Mgbe a na-agba ọsọ dị ka ngwa, ọbá akwụkwọ na-adabere na ya config, site na nke ọ na-agụ ụkpụrụ ndị a bụ isi:

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

Paragraf ndị dị n'elu pụtara n'ụzọ nkịtị ihe ndị a: Cloister eji maka ngwa OTP :my_app, eji erlang nchọpụta ọrụ iji jikọọ ọnụ, opekata mpe atọ, na MyApp.Listener modul (na-eme @behaviour Cloister.Listener) ka ahaziri ịnata ozi gbasara mgbanwe topology. Enwere ike ịchọta nkọwa zuru ezu nke nhazi zuru oke na akwụkwọ.

Na nhazi a, ngwa ahụ Cloister ga- malite na nkebi, na-egbu oge usoro ịmalite ngwa ngwa ahụ ruo mgbe nkwenye kwadoro (ejikọta ọnụ atọ ma jikọta ya, dị ka ihe atụ dị n'elu.) Nke a na-enye ndị isi ngwa ohere iche na mgbe ọ malitere, ụyọkọ ahụ adịlarị. Mgbe ọ bụla topology na-agbanwe (a ga-enwe ọtụtụ n'ime ha, n'ihi na ọnụ ọgụgụ adịghị amalite kpamkpam synchronously), a ga-akpọ onye njikwa. MyApp.Listener.on_state_change/2. Ọtụtụ oge anyị na-eme ihe mgbe anyị nwetara ozi ọkwa %Cloister.Monitor{status: :up}, nke pụtara: “Ndewo, a chịkọtara ụyọkọ.”

N'ọtụtụ ọnọdụ, ntinye consensus: 3 dị mma n'ihi na ọ bụrụgodị na anyị na-atụ anya ka ọnụ ọgụgụ ndị ọzọ jikọọ, oku azụ ga-agafe status: :rehashingstatus: :up n'ọnụ ọnụ ọ bụla agbakwunyere ma ọ bụ wepụrụ ọhụrụ.

Mgbe ịmalite na ọnọdụ mmepe, naanị ị ga-achọ ịtọ consensus: 1 и Cloister ga-eji obi ụtọ mapụ ichere mgbakọ ụyọkọ mgbe ọ hụrụ :nonode@nohost, ma ọ bụ :node@host, ma ọ bụ :[email protected] - dabere n'otú e si hazie ọnụ ahụ (:none | :shortnames | :longnames).

Njikwa Ngwa ekesara

Ngwa ekesara adịghị na oghere na-agụnyekarị ndabere ekesa, dịka mnesia. Ọ dịịrị anyị mfe ijikwa nhazigharị ha site na otu azụghachi azụ on_state_change/2. Ebe a, dịka ọmụmaatụ, bụ nkọwa zuru ezu nke otu esi ahazigharị mnesia na ofufe in akwụkwọ Cloister.

Isi uru nke iji Cloister bụ na ọ na-arụ ọrụ niile dị mkpa iji wughachi ụyọkọ ahụ mgbe mgbanwe topology gasịrị n'okpuru mkpuchi. Ngwa a na-agba ọsọ na gburugburu ebe a na-ekesa akwadoro, yana ọnụ ọnụ niile ejikọrọ, n'agbanyeghị ma anyị maara adreesị IP na aha ọnụ ahụ tupu oge eruo, ma ọ bụ na e kenyere ha / gbanwee ha. Nke a chọrọ n'ezie enweghị ntọala nhazi docker pụrụ iche yana site n'echiche onye nrụpụta ngwa, ọ nweghị ọdịiche dị n'etiti ịgba ọsọ na gburugburu ebe kesara ma ọ bụ ịgba ọsọ na mpaghara. :nonode@nohost. Ị nwere ike ịgụkwu gbasara nke a na akwụkwọ.

Ọ bụ ezie na njikwa mgbagwoju anya nke topology mgbanwe ga-ekwe omume site na mmejuputa omenala MyApp.Listener, enwere ike inwe ọnụ okwu mgbe niile ebe oke ọba akwụkwọ ndị a na nhụsianya nhazi na-egosi na ọ bụ isi nkuku nke mmejuputa iwu. Ọ dị mma, were naanị nke dị n'elu libcluster, nke bụ ebumnuche n'ozuzu ya, ma ọ bụ ọbụna jikwaa ụyọkọ dị ala n'onwe gị. Ebumnuche nke ọbá akwụkwọ koodu a abụghị ikpuchi ọnọdụ ọ bụla enwere ike, kama iji ọnọdụ a na-ahụkarị na-enweghị ihe mgbu na-enweghị isi na mpempe akwụkwọ na-adịghị mma.

Cheta na: N'oge a na mbụ, e nwere nkebi ahịrịokwu ahụ "ụyọkọ obi ụtọ!", na Yandex, nke m na-asụgharị (enweghị m ịga na akwụkwọ ọkọwa okwu n'onwe m), nyere m nhọrọ " ụyọkọ obi ụtọ!" Ikekwe ọ gaghị ekwe omume iche n'echiche ntụgharị asụsụ ka mma, ọkachasị n'ihi ọnọdụ geopolitical dị ugbu a.

isi: www.habr.com

Tinye a comment