Kjostru → ġestjoni sempliċi tal-cluster OTP

Kważi kull applikazzjoni kummerċjali ta 'suċċess illum jew għada tidħol f'fażi fejn hija meħtieġa skala orizzontali. F'ħafna każijiet, tista 'sempliċement tibda istanza ġdida u tnaqqas il-medja tat-tagħbija. Iżda hemm ukoll każijiet inqas trivjali fejn irridu niżguraw li nodi differenti jkunu jafu dwar xulxin u jqassmu bir-reqqa l-ammont tax-xogħol.

Kjostru → ġestjoni sempliċi tal-cluster OTP

Irriżulta tant xxurtjati li erlang, li għażilna għas-sintassi pjaċevoli u l-hype madwaru, għandha l-ewwel klassi appoġġ għal sistemi distribwiti. Fit-teorija, dan ħsejjes kompletament trivjali:

Il-messaġġi li jgħaddu bejn proċessi fuq nodi differenti, kif ukoll bejn links u monitors, huwa trasparenti [...]

Fil-prattika, kollox huwa ftit aktar ikkumplikat. Imqassam erlang ġie żviluppat meta "container" fisser kaxxa tal-ħadid kbira għat-tbaħħir, u "docker" kien sempliċement sinonimu għal longshoreman. IN IP4 kien hemm ħafna indirizzi mhux okkupati, waqfiet tan-netwerk kienu ġeneralment ikkawżati minn firien chewing permezz tal-kejbil, u l-uptime medju tas-sistema tal-produzzjoni kien imkejjel f'għexieren ta 'snin.

Issa aħna lkoll oerhört awtosuffiċjenti, ippakkjati, u mqassma erlang f'ambjent fejn l-indirizzi IP dinamiċi huma mogħtija fuq il-prinċipju ta 'randomness kbira, u l-għoqiedi jistgħu jidhru u jisparixxu fil-kapriċċ ta' l-għarqub tax-xellug ta 'l-iskedar. Biex tevita munzelli ta 'kodiċi boilerplate f'kull proġett li jmexxi distribwit erlang, għall-ġlieda kontra l-ambjent ostili, l-għajnuna hija meħtieġa.

Innota: Jiena konxju li hemm libcluster. Huwa tassew jibred, għandu aktar minn elf stilla, l-awtur huwa famuż fil-komunità, u dak kollu. Jekk il-metodi offruti minn dan il-pakkett għall-ħolqien u ż-żamma ta 'cluster huma biżżejjed għalik, jien kuntent għalik. Sfortunatament, għandi bżonn ħafna aktar. Irrid nikkontrolla s-setup fid-dettall u ma nkunx spettatur barra fit-teatru tar-riorganizzazzjoni tal-clusters.

Rekwiżiti

Dak li personalment kelli bżonn kien librerija li tieħu f'idejha l-ġestjoni tar-raggruppament u jkollha l-proprjetajiet li ġejjin:

  • xogħol trasparenti kemm b'lista hard-coded ta 'nodi kif ukoll skoperta dinamika permezz ta' servizzi erlang;
  • callback kompletament funzjonali għal kull bidla fit-topoloġija (nodu hemmhekk, nodu hawn, instabbiltà tan-netwerk, qsim);
  • interface trasparenti għat-tnedija ta 'cluster b'ismijiet twal u qosra, bħal ma :nonode@nohost;
  • Docker appoġġ out of the box, mingħajr ma jkollok tikteb kodiċi tal-infrastruttura.

Dan tal-aħħar ifisser li wara li ttestjajt l-applikazzjoni lokalment fi :nonode@nohost, jew f'ambjent distribwit artifiċjalment bl-użu test_cluster_task, Irrid biss niġri docker-compose up --scale my_app=3 u ara kif tesegwixxi tliet istanzi f'docker mingħajr ebda tibdil fil-kodiċi. Irrid ukoll applikazzjonijiet dipendenti bħal mnesia - meta t-topoloġija tinbidel, wara l-kwinti jerġgħu jibnu l-cluster live mingħajr ebda kick addizzjonali mill-applikazzjoni.

Il-Klaustru ma kienx maħsub li jkun librerija kapaċi għal kollox mill-appoġġ ta 'cluster sa jagħmlu l-kafè. Mhix silver bullet li għandha l-għan li tkopri l-każijiet kollha possibbli, jew tkun soluzzjoni akkademikament kompluta fis-sens li t-teoristi minn CS jitqiegħed f'dan it-terminu. Din il-librerija hija mfassla biex isservi skop ċar ħafna, iżda tagħmel ix-xogħol mhux kbir tagħha perfettament. Dan l-għan se jkun li tiġi pprovduta trasparenza sħiħa bejn l-ambjent tal-iżvilupp lokali u ambjent elastiku distribwit mimli kontenituri ostili.

Approċċ magħżul

Il-Klaustru hija maħsuba biex titmexxa bħala applikazzjoni, għalkemm utenti avvanzati jistgħu jaħdmu bl-assemblaġġ u l-manutenzjoni tal-cluster manwalment billi jaħdmu direttament Cloister.Manager fis-siġra tas-superviżur tal-applikazzjoni fil-mira.

Meta titmexxa bħala applikazzjoni, il-librerija tiddependi fuqha config, li minnha jaqra l-valuri bażiċi li ġejjin:

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

Il-parametri t'hawn fuq ifissru litteralment dan li ġej: Il-Klaustru użat għall-applikazzjoni OTP :my_app, juża skoperta servizz erlang biex jgħaqqdu nodi, mill-inqas tlieta, u MyApp.Listener modulu (li jimplimenta @behaviour Cloister.Listener) huwa kkonfigurat biex jirċievi notifiki dwar bidliet fit-topoloġija. Deskrizzjoni dettaljata tal-konfigurazzjoni kompleta tista' tinstab fi dokumentazzjoni.

B'din il-konfigurazzjoni, l-applikazzjoni Il-Klaustru se tnedija fi stadji, idewwem il-proċess tal-bidu tal-applikazzjoni prinċipali sakemm jintlaħaq kunsens (tliet nodi huma konnessi u konnessi, bħal fl-eżempju ta 'hawn fuq.) Dan jagħti lill-applikazzjoni ewlenija l-opportunità li tassumi li meta tibda, il-cluster huwa diġà disponibbli. Kull meta t-topoloġija tinbidel (se jkun hemm ħafna minnhom, minħabba li n-nodi ma jibdewx kompletament b'mod sinkroniku), il-handler se jissejjaħ MyApp.Listener.on_state_change/2. Ħafna mill-ħin inwettqu azzjoni meta nirċievu messaġġ dwar l-istatus %Cloister.Monitor{status: :up}, li jfisser: "Hello, il-cluster huwa mmuntat."

F'ħafna każijiet, installazzjoni consensus: 3 huwa ottimali għaliex anke jekk nistennew li aktar nodi jgħaqqdu, is-callback se jgħaddi status: :rehashingstatus: :up fuq kwalunkwe nodu li għadu kif ġie miżjud jew imneħħi.

Meta tibda fil-mod ta 'żvilupp, għandek bżonn biss li tissettja consensus: 1 и Il-Klaustru se heureusement taqbeż l-istennija għall-assemblaġġ tal-cluster meta jara :nonode@nohostJew :node@hostJew :[email protected] - jiddependi fuq kif in-node ġie kkonfigurat (:none | :shortnames | :longnames).

Ġestjoni tal-Applikazzjoni Mqassma

L-applikazzjonijiet imqassma mhux fil-vakwu normalment jinkludu dipendenzi mqassma, bħal mnesia. Huwa faċli għalina li nittrattaw ir-rikonfigurazzjoni tagħhom mill-istess callback on_state_change/2. Hawnhekk, pereżempju, hija deskrizzjoni dettaljata ta 'kif tikkonfigura mill-ġdid mnesia fuq il-fly in dokumentazzjoni Il-Klaustru.

Il-vantaġġ ewlieni tal-użu Il-Klaustru hija li twettaq l-operazzjonijiet kollha meħtieġa biex tibni mill-ġdid il-cluster wara bidla fit-topoloġija taħt il-barnuża. L-applikazzjoni sempliċement taħdem f'ambjent distribwit diġà ppreparat, bin-nodi kollha konnessi, irrispettivament minn jekk nafux l-indirizzi IP u għalhekk l-ismijiet tan-nodi minn qabel, jew jekk ġewx assenjati/mibdula b'mod dinamiku. Dan ma jeħtieġ assolutament l-ebda settings speċjali tal-konfigurazzjoni tad-docker u mil-lat ta 'żviluppatur tal-applikazzjoni, m'hemm l-ebda differenza bejn it-tħaddim f'ambjent distribwit jew it-tħaddim f'wieħed lokali. :nonode@nohost. Tista' taqra aktar dwar dan fi dokumentazzjoni.

Għalkemm l-immaniġġjar kumpless tal-bidliet topoloġija huwa possibbli permezz ta 'implimentazzjoni tad-dwana MyApp.Listener, dejjem jista 'jkun hemm każijiet ta' tarf fejn dawn il-limitazzjonijiet tal-librerija u l-preġudizzji tal-konfigurazzjoni juru li huma l-pedamenti tal-implimentazzjoni. Huwa ok, ħu dak ta 'hawn fuq libcluster, li huwa aktar għal skopijiet ġenerali, jew saħansitra jimmaniġġja l-cluster ta 'livell baxx lilek innifsek. L-għan ta 'din il-librerija tal-kodiċi mhuwiex li tkopri kull xenarju possibbli, iżda li tuża l-aktar xenarju komuni mingħajr uġigħ bla bżonn u copy-paste ingombranti.

Nota: f'dan il-punt fl-oriġinal kien hemm il-frażi "Happy clustering!", u Yandex, li biha nittraduċi (m'għandix għalfejn ngħaddi minn dizzjunarji jien), offrietli l-għażla "Happy clustering!" Forsi huwa impossibbli li wieħed jimmaġina traduzzjoni aħjar, speċjalment fid-dawl tas-sitwazzjoni ġeopolitika attwali.

Sors: www.habr.com

Żid kumment