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:
- Sve se instance moraju složiti oko zajedničkog ključa za borbu.
- Dalje, instanca kreira sesiju pomoću dogovorenog ključa kroz upravljanje sesijom Consul i KV mogućnosti.
- Treće, trebali bi preuzeti sjednicu. Ako je povratna vrijednost pravi, brava pripada instanci, a ako lažno, instanca je sljedbenik.
- Slučajevi moraju neprestano paziti na sjednicu kako bi ponovno stekli vodstvo u slučaju neuspjeha ili puštanja.
- 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:
- Vođa stvara sesiju u Konzulu.
- Tada se bira (izabrani.prvi).
- 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.