Fere gbogbo ohun elo iṣowo aṣeyọri laipẹ tabi ya wọ ipele kan nibiti o nilo iwọn petele. Ni ọpọlọpọ igba, o le jiroro bẹrẹ apẹẹrẹ tuntun kan ati dinku apapọ fifuye. Ṣugbọn awọn ọran ti ko ṣe pataki tun wa nibiti a nilo lati rii daju pe awọn apa oriṣiriṣi mọ nipa ara wọn ati pinpin kaakiri iṣẹ ṣiṣe.
O wa ni jade ki orire wipe aṣiṣe, eyi ti a yàn fun awọn oniwe-didùn sintasi ati aruwo ni ayika, ni o ni a akọkọ-kilasi
Ifiranṣẹ ti nkọja laarin awọn ilana lori awọn apa oriṣiriṣi, ati laarin awọn ọna asopọ ati awọn diigi, jẹ gbangba […]
Ni iṣe, ohun gbogbo jẹ diẹ idiju. Pinpin aṣiṣe ni idagbasoke nigba ti "eiyan" tumo si kan ti o tobi irin apoti fun sowo, ati "docker" je nìkan a synonym fun longshoreman. IN IP4 ọpọlọpọ awọn adirẹsi ti a ko lo, awọn ijade nẹtiwọọki nigbagbogbo ni o fa nipasẹ awọn eku jijẹ nipasẹ awọn kebulu, ati pe apapọ akoko akoko ti eto iṣelọpọ jẹ iwọn ni awọn ewadun.
Bayi gbogbo wa ni iyalẹnu ti ara ẹni to, ti kojọpọ, ati ṣiṣiṣẹ kaakiri aṣiṣe ni agbegbe nibiti awọn adirẹsi IP ti o ni agbara ti wa ni fifun lori ipilẹ ti aileto nla, ati awọn apa le han ati farasin ni ifẹ ti igigirisẹ osi ti oluṣeto. Lati yago fun piles ti boilerplate koodu ni gbogbo ise agbese nṣiṣẹ a pin aṣiṣe, lati dojuko ayika ọta, iranlọwọ nilo.
Daakọ: Mo mọ pe o wa libcluster
awọn ibeere
Ohun ti Emi funrarami nilo ni ile-ikawe kan ti yoo gba iṣakoso ti iṣupọ ati pe yoo ni awọn ohun-ini wọnyi:
- iṣẹ ṣiṣafihan pẹlu mejeeji atokọ koodu-lile ti awọn apa ati iṣawari ti o ni agbara nipasẹ awọn iṣẹ aṣiṣe;
- Ipe ipe iṣẹ ni kikun fun gbogbo iyipada topology (ipade nibẹ, ipade nibi, aisedeede nẹtiwọọki, awọn pipin);
- wiwo sihin fun ifilọlẹ iṣupọ kan pẹlu awọn orukọ gigun ati kukuru, bi pẹlu
:nonode@nohost
; - Docker ṣe atilẹyin jade kuro ninu apoti, laisi nini lati kọ koodu amayederun.
Ikẹhin tumọ si pe lẹhin ti Mo ṣe idanwo ohun elo ni agbegbe ni :nonode@nohost
, tabi ni agbegbe ti a ti pin pẹlu atọwọdọwọ nipa lilo test_cluster_task
docker-compose up --scale my_app=3
ati ki o wo bi o ṣe n ṣe awọn iṣẹlẹ mẹta ni docker laisi awọn iyipada koodu eyikeyi. Mo tun fẹ awọn ohun elo ti o gbẹkẹle bi mnesia
- nigbati topology yipada, lẹhin awọn iṣẹlẹ wọn tun ṣe iṣupọ laaye laisi tapa eyikeyi lati inu ohun elo naa.
Aṣọ ko pinnu lati jẹ ile-ikawe ti o lagbara fun ohun gbogbo lati atilẹyin iṣupọ kan si ṣiṣe kofi. Kii ṣe ọta ibọn fadaka ti o ni ero lati bo gbogbo awọn ọran ti o ṣeeṣe, tabi jẹ ojutu pipe ti ẹkọ ni ori ti awọn onimọran lati CS fi sinu oro yi. Ile-ikawe yii jẹ apẹrẹ lati ṣe iṣẹ idi ti o han gedegbe, ṣugbọn ṣe iṣẹ ti ko tobi ju ni pipe. Ibi-afẹde yii yoo jẹ lati pese akoyawo pipe laarin agbegbe idagbasoke agbegbe ati agbegbe rirọ ti o pin ti o kun fun awọn apoti ọta.
Ọna ti a yan
Aṣọ ti pinnu lati ṣiṣẹ bi ohun elo, botilẹjẹpe awọn olumulo to ti ni ilọsiwaju le ṣiṣẹ pẹlu apejọ ati itọju iṣupọ pẹlu ọwọ nipasẹ ṣiṣe taara Cloister.Manager
ninu igi alabojuto ohun elo afojusun.
Nigbati o ba ṣiṣẹ bi ohun elo, ile-ikawe gbarale config
, lati inu eyiti o ti ka awọn iye ipilẹ wọnyi:
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
Awọn paramita ti o wa loke tumọ si gangan ni atẹle: Aṣọ ti a lo fun ohun elo OTP :my_app
, awọn lilo Awari iṣẹ erlang lati so apa, o kere mẹta, ati MyApp.Listener
module (imuse @behaviour Cloister.Listener
Pẹlu iṣeto yii, ohun elo naa Aṣọ yoo jẹ MyApp.Listener.on_state_change/2
%Cloister.Monitor{status: :up}
, tí ó túmọ̀ sí: “Kaabo, a ti kó ìdìpọ̀ náà jọpọ̀.”
Ni ọpọlọpọ igba, fifi sori ẹrọ consensus: 3
jẹ aipe nitori paapaa ti a ba nireti awọn apa diẹ sii lati sopọ, ipe pada yoo kọja status: :rehashing
→ status: :up
lori eyikeyi titun kun tabi kuro ipade.
Nigbati o ba bẹrẹ ni ipo idagbasoke, o kan nilo lati ṣeto consensus: 1
и Aṣọ yoo fi ayọ foo idaduro fun apejọ iṣupọ nigbati o ba rii :nonode@nohost
tabi :node@host
tabi :[email protected]
- da lori bii a ṣe tunto ipade naa (:none | :shortnames | :longnames
).
Pinpin elo Management
Awọn ohun elo ti a pin kii ṣe ni igbale nigbagbogbo pẹlu awọn igbẹkẹle pinpin, gẹgẹbi mnesia
. O rorun fun a mu wọn atunto lati kanna callback on_state_change/2
. Nibi, fun apẹẹrẹ, jẹ apejuwe alaye bi o ṣe le tunto mnesia
lori fo ni
Awọn anfani akọkọ ti lilo Aṣọ ni pe o ṣe gbogbo awọn iṣẹ pataki lati tun iṣupọ naa ṣe lẹhin iyipada topology kan labẹ awọn Hood. Ohun elo naa n ṣiṣẹ ni agbegbe ti a ti pese tẹlẹ, pẹlu gbogbo awọn apa ti a ti sopọ, laibikita boya a mọ awọn adirẹsi IP ati nitori naa awọn orukọ ipade ni ilosiwaju, tabi wọn ti pin ni agbara / yipada. Eyi nilo Egba ko si awọn eto atunto docker pataki ati lati oju wiwo olupilẹṣẹ ohun elo, ko si iyatọ laarin ṣiṣiṣẹ ni agbegbe pinpin tabi ṣiṣiṣẹ ni agbegbe kan. :nonode@nohost
. O le ka diẹ sii nipa eyi ni
Botilẹjẹpe mimu mimu eka ti awọn iyipada topology ṣee ṣe nipasẹ imuse aṣa MyApp.Listener
, awọn ọran eti le nigbagbogbo wa nibiti awọn idiwọn ile-ikawe wọnyi ati awọn aiṣedeede atunto jẹri lati jẹ awọn igun igun ti imuse. O dara, kan gba awọn loke libcluster
, eyiti o jẹ idi gbogbogbo diẹ sii, tabi paapaa mu iṣupọ ipele kekere funrararẹ. Ibi-afẹde ti ile-ikawe koodu yii kii ṣe lati bo gbogbo oju iṣẹlẹ ti o ṣeeṣe, ṣugbọn lati lo oju iṣẹlẹ ti o wọpọ julọ laisi irora ti ko wulo ati daakọ-lẹẹmọ.
akiyesi: ni aaye yii ninu atilẹba ti o wa ni gbolohun ọrọ “Iṣupọ Ayọ!”, ati Yandex, pẹlu eyiti MO tumọ (Emi ko ni lati lọ nipasẹ awọn iwe-itumọ funrarami), fun mi ni aṣayan “Ṣijọpọ Ayọ!” Boya ko ṣee ṣe lati fojuinu itumọ ti o dara julọ, paapaa ni ina ti ipo geopolitical lọwọlọwọ.
orisun: www.habr.com