Klouschter → einfach OTP Cluster Management

Bal all erfollegräich Geschäftsapplikatioun desto oder spéider geet an eng Phase an där horizontaler Skaléierung erfuerderlech ass. A ville Fäll kënnt Dir einfach eng nei Instanz starten an d'Laaschtduerchschnëtt reduzéieren. Awer et ginn och manner trivial Fäll, wou mir musse suergen, datt verschidde Wirbelen iwwerenee wëssen an d'Aarbechtslaascht suergfälteg verdeelen.

Klouschter → einfach OTP Cluster Management

Et huet sech esou glécklech erausgestallt kritt, déi mir fir seng agreabel Syntax an Hype ronderëm gewielt hunn, huet eng éischt Klass Ënnerstëtzung fir verdeelt Systemer. An Theorie kléngt dëst komplett trivial:

Message laanschtgaangen tëscht Prozesser op verschiddene Wirbelen, souwéi tëscht Linken a Monitore, ass transparent […]

An der Praxis ass alles e bësse méi komplizéiert. Verdeelt kritt gouf entwéckelt wann "Container" eng grouss Eisenkëscht fir d'Verschécken bedeit, an "Docker" war einfach e Synonym fir Longshoreman. IN IP4 et waren vill onbesat Adressen, Netzbriechungen goufen normalerweis duerch Ratten verursaacht, déi duerch de Kabel kauen, an d'Duerchschnëttszäit vum Produktiounssystem gouf a Joerzéngte gemooss.

Elo si mir all onheemlech selbstänneg, verpackt a lafen verdeelt kritt an engem Ëmfeld wou dynamesch IP Adressen op de Prinzip vun der grousser Zoufällegkeet ausgeliwwert ginn, an Node kënnen erschéngen a verschwannen op der Luucht vun der lénkser Ferse vum Scheduler. Ze vermeiden Koup vun boilerplate Code an all Projet Lafen engem verdeelt kritt, fir dat feindlecht Ëmfeld ze bekämpfen, ass Hëllef néideg.

Remarque: Ech sinn bewosst, datt et libcluster. Et ass wierklech cool, et huet iwwer dausend Stären, den Auteur ass berühmt an der Gemeinschaft, an all dat. Wann d'Methoden, déi vun dësem Package ugebuede ginn fir e Cluster ze kreéieren an z'erhalen, genuch fir Iech sinn, sinn ech frou fir Iech. Leider brauch ech vill méi. Ech wëll de Setup am Detail kontrolléieren an net en externe Spectateur am Theater vun der Clusterreorganisatioun sinn.

Ufuerderunge

Wat ech perséinlech gebraucht hunn, war eng Bibliothéik déi d'Gestioun vum Cluster iwwerhëlt an déi folgend Eegeschaften hätt:

  • transparent Aarbecht mat enger haart kodéierter Lëscht vun Noden an dynamescher Entdeckung duerch Servicer kritt;
  • voll funktionell Réckruff fir all Topologie Ännerung (Node do, Node hei, Netz Onstabilitéit, Spalten);
  • transparent Interface fir e Stärekoup mat laangen a kuerzen Nimm lancéiert, wéi mat :nonode@nohost;
  • Docker Ënnerstëtzung aus der Këscht, ouni Infrastrukturcode ze schreiwen.

Dat lescht bedeit datt nodeems ech d'Applikatioun lokal getest hunn an :nonode@nohost, oder an engem kënschtlech verdeelt Ëmfeld benotzt test_cluster_task, Ech wëll just lafen docker-compose up --scale my_app=3 a kuckt wéi et dräi Instanzen am Docker ausféiert ouni Code Ännerungen. Ech wëll och ofhängeg Uwendungen wéi mnesia - wann d'Topologie ännert, hannert de Kulissen baue se de Cluster live op ouni zousätzlech Kick vun der Applikatioun.

Kloister war net geduecht fir eng Bibliothéik ze sinn, déi alles fäeg ass, vun engem Cluster z'ënnerstëtzen bis Kaffi ze maachen. Et ass keng Sëlwerkugel déi als Zil huet all méiglech Fäll ze decken, oder eng akademesch komplett Léisung ze sinn am Sënn datt Theoretiker aus CS an dëse Begrëff setzen. Dës Bibliothéik ass entwéckelt fir e ganz kloeren Zweck ze déngen, awer maacht seng net ze grouss Aarbecht perfekt. Dëst Zil ass eng komplett Transparenz tëscht dem lokalen Entwécklungsëmfeld an engem verdeelt elastesche Ëmfeld voller feindleche Container ze bidden.

Ausgewielt Approche

Kloister ass geduecht fir als Applikatioun ze lafen, obwuel fortgeschratt Benotzer mat der Versammlung an der Ënnerhalt vum Cluster manuell kënne schaffen andeems se direkt lafen Cloister.Manager am Supervisorbaum vun der Zil-Applikatioun.

Wann Dir als Applikatioun leeft, hänkt d'Bibliothéik op config, aus deem et déi folgend Basiswäerter liest:

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

D'Parameteren hei uewen bedeit wuertwiertlech déi folgend: Kloister fir OTP Applikatioun benotzt :my_app, benotzt erlang Service Entdeckung Noden ze verbannen, op d'mannst dräi, an MyApp.Listener Modul (Ëmsetzung @behaviour Cloister.Listener) ass konfiguréiert fir Notifikatiounen iwwer Topologie Ännerungen ze kréien. Eng detailléiert Beschreiwung vun der kompletter Konfiguratioun fannt Dir an Dokumentatioun.

Mat dëser Konfiguratioun ass d'Applikatioun Kloister wäert lancéiert an Etappen, Verzögerung vum Prozess fir d'Haaptapplikatioun unzefänken bis de Konsens erreecht gëtt (dräi Wirbelen sinn ugeschloss a verbonne, wéi am Beispill hei uewen.) Dëst gëtt der Haaptapplikatioun d'Méiglechkeet unzehuelen datt wann se ufänkt, de Cluster scho verfügbar ass. Wann ëmmer d'Topologie ännert (et wäerte vill vun hinnen sinn, well d'Knueten net komplett synchron ufänken), gëtt den Handler genannt MyApp.Listener.on_state_change/2. Déi meescht vun der Zäit maache mir eng Handlung wann mir e Statusmeldung kréien %Cloister.Monitor{status: :up}, dat heescht: "Moien, de Cluster ass zesummegebaut."

Am meeschte Fäll, Installatioun consensus: 3 ass optimal well och wa mir méi Noden erwaarden fir ze verbannen, wäert de Réckruff duerchgoen status: :rehashingstatus: :up op all nei dobäi oder ewechgeholl Node.

Wann Dir am Entwécklungsmodus ufänkt, musst Dir just astellen consensus: 1 и Kloister wäert glécklech d'Waarden op Clusterversammlung iwwersprangen wann hien gesäit :nonode@nohostoder :node@hostoder :[email protected] - jee nodeem wéi den Node konfiguréiert gouf (:none | :shortnames | :longnames).

Verdeelt Applikatioun Management

Verdeelt Uwendungen net an engem Vakuum enthalen normalerweis verdeelt Ofhängegkeeten, wéi z mnesia. Et ass einfach fir eis hir Rekonfiguratioun vum selwechte Réckruff ze handhaben on_state_change/2. Hei, zum Beispill, ass eng detailléiert Beschreiwung wéi Dir nei konfiguréieren mnesia op der fléien an Dokumentatioun Kloister.

D'Haaptrei Virdeel vun benotzen Kloister ass datt et all déi néideg Operatioune mécht fir de Stärekoup opzebauen no enger Topologieännerung ënner der Capot. D'Applikatioun leeft einfach an engem schonn preparéierten verdeelt Ëmfeld, mat all Noden verbonnen, egal ob mir d'IP Adressen kennen an dofir d'Node Nimm am Viraus, oder se dynamesch zougewisen / geännert goufen. Dëst erfuerdert absolut keng speziell Docker Konfiguratiounsastellungen an aus der Siicht vun engem Applikatiounsentwéckler ass et keen Ënnerscheed tëscht engem verdeeltem Ëmfeld ze lafen oder an engem lokalen Lafen. :nonode@nohost. Dir kënnt méi iwwer dëst liesen an Dokumentatioun.

Och wann komplex Handhabung vun Topologie Ännerungen méiglech ass duerch eng personaliséiert Implementatioun MyApp.Listener, Et kann ëmmer Rand Fäll sinn, wou dës Bibliothéik Aschränkungen an Konfiguratioun Biases beweisen de Grondsteen vun Implementatioun gin. Et ass ok, huelt just dat uewen libcluster, wat méi allgemeng Zwecker ass, oder souguer selwer de Low-Level Cluster handhaben. D'Zil vun dëser Code Bibliothéik ass net all méiglech Szenario ze decken, mee déi allgemeng Szenario ouni onnéideg Péng an ëmständleche Copy-Paste ze benotzen.

Opgepasst: Zu dësem Zäitpunkt am Original war den Ausdrock "Happy Clustering!", an Yandex, mat deem ech iwwersetzen (ech muss net selwer duerch Dictionnairen goen), huet mir d'Optioun "Happy Clustering!" ugebueden! Et ass vläicht net méiglech eng besser Iwwersetzung virzestellen, besonnesch am Liicht vun der aktueller geopolitescher Situatioun.

Source: will.com

Setzt e Commentaire