Cloister → klusteri OTP lihtne haldamine

Peaaegu iga edukas Ă€ri rakendus satub varem vĂ”i hiljem faasi, kus on vajalik horisontaalne skaleerimine. Paljusid juhtumeid saab lihtsalt uue eksemplari kĂ€ivitamise kaudu vĂ€hendada keskmist koormust. Kuid esinevad ka vĂ€hem triviaalset juhtumit, kus peame tagama, et erinevad sĂ”lmed tunneksid ĂŒksteist ja jaotaksid töökoormust hoolikalt.

Cloister → klusteri OTP lihtne haldamine

Nii Ă”nnestus, et erlang, mille me valisime meeldiva sĂŒntaksi ja hĂŒppe tĂ”ttu, omab esmaklassilist toetust jaotatud sĂŒsteemidele. Teoorias kĂ”lab see ĂŒldiselt triviaalne:

SÔnumite edastamine protsesside vahel erinevates sÔlmedes, samuti viidete ja monitooringute vahel on lÀbipaistev [
]

Praktiliselt on kĂ”ik veidi keerulisem. Jaotatud erlang loodi ajal, mil "konteiner" tĂ€hendas suurt metallkasti transportimiseks, ja "dokera" oli lihtsalt sadama koormajate sĂŒnonĂŒĂŒm. Ajal IP4 oli palju vabu aadresse, vĂ”rgukatkestustes – olid tavaliselt sĂŒĂŒdi ratsutavad rottide, ja keskmine töökatkestusaja mÔÔtmine tootmisseadmes kestis aastakĂŒmneid.

NĂŒĂŒd oleme kĂ”ik kujuteldavalt iseseisvad, pakitud ja kĂ€ivitame jaotatud erlang keskkonnas, kus dĂŒnaamilised IP-aadressid jagatakse suure juhuslikkuse printsiibil ja sĂ”lmed vĂ”ivad ilmuda ja kaduda vastavalt plaanija vasaku jala soovile. Et vĂ€ltida igas projektis ĆĄabloonkoodi kuhjumist, mis kĂ€ivitab jaotatud erlang, vajame vaenuliku keskkonna vastu abi.

MĂ€rkus: Ma olen kursis, et on olemas libcluster. See on tĂ”eliselt lahe, sellel on rohkem kui tuhat tĂ€hte, autor on tuntud kogukonnas ja kĂ”ik see. Kui teile piisab selle paketi pakutud viisidest klasteri loomise ja sĂ€ilitamise osas – ma olen teie ĂŒle Ă”nnelik. Kahjuks on mul vaja palju rohkem. Ma tahan hallata seadistusi detailides ja mitte olla kĂ”rvaline vaataja klasteri ĂŒmberkorraldamise teatris.

NÔuded

Minu isiklikult vajalik raamatukogu on see, mis haldab klastrit ja millel on jÀrgmised omadused:

  • lĂ€bipaistev töö nii jĂ€igalt kodeeritud sĂ”lmede nimekirjaga kui ka dĂŒnaamilise avastamise kaudu teenuste kaudu erlang;
  • tĂ€isfunktsionaalne tagasiside iga topoloogia muutuse korral (sĂ”lm sinna, sĂ”lm siia, vĂ”rgu ebastabiilsus, jagunemised);
  • lĂ€bipaistev liides klastrite kĂ€ivitamiseks pikkade ja lĂŒhikeste nimedega, nagu ka :nonode@nohost;
  • Dockeri tugi sisaldub kohe, ilma vajaduseta kirjutada infrastruktuuri koodi.

See tĂ€hendab, et pĂ€rast seda, kui ma olen rakendust kohapeal testinud :nonode@nohost, vĂ”i kunstlikult jaotatud keskkonnas kasutades test_cluster_task, soovin lihtsalt kĂ€ivitada docker-compose up --scale my_app=3 ja nĂ€ha, kuidas see kĂ€itab kolme instantsi Dockeris ilma koodimuudatusteta. Soovin ka, et sĂ”ltuvad rakendused, nĂ€iteks mnesia — kui topoloogia muutub, siis kulisside taga uuendatakse klastrit ilma tĂ€iendava tĂ”uketa rakenduse poolt.

Cloister ei ole mĂ”eldud kui raamatukogu, mis suudab teha kĂ”ike: klastritoetust kuni kohvi valmistamiseni. See ei ole hĂ”bedane kuul, mis pĂŒĂŒab katta kĂ”iki vĂ”imalikke juhtumeid, ega olla akadeemiliselt tĂ€ielik lahendus selles mĂ”ttes, mida teoreetikud CS sellesse mĂ”istesse panustavad. See raamatukogu on mĂ”eldud vĂ€ga selge ĂŒlesande tĂ€itmiseks, kuid tĂ€idab oma mitte liiga suurt mahtu tööd ideaalselt. Selle ĂŒlesanne on tagada tĂ€ielik lĂ€bipaistvus kohaliku arenduskeskkonna ja jaotatud elastse keskkonna vahel, mis on tĂ€is vaenulikke konteinerite.

Valitud lÀhenemine

Cloister on mÔeldud kÀivitamiseks rakendusena, kuigi kogenud kasutajad vÔivad töötada klastrit kÀsitsi, kÀivitades Cloister.Manager sihtrakenduse superviisorite puus.

Rakenduse kÀivitamisel toetub raamatukogu failist, saadab need andmed serverisse, kust loetakse jÀrgmised pÔhivÀÀrtused:

config :cloister,
  otp_app: :my_app,
  sentry: :"cloister.local", # vÔi ~w|n1@foo n2@bar|a
  consensus: 3,              # minimaalne sÔlmede arv, mida arvestada
                             #    klaster on ĂŒles
  listener: MyApp.Listener   # kuulaja, mida kutsutakse, kui
                             #    ring on muutunud

Ülaltoodud parameetrid tĂ€hendavad sĂ”na-sĂ”nalt jĂ€rgmist: Cloister kasutatakse OTP rakenduse :my_app, kasutab erlangi teenuse avastamist sĂ”lmede ĂŒhendamiseks, vĂ€hemalt kolme, ja MyApp.Listener moodulit (mis implementeerib @behaviour Cloister.Listener) on konfigureeritud saama teateid topoloogia muutustest. TĂ€ieliku konfiguratsiooni ĂŒksikasjalikku kirjeldust leiate dokumentatsioon.

Selle konfiguratsiooniga rakendus Cloister see on kĂ€ivitub jĂ€rk-jĂ€rgult, lĂŒkates peamise rakenduse kĂ€ivitamise protsessi edasi, kuni saavutatakse kokkulepe (kolm sĂ”lme on ĂŒhendatud ja ĂŒhendatud, nagu eespool toodi vĂ€lja). See annab peamise rakenduse vĂ”imaluse eeldada, et kui see kĂ€ivitub, on klaster juba saadaval. Iga topoloogia muutuse korral (neid tuleb olema palju, kuna sĂ”lmed ei kĂ€ivitu tĂ€ielikult sĂŒnkroonselt) kutsutakse vĂ€lja töötleja MyApp.Listener.on_state_change/2. Enamikul juhtudel teeme me toimingu, kui saame sĂ”numi olekuga %Cloister.Monitor{status: :up}, mis tĂ€hendab: „Tere, klaster on kokku pandud“.

Enamikul juhtudel on seadistus consensus: 3 optimaalne, kuna isegi kui ootame rohkem sĂ”lmede ĂŒhendamist, lĂ€bib tagasiside status: :rehashing → status: :up iga uue lisatud vĂ”i eemaldatud sĂ”lmega.

ArendusreĆŸiimis on lihtsalt piisav, kui seadistada consensus: 1 ja Cloister ja see möödub rÔÔmsalt klasterdamise ootusest, nĂ€hes :nonode@nohost, vĂ”i :node@host, vĂ”i :node@host.domain — sĂ”ltuvalt sellest, kuidas sĂ”lme seadistati (:none | :shortnames | :longnames).

Jagatud rakenduste haldamine

Jagatud rakendused ei ole vaakumis, tavaliselt sisaldavad nad jagatud sĂ”ltuvusi, nagu mnesia. Meil on lihtne neid ĂŒmberkonfigureerida samast tagasisidest on_state_change/2. Siin on nĂ€iteks ĂŒksikasjalik juhend, kuidas ĂŒmber seadistada mnesia realtime-s dokumentatsioon Cloister.

Peamine eelis, mida pakub Cloister , on see, et see teostab kĂ”ik vajalikud klastrite tautumise operatsioonid pĂ€rast topoloogia muutmist kapoti all. Rakendus kĂ€ivitub lihtsalt juba ettevalmistatud jagatud keskkonnas, kĂ”igi ĂŒhendatud sĂ”lmedega, sĂ”ltumata sellest, kas me teame IP-aadresse ja seetĂ”ttu sĂ”lmede nimesid ette vĂ”i on need dĂŒnaamiliselt mÀÀratud/muutunud. See ei nĂ”ua absoluutselt mingeid spetsiaalseid docker'i konfiguratsiooni seadistusi ja arendaja perspektiivist ei ole mingit vahet, kas kĂ€ivitada jagatud keskkonnas vĂ”i lokaalselt :nonode@nohost. Rohkem teavet selle kohta saab lugeda dokumentatsioon.

. Kuigi keeruline topoloogia muutuste töötlemine on vÔimalik lÀbi iseseisva rakenduse, vÔivad alati esineda ÀÀrmised juhud, kus nende raamatukogude piirangud ja kallutatud lÀhenemine konfiguratsioonile vÔivad olla takistuseks juurutamisel. See on normaalne, lihtsalt vÔtke eelpool mainitud MyApp.Listener, alati vÔivad olla piirangulised olukorrad, kus need raamatukogu piirangud ja kallutatud lÀhenemine konfiguratsioonile muutuvad takistuseks rakendamisel. See on tÀiesti normaalne, lihtsalt vÔtke eeltoodud libcluster, mis on universaalsem, vÔi töötlege isegi madala taseme klastrit ise. Selle koodiraamatukogu eesmÀrk ei ole katta kÔiki vÔimalikke stsenaariume, vaid kasutada kÔige levinumat stsenaariumi ilma tarbetu vaevata ja mahukate kopeerimise ja kleepimisega.

MÀrkus: sellel kohal originaalis oli lause «Happy clustering!», ja Yandex, kellele ma tÔlgin (ei hakka ju sÔnaraamatutes tuhnima), pakkus mulle varianti «SÔbralik klasterdamine!». Paremat tÔlget, eriti arvestades praegust geopolitiilist olukorda, on ilmselt raske ette kujutada.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster