Cloister → rêveberiya komê ya OTP ya hêsan

Hema hema her serîlêdana karsaziya serketî zû an dereng dikeve qonaxek ku pîvana horizontî hewce ye. Di pir rewşan de, hûn dikarin bi tenê mînakek nû dest pê bikin û navîniya barkirinê kêm bikin. Lê di heman demê de rewşên hindiktir jî hene ku divê em pê ewle bin ku girêkên cûda li ser hev dizanin û bi baldarî barê xebatê belav dikin.

Cloister → rêveberiya komê ya OTP ya hêsan

Ewqas bi şens derket ku bidestxistin, ya ku me ji bo hevoksaziya wê ya xweş û hîpertansiyonê li dora wê hilbijart, xwedan pola yekem e piştgirî ji bo pergalên belavkirî. Di teorîyê de, ev bi tevahî bêkêmasî xuya dike:

Peyama ku di navbera pêvajoyên li ser nokên cihêreng de, û hem jî di navbera girêdan û çavdêran de derbas dibe, zelal e […]

Di pratîkê de, her tişt hinekî tevlihevtir e. Belav kirin bidestxistin dema ku "konteyner" tê wateya qutiyek hesinî ya mezin ji bo barkirinê hate pêşve xistin, û "docker" bi tenê hemwateyek ji bo longshoreman bû. LI IP4 gelek navnîşanên bêserûber hebûn, şikestinên torê bi gelemperî ji ber mêşên ku di kabloyê de dixwarin çêdibûn, û dema navînî ya pergala hilberînê bi dehsalan hate pîvandin.

Naha em hemî bi rengek bêkêmasî têra xwe ne, pakêtkirî ne û belavkirî ne bidestxistin li hawîrdorek ku navnîşanên IP-ya dînamîkî li ser prensîba bêserûberiya mezin têne desteser kirin, û girêk dikarin li ber dilê çepê yê plansazker xuya bibin û winda bibin. Ji bo ku di her projeyek belavkirî de ji pileyên koda boilerplate dûr nekevin bidestxistin, ji bo şerkirina hawirdora dijmin, alîkarî hewce ye.

bingotin: Haya min jê heye ku heye libcluster. Bi rastî pir xweş e, ji hezarî zêdetir stêrkên wê hene, nivîskar di nav civatê de navdar e, û her tişt. Ger rêbazên ku ji hêla vê pakêtê ve ji bo çêkirin û domandina komê têne pêşkêş kirin ji we re bes in, ez ji we re kêfxweş im. Mixabin, ez pir bêtir hewce dikim. Ez dixwazim sazkirinê bi hûrgulî kontrol bikim û di şanoya ji nû ve organîzekirina komê de nebim temaşevanek derveyî.

daxwazên

Tiştê ku ez bixwe hewce bûm pirtûkxaneyek bû ku dê rêveberiya komê bigire dest û xwediyê taybetmendiyên jêrîn be:

  • hem bi navnîşek hişk-kodkirî ya girêkan û hem jî bi vedîtina dînamîk bi navgîniya karûbaran re xebata zelal bidestxistin;
  • Ji bo her guhertina topolojiyê vegerandina bi tevahî fonksiyonel (girê li wir, girê li vir, bêîstiqrariya torê, parçebûn);
  • navbeynkariya zelal ji bo destpêkirina komek bi navên dirêj û kurt, wekî bi :nonode@nohost;
  • Piştgiriya Docker ji derveyî qutiyê, bêyî ku koda binesaziyê binivîse.

Ya paşîn tê vê wateyê ku piştî ku min serlêdana herêmî li hundur ceriband :nonode@nohost, an jî di hawîrdorek çêkirî de belavkirî bikar tîne test_cluster_task, Ez tenê dixwazim birevim docker-compose up --scale my_app=3 û bibînin ka ew çawa sê mînakan di docker-ê de bêyî guhertinên kodê dimeşîne. Ez jî serîlêdanên girêdayî mîna dixwazim mnesia - Gava ku topolojî diguhezîne, li pişt perdê ew komê zindî bêyî lêdanek zêde ji serîlêdanê ji nû ve ava dikin.

Girtîgeh ne armanc bû ku bibe pirtûkxaneyek ku ji piştgirîkirina komekê bigire heya çêkirina qehweyê bikaribe her tiştî bike. Ew ne guleyek zîv e ku armanc dike ku hemî dozên gengaz veşêre, an jî di wateya ku teorîsyenên ji hêla akademîk ve çareseriyek bêkêmasî be. CS têxe nav vê termê. Ev pirtûkxane ji bo armancek pir zelal hatî çêkirin, lê karê xwe yê ne pir mezin bi rengek bêkêmasî dike. Ev armanc dê bibe peydakirina zelaliyek bêkêmasî di navbera jîngeha pêşkeftina herêmî û jîngehek elastîk a belavkirî ya tijî konteynerên dijmin de.

Nêzîkatiya bijartî

Girtîgeh tê armanc kirin ku wekî serîlêdanê were xebitandin, her çend bikarhênerên pêşkeftî dikarin bi berhevkirin û domandina komê bi destan bi rasterast xebitandinê bixebitin. Cloister.Manager di dara çavdêriya serîlêdana armancê de.

Dema ku wekî serîlêdanê tê xebitandin, pirtûkxane xwe dispêre config, ku ew nirxên bingehîn ên jêrîn dixwîne:

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

Parametreyên li jor bi rastî tê wateya jêrîn: Girtîgeh ji bo serîlêdana OTP tê bikar anîn :my_app, bikar tîne vedîtina xizmeta erlang ji bo girêdana girêkan, bi kêmanî sê, û MyApp.Listener module (pêkan @behaviour Cloister.Listener) ji bo wergirtina agahdariyan di derbarê guhertinên topolojiyê de hatî mîheng kirin. Danasînek berfireh a veavakirina tevahî dikare tê de were dîtin belgekirin.

Bi vê veavakirinê, sepanê Girtîgeh dê bibe bi qonaxan dest pê dike, derengxistina pêvajoya destpêkirina serîlêdana sereke heya ku lihevhatin pêk were (sê girêk bi hev ve girêdayî ne û girêdayî ne, wek mînaka li jor.) Ev fersendê dide serîlêdana sereke ku texmîn bike ku gava dest pê dike, kom jixwe heye. Kengê ku topolojî biguhere (dê gelek ji wan hebin, ji ber ku girêk bi tevahî hevdem dest pê nakin), dê destekker were gotin. MyApp.Listener.on_state_change/2. Dema ku em peyamek statûyê distînin pir caran em çalakiyek dikin %Cloister.Monitor{status: :up}, ku tê vê wateyê: "Silav, kom kom bûye."

Di pir rewşan de, sazkirinê consensus: 3 îdeal e ji ber ku her çend em li bendê bin ku bêtir girêk bi hev ve girêbidin, dê vegerandina bangê derbas bibe status: :rehashingstatus: :up li ser her girêkek nû lê zêdekirin an jêbirin.

Dema ku di moda pêşveçûnê de dest pê dike, hûn tenê hewce ne ku saz bikin consensus: 1 и Girtîgeh gava ku ew bibîne dê bi kêfxweşî li benda kombûna komê derbas bibe :nonode@nohostan :node@hostan :[email protected] - li gorî ka girêk çawa hate saz kirin (:none | :shortnames | :longnames).

Birêvebiriya Serlêdana Belavkirî

Serîlêdanên belavkirî yên ne di valahiyê de bi gelemperî girêdanên belavbûyî, wek mînak mnesia. Ji me re hêsan e ku em veavakirina wan ji heman vegerê vegerînin on_state_change/2. Li vir, bo nimûne, ravekirinek berfireh a meriv çawa ji nû ve veavakirinê ye mnesia li ser firîna li belgekirin Girtîgeh.

Avantaja sereke ya bikaranîna Girtîgeh ev e ku ew hemî operasyonên pêwîst ji bo ji nû ve avakirina komê piştî guhertinek topolojiyê pêk tîne bin kumê. Serlêdan bi tenê li hawîrdorek belavkirî ya jixwe amadekirî dimeşîne, digel hemî girêkan ve girêdayî ye, bêyî ku em navnîşanên IP-yê û ji ber vê yekê navên girêk berê dizanin, an ew bi dînamîkî hatine tayîn kirin/guhertin. Vê yekê bê guman mîhengên mîhengên dokerê yên taybetî hewce nake û ji nihêrîna pêşdebirek serîlêdanê, di navbera xebitandina li hawîrdorek belavkirî an xebitandina li cîhek herêmî de cûdahî tune. :nonode@nohost. Hûn dikarin li ser vê yekê bêtir bixwînin belgekirin.

Her çend destwerdana tevlihev a guhertinên topolojiyê bi pêkanîna xwerû ve gengaz e MyApp.Listener, dibe ku her gav rewşên qerax hebin ku ev tixûbên pirtûkxaneyê û nelirêtiyên vesazkirinê îsbat dikin ku kevirên bingehîn ên pêkanînê ne. Baş e, tenê ya jorîn bistînin libcluster, ya ku ji mebesta gelemperî ye, an tewra bi xwe jî komika asta nizm hildibijêre. Armanca vê pirtûkxaneya kodê ne ew e ku her senaryoyek mimkun veşêre, lê karanîna senaryoya herî gelemperî bêyî êşa nehewce û kopî-paste ya giran e.

Têbînî: di vê nuqteyê de di orîjînalê de hevoka "Clustering Bextewar!", û Yandex, ku ez wergerînim (ne hewce ye ku ez bixwe di ferhengan re derbas bibim), vebijarka "Clustering Happy!" pêşkêşî min kir. Belkî ne mimkûn e ku meriv wergerek çêtir xeyal bike, nemaze li gorî rewşa jeopolîtîk a heyî.

Source: www.habr.com

Add a comment