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.
Irriżulta tant xxurtjati li erlang, li għażilna għas-sintassi pjaċevoli u l-hype madwaru, għandha l-ewwel klassi
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
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
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
B'din il-konfigurazzjoni, l-applikazzjoni Il-Klaustru se MyApp.Listener.on_state_change/2
%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: :rehashing
→ status: :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@nohost
Jew :node@host
Jew :[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
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
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