Cloestr → rheolaeth clwstwr OTP syml

Mae bron pob cais busnes llwyddiannus yn hwyr neu'n hwyrach yn mynd i mewn i gyfnod lle mae angen graddio'n llorweddol. Mewn llawer o achosion, gallwch ddechrau enghraifft newydd a lleihau'r cyfartaledd llwyth. Ond mae yna hefyd achosion llai dibwys lle mae angen inni sicrhau bod nodau gwahanol yn gwybod am ei gilydd ac yn dosbarthu'r llwyth gwaith yn ofalus.

Cloestr → rheolaeth clwstwr OTP syml

Trodd allan mor ffodus erlang, yr hwn a ddewisasom am ei gystrawen ddymunol a'i hyspys o'i amgylch, yn meddu o'r radd flaenaf cefnogaeth i systemau gwasgaredig. Mewn theori, mae hyn yn swnio'n gwbl ddibwys:

Mae trosglwyddo negeseuon rhwng prosesau ar wahanol nodau, yn ogystal â rhwng dolenni a monitorau, yn dryloyw […]

Yn ymarferol, mae popeth ychydig yn fwy cymhleth. Wedi'i ddosbarthu erlang ei ddatblygu pan oedd "cynhwysydd" yn golygu blwch haearn mawr ar gyfer llongau, a "docker" yn syml gyfystyr ar gyfer longshoreman. YN IP4 roedd yna lawer o gyfeiriadau heb eu meddiannu, roedd toriadau rhwydwaith fel arfer yn cael eu hachosi gan lygod mawr yn cnoi drwy'r cebl, a mesurwyd uptime cyfartalog y system gynhyrchu mewn degawdau.

Nawr rydym i gyd yn hynod hunangynhaliol, wedi'u pecynnu, ac yn rhedeg wedi'u dosbarthu erlang mewn amgylchedd lle mae cyfeiriadau IP deinamig yn cael eu dosbarthu ar yr egwyddor o hap mawr, a gall nodau ymddangos a diflannu ar fympwy sawdl chwith y trefnydd. Er mwyn osgoi pentyrrau o god plât boeler ym mhob prosiect sy'n rhedeg dosbarthedig erlang, i frwydro yn erbyn yr amgylchedd gelyniaethus, mae angen cymorth.

Nodyn: Yr wyf yn ymwybodol bod libcluster. Mae'n cŵl iawn, mae ganddi dros fil o sêr, mae'r awdur yn enwog yn y gymuned, a hynny i gyd. Os yw'r dulliau a gynigir gan y pecyn hwn ar gyfer creu a chynnal clwstwr yn ddigon i chi, rwy'n hapus i chi. Yn anffodus, dwi angen llawer mwy. Rwyf am reoli'r gosodiad yn fanwl a pheidio â bod yn wyliwr allanol yn y theatr ad-drefnu clystyrau.

Gofynion

Yr hyn yr oeddwn ei angen yn bersonol oedd llyfrgell a fyddai’n cymryd drosodd rheolaeth y clwstwr a byddai ganddi’r eiddo a ganlyn:

  • gwaith tryloyw gyda rhestr codau caled o nodau a darganfyddiad deinamig trwy wasanaethau erlang;
  • galwad yn ôl gwbl weithredol ar gyfer pob newid topoleg (nod yno, nod yma, ansefydlogrwydd rhwydwaith, holltau);
  • rhyngwyneb tryloyw ar gyfer lansio clwstwr gydag enwau hir a byr, fel gyda :nonode@nohost;
  • Cefnogaeth docwr allan o'r bocs, heb orfod ysgrifennu cod seilwaith.

Mae'r olaf yn golygu ar ôl i mi brofi'r cais yn lleol yn :nonode@nohost, neu mewn amgylchedd wedi'i ddosbarthu'n artiffisial gan ddefnyddio test_cluster_task, Fi jyst eisiau rhedeg docker-compose up --scale my_app=3 a gweld sut mae'n gweithredu tri achos yn y docwr heb unrhyw newidiadau cod. Rwyf hefyd eisiau ceisiadau dibynnol fel mnesia - pan fydd y topoleg yn newid, y tu ôl i'r llenni maent yn ailadeiladu'r clwstwr yn fyw heb unrhyw gic ychwanegol o'r cais.

Cloestr Ni fwriedir iddi fod yn llyfrgell a allai wneud popeth o gefnogi clwstwr i wneud coffi. Nid yw'n fwled arian sy'n anelu at gwmpasu pob achos posibl, na bod yn ateb cwbl academaidd yn yr ystyr y mae damcaniaethwyr o CS rhoi i mewn i'r tymor hwn. Mae'r llyfrgell hon wedi'i chynllunio i ateb pwrpas clir iawn, ond gwnewch ei gwaith nad yw'n rhy fawr yn berffaith. Y nod hwn fydd darparu tryloywder llwyr rhwng yr amgylchedd datblygu lleol ac amgylchedd elastig gwasgaredig yn llawn cynwysyddion gelyniaethus.

Dull a ddewiswyd

Cloestr Bwriedir iddo gael ei redeg fel cymhwysiad, er y gall defnyddwyr uwch weithio gyda chydosod a chynnal a chadw'r clwstwr â llaw trwy redeg yn uniongyrchol Cloister.Manager yng nghoeden goruchwyliwr y cais targed.

Wrth redeg fel cais, mae'r llyfrgell yn dibynnu ar config, y mae'n darllen y gwerthoedd sylfaenol canlynol ohonynt:

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

Mae'r paramedrau uchod yn golygu'n llythrennol y canlynol: Cloestr a ddefnyddir ar gyfer cais OTP :my_app, defnyddiau erlang darganfod gwasanaeth i gysylltu nodau, o leiaf dri, a MyApp.Listener modiwl (gweithredu @behaviour Cloister.Listener) wedi'i ffurfweddu i dderbyn hysbysiadau am newidiadau topoleg. Mae disgrifiad manwl o'r cyfluniad cyflawn i'w weld yn dogfennaeth.

Gyda'r cyfluniad hwn, mae'r cais Cloestr Bydd lansio fesul cam, gohirio'r broses o gychwyn y prif gais nes cyrraedd consensws (mae tri nod wedi'u cysylltu a'u cysylltu, fel yn yr enghraifft uchod.) Mae hyn yn rhoi cyfle i'r prif gais gymryd yn ganiataol, pan fydd yn dechrau, bod y clwstwr eisoes ar gael. Pryd bynnag y bydd y topoleg yn newid (bydd llawer ohonynt, oherwydd nad yw'r nodau'n dechrau'n gyfan gwbl), bydd y triniwr yn cael ei alw MyApp.Listener.on_state_change/2. Y rhan fwyaf o'r amser rydym yn cyflawni gweithred pan fyddwn yn derbyn neges statws %Cloister.Monitor{status: :up}, sy'n golygu: “Helo, mae'r clwstwr wedi'i ymgynnull.”

Yn y rhan fwyaf o achosion, gosod consensus: 3 yn optimaidd oherwydd hyd yn oed os ydym yn disgwyl i fwy o nodau gysylltu, bydd yr alwad yn ôl yn mynd drwodd status: :rehashingstatus: :up ar unrhyw nod sydd newydd ei ychwanegu neu ei ddileu.

Wrth ddechrau yn y modd datblygu, does ond angen i chi osod consensus: 1 и Cloestr bydd yn hapus i hepgor yr aros ar gyfer cynulliad clwstwr pan fydd yn gweld :nonode@nohostNeu :node@hostNeu :[email protected] - yn dibynnu ar sut y cafodd y nod ei ffurfweddu (:none | :shortnames | :longnames).

Rheoli Cais wedi'i Ddosbarthu

Mae ceisiadau dosranedig nad ydynt mewn gwactod fel arfer yn cynnwys dibyniaethau dosranedig, megis mnesia. Mae'n hawdd i ni drin eu hailgyflunio o'r un alwad yn ôl on_state_change/2. Yma, er enghraifft, mae disgrifiad manwl o sut i ad-drefnu mnesia ar y hedfan i mewn dogfennaeth Cloestr.

Y brif fantais o ddefnyddio Cloestr yw ei fod yn cyflawni'r holl weithrediadau angenrheidiol i ailadeiladu'r clwstwr ar ôl newid topoleg o dan y cwfl. Yn syml, mae'r cais yn rhedeg mewn amgylchedd dosbarthedig sydd eisoes wedi'i baratoi, gyda'r holl nodau wedi'u cysylltu, ni waeth a ydym yn gwybod y cyfeiriadau IP ac felly enwau'r nodau ymlaen llaw, neu a ydynt wedi'u neilltuo / newid yn ddeinamig. Mae hyn yn gofyn am ddim gosodiadau cyfluniad docwr arbennig o gwbl ac o safbwynt datblygwr cymhwysiad, nid oes gwahaniaeth rhwng rhedeg mewn amgylchedd gwasgaredig neu redeg mewn un lleol. :nonode@nohost. Gallwch ddarllen mwy am hyn yn dogfennaeth.

Er bod ymdriniaeth gymhleth o newidiadau topoleg yn bosibl trwy weithrediad arferol MyApp.Listener, efallai y bydd achosion ymylol bob amser lle mae'r cyfyngiadau llyfrgell hyn a'r tueddiadau cyfluniad yn gonglfeini gweithredu. Mae'n iawn, dim ond cymryd yr uchod libcluster, sy'n fwy cyffredinol-bwrpas, neu hyd yn oed yn trin y clwstwr lefel isel eich hun. Nid nod y llyfrgell godau hon yw ymdrin â phob senario bosibl, ond defnyddio'r senario mwyaf cyffredin heb boen diangen a phast copi feichus.

Nodyn: ar y pwynt hwn yn y gwreiddiol roedd yr ymadrodd “Clystyru Hapus!”, a chynigiodd Yandex, yr wyf yn cyfieithu ag ef (does dim rhaid i mi fynd trwy eiriaduron fy hun), yr opsiwn “Clystyru Hapus!” i mi. Efallai ei bod yn amhosibl dychmygu cyfieithiad gwell, yn enwedig yn wyneb y sefyllfa geopolitical bresennol.

Ffynhonnell: hab.com

Ychwanegu sylw