Izbor za čelništvo s konzulom

1. Pregled

U ovom vodiču, vidjet ćemo kako Izbor vodstva s Konzulom pomaže u osiguravanju stabilnosti podataka. Pružit ćemo praktični primjer kako upravljati distribuiranim zaključavanjem u istodobnim aplikacijama.

2. Što je konzul?

Consul je alat otvorenog koda koji pruža registra usluga i otkrivanje na temelju provjere zdravstvenog stanja. Nadalje, uključuje web-grafičko korisničko sučelje (GUI) za pregled i jednostavnu interakciju s Consulom. Također pokriva dodatne mogućnosti upravljanja sesijama i Key-Value (KV) trgovine.

U sljedećim odjeljcima usredotočit ćemo se na to kako možemo koristite Consul-ovo upravljanje sjednicama i KV trgovinu za odabir voditelja u aplikacijama s više instanci.

3. Osnove konzula

Consul agent je najvažnija komponenta koja se izvodi na svakom čvoru Consul klastera. Zadužen je za provjeru zdravlja; registriranje, otkrivanje i rješavanje usluga; pohrana podataka o konfiguraciji; i mnogo više.

Konzul agent može naletjeti dva različita načina - Poslužitelj i agent.

Glavni odgovornosti konzul poslužitelja odgovoriti na upite agenata i odabrati vođu. Vodstvo se odabire pomoću konsenzusnog protokola kako bi se osigurala dosljednost (kako je definirano CAP-om) na temelju algoritma Raft.

Ovaj članak ne obuhvaća detaljno opisivanje načina na koji konsenzus djeluje. Ipak, vrijedi spomenuti da čvorovi mogu biti u jednom od tri stanja: vođa, kandidat ili sljedbenik. Također pohranjuje podatke i odgovara na upite koji dolaze od agenata.

Agent je lakše nego konzul poslužitelj. Odgovorna je za pokretanje provjere zdravstvenog stanja registriranih usluga i prosljeđivanje upita na poslužitelj. Pogledajmo jednostavan dijagram Consul klastera:

Konzul može pomoći i na druge načine - na primjer, u istodobnim aplikacijama u kojima jedna instanca mora biti voditelj.

Pogledajmo u narednim odjeljcima kako Consul, putem upravljanja sjednicama i KV trgovine, može pružiti ovu važnu sposobnost.

4. Izbor za čelništvo s konzulom

U distribuiranim implementacijama voditelj je usluga koja drži bravu. Stoga je za visoko dostupne sustave presudno za upravljanje bravama i vođama.

Consul pruža jednostavan za korištenje KV pohrane i upravljanja sjednicama. Te funkcionalnosti služe za izgradnju izbora čelnika, pa naučimo principe koji stoje iza njih.

4.1. Prepirka u vodstvu

Prvo što sve instance koje pripadaju distribuiranom sustavu čine je da se natječu za vodstvo. Tvrdnja da ste vođa uključuje niz koraka:

  1. Sve se instance moraju složiti oko zajedničkog ključa za borbu.
  2. Dalje, instanca kreira sesiju pomoću dogovorenog ključa kroz upravljanje sesijom Consul i KV mogućnosti.
  3. Treće, trebali bi preuzeti sjednicu. Ako je povratna vrijednost pravi, brava pripada instanci, a ako lažno, instanca je sljedbenik.
  4. Slučajevi moraju neprestano paziti na sjednicu kako bi ponovno stekli vodstvo u slučaju neuspjeha ili puštanja.
  5. Konačno, vođa može otpustiti sesiju i postupak započinje iznova.

Jednom kad je vođa izabran, ostale instance koriste Konzula KV i upravljanje sjednicama kako bi otkrile vođu:

  • Dohvaćanje dogovorenog ključa
  • Dobivanje informacija o sesiji kako biste upoznali vođu

4.2. Praktični primjer

Moramo stvoriti ključ i vrijednost zajedno sa sesijom u Konzulu s više pokrenutih instanci. Kao pomoć u tome upotrijebit ćemo implementaciju Java otvorenog koda Kinguin Digital Limited Leadership Consul.

Prvo, uključimo ovisnost:

 com.github.kinguinltdhk voditelj-konzul $ {kinguinltdhk.version} com.ecwid.consul konzul-api 

Izuzeli smo konzul-api ovisnost kako bi se izbjegle kolizije na različitim verzijama Jave.

Za zajednički ključ koristit ćemo:

usluge /% s / voditelj

Isprobajmo cijeli postupak jednostavnim isječkom:

novi SimpleConsulClusterFactory () .mode (SimpleConsulClusterFactory.MODE_MULTI) .debug (true) .build () .asObservable () .subscribe (i -> System.out.println (i));

Zatim stvaramo klaster s više primjeraka s asObservable () za pristup pretplatnicima događajima. Vođa stvara sesiju u Konzulu i sve instance potvrđuju sesiju kako bi potvrdile vodstvo.

Konačno, prilagođavamo konfiguraciju konzula i upravljanje sjednicama, i dogovoreni ključ između instanci za izbor vođe:

cluster: leader: serviceName: cluster serviceId: node-1 konzul: host: localhost port: 8500 discovery: enabled: false session: ttl: 15 refresh: 7 selection: envelopeTemplate: services /% s / leader

4.3. Kako to testirati

Postoji nekoliko mogućnosti za instalaciju Consula i pokretanje agenta.

Jedna od mogućnosti implementacije Konzula je putem kontejnera. Upotrijebit ćemo sliku Consul Docker dostupnu u Docker Hubu, najvećem svjetskom spremištu za slike spremnika.

Konzula ćemo rasporediti pomoću Dockera izvođenjem naredbe:

docker run -d --name konzul -p 8500: 8500 -e CONSUL_BIND_INTERFACE = eth0 konzul

Konzul je sada pokrenut i trebao bi biti dostupan na lokalnihost: 8500.

Izvršimo isječak i provjerimo korake:

  1. Vođa stvara sesiju u Konzulu.
  2. Tada se bira (izabrani.prvi).
  3. Ostatak instanci gleda dok sesija ne izađe:
INFO: aktivni u više načina INFO: Stvorena sesija e11b6ace-9dc7-4e51-b673-033f8134a7d4 INFO: Osvježavanje sesije zakazano za frekvenciju od 7 sekundi INFO: Postavljanje frekvencije glasanja za frekvenciju od 10 sekundi ElectionMessage (status = izabran, glas = Glasanje {sessionId = 'e11b6ace -9dc7-4e51-b673-033f8134a7d4 ', serviceName = "cluster-app", serviceId = "node-1"}, error = null) ElectionMessage (status = selected.first, vote = Vote {sessionId =' e11b6ace-9dc7- 4e51-b673-033f8134a7d4 ', serviceName = "cluster-app", serviceId = "node-1"}, error = null) ElectionMessage (status = selected, vote = Vote {sessionId =' e11b6ace-9dc7-4e51-b673-033f8134a7d4 ', serviceName = "cluster-app", serviceId = "node-1"}, pogreška = null) 

Consul također nudi web GUI dostupan na // localhost: 8500 / ui.

Otvorimo preglednik i kliknite odjeljak ključ / vrijednost kako bismo potvrdili da je sesija stvorena:

Stoga je jedna od istodobnih instanci stvorila sesiju koristeći dogovoreni ključ za aplikaciju. Tek kad se sesija pusti, postupak može započeti ispočetka i nova instanca može postati vođa.

5. Zaključak

U ovom smo članku pokazali osnove izbora za vodstvo u aplikacijama visokih performansi s više instanci. Pokazali smo kako upravljanje sjednicama i mogućnosti spremanja KV-a mogu pomoći pri dobivanju brave i odabiru voditelja.

Kao i uvijek, kôd je dostupan na GitHub-u.