Service Discovery i distribuerade system med exempel frÄn Consul. Alexander Sigajev.

Jag vill att du ska ta del av redogörelsen av Alexander Sigachevs föredrag om Service Discovery i distribuerade system med Consul som exempel.

Service Discovery Àr utformat för att ansluta en ny applikation till vÄr befintliga miljö med minimi kostnader. Genom att anvÀnda Service Discovery kan vi maximalt separera antingen en container i form av en Docker, eller en virtuell tjÀnst frÄn den miljö dÀr den körs.

Spela video

Jag hÀlsar alla! Jag heter Alexander Sigachev, arbetar pÄ företaget Inventos. Idag kommer jag att introducera er för konceptet Service Discovery. Vi kommer att titta pÄ Service Discovery med Consul som exempel.

Service Discovery i distribuerade system med exempel frÄn Consul. Alexander Sigajev.

Vilka problem löser Service Discovery? Service Discovery Àr utformat för att ansluta en ny applikation till vÄr befintliga miljö med minimi kostnader. Genom att anvÀnda Service Discovery kan vi maximalt separera antingen en container i form av en Docker, eller en virtuell tjÀnst frÄn den miljö dÀr den körs.

Hur ser det ut? Ett klassiskt exempel pĂ„ webben – det Ă€r frontend som tar emot anvĂ€ndarens förfrĂ„gan. Sedan utför det routering till backend. I detta exempel balanserar load-balancern mellan tvĂ„ backend.

Service Discovery i distribuerade system med exempel frÄn Consul. Alexander Sigajev.

HÀr ser vi att vi startar en tredje instans av applikationen. NÀr applikationen startar registrerar den sig i Service Discovery. Service Discovery informerar load-balancern. Load-balancern Àndrar sin konfiguration automatiskt och den nya backend kopplas in. PÄ sÄ sÀtt kan backend lÀggas till eller, tvÀrtom, tas bort frÄn drift.

Service Discovery i distribuerade system med exempel frÄn Consul. Alexander Sigajev.

Vad mer Àr praktiskt att göra med hjÀlp av Service Discovery? I Service Discovery kan konfigurationer av Nginx, certifikat och en lista över aktiva backend-servrar lagras.

Service Discovery i distribuerade system med exempel frÄn Consul. Alexander Sigajev.Service Discovery möjliggör ocksÄ upptÀckten av fel och avbrott. Vilka möjliga scenarier finns det vid felupptÀckten?

  • Den hĂ€r applikationen som vi har utvecklat informerar sjĂ€lv Service Discovery om att den fortfarande Ă€r operativ.
  • Service Discovery Ă„ sin sida frĂ„gar applikationen om tillgĂ€nglighet.
  • Eller sĂ„ anvĂ€nds ett externt skript eller applikation som kontrollerar vĂ„r applikation för tillgĂ€nglighet och informerar Service Discovery att allt Ă€r bra och att vi kan arbeta, eller vice versa, att nĂ„got Ă€r fel och den hĂ€r instansen av applikationen mĂ„ste tas bort frĂ„n balanseringen.

Varje schema kan tillÀmpas beroende pÄ vilken programvara vi anvÀnder. Till exempel, om vi just har börjat utveckla ett nytt projekt kan vi utan problem tillhandahÄlla ett schema dÀr vÄr applikation notifierar Service Discovery. Eller sÄ kan vi ansluta sÄ att Service Discovery genomför kontroller.

Om applikationen visade sig vara en arvet frÄn nÄgon annan eller utvecklad av en extern part, sÄ passar den tredje varianten, dÀr vi skriver en hanterare, och allt detta integreras automatiskt i vÄrt arbete.

Service Discovery i distribuerade system med exempel frÄn Consul. Alexander Sigajev.

Detta Àr ett av exemplen. Load-balancer i form av nginx laddas om. Detta Àr ett ytterligare verktyg som tillhandahÄlls tillsammans med Consul. Det Àr consul-template. Vi beskriver en regel. Vi sÀger att vi anvÀnder en mall (Golang-mallverktyget). Vid hÀndelser, nÀr notifieringar om Àndringar intrÀffar, regenereras den och Service Discovery skickar kommandot "reload". Ett enkelt exempel Àr nÀr nginx rekonfigureras och startas om vid en hÀndelse.

Service Discovery i distribuerade system med exempel frÄn Consul. Alexander Sigajev.

Vad Àr Consul?

  • Först och frĂ€mst Ă€r det Service Discovery.

  • Det har en mekanism för tillgĂ€nglighetskontroll – Health Checking.

  • Det har ocksĂ„ en KV Store.

  • Och dess grund förutsĂ€tter möjlighet att anvĂ€nda Multi Datacenter.

Vad kan allt detta anvÀndas till? I KV Store kan vi lagra exempel pÄ konfigurationer. Health Checking kan anvÀndas för att kontrollera lokala tjÀnster och notifiera. Multi Datacenter anvÀnds för att kunna bygga en karta över tjÀnster. Till exempel har Amazon flera zoner och dirigerar trafiken pÄ mest optimala sÀtt, sÄ att det inte finns onödiga förfrÄgningar mellan datacentren, vilka debiteras separat frÄn lokal trafik och dÀrmed har lÀgre latens.

Service Discovery i distribuerade system med exempel frÄn Consul. Alexander Sigajev.

LÄt oss ta en liten titt pÄ de termer som anvÀnds i Consul.

  • Consul Ă€r en tjĂ€nst skriven i Go. En av fördelarna med programmet skrivet i Go Ă€r att det Ă€r en binĂ€rfil som du helt enkelt laddar ner. Du startar den frĂ„n valfri plats och har inga beroenden.
  • Sedan kan vi med hjĂ€lp av nycklar starta den hĂ€r tjĂ€nsten antingen i klientlĂ€ge eller i serverlĂ€ge.
  • Attributet "datacenter" lĂ„ter oss sĂ€tta en flagga för vilket datacenter denna server tillhör.
  • Consensus baseras pĂ„ raft-protokollet. Om nĂ„gon Ă€r intresserad kan man lĂ€sa mer om det pĂ„ Consuls webbplats. Det Ă€r ett protokoll som gör det möjligt att bestĂ€mma ledaren och avgöra vilka data som ska beaktas som giltiga och tillgĂ€ngliga.
  • Gossip – en protokoll som möjliggör interaktion mellan noder. Detta system Ă€r decentraliserat. Inom ett datacenter kommunicerar alla noder med sina grannar. Och dĂ€rmed överförs information om aktuellt tillstĂ„nd mellan dem. Man kan sĂ€ga att det hĂ€r Ă€r skvaller mellan grannarna.
  • LAN Gossip – lokal datadelning mellan grannar inom ett datacenter.
  • WAN Gossip – anvĂ€nds nĂ€r vi behöver synkronisera information mellan tvĂ„ datacenter. Informationen överförs mellan noder som markeras som servrar.
  • RPC – möjliggör att utföra förfrĂ„gningar via en klient pĂ„ servern.

Beskrivning av RPC. Anta att Consul körs som en klient pÄ en virtuell eller fysisk server. Vi kommunicerar lokalt med den. Sedan begÀr den lokala klienten information frÄn servern och synkroniseras. Beroende pÄ instÀllningarna kan informationen ges frÄn den lokala cachen eller synkroniseras med ledaren, servermaster.

Dessa tvÄ scheman har bÄde fördelar och nackdelar. Om vi arbetar med lokal cache, Àr det snabbt. Om vi arbetar med data som lagras pÄ servern, tar det lÀngre tid, men vi fÄr mer aktuell information.

Service Discovery i distribuerade system med exempel frÄn Consul. Alexander Sigajev.

Om vi skulle illustrera detta grafiskt, skulle det se ut som en webbplatsbild. Vi ser att tre masters körs. En markerad med en stjÀrna som ledare. I det hÀr exemplet finns tre klienter som utbyter information lokalt via UDP/TCP. Och information mellan datacentren överförs mellan servrar. HÀr interagerar klienterna lokalt med varandra.

Service Discovery i distribuerade system med exempel frÄn Consul. Alexander Sigajev.

Vilken API tillhandahÄller Consul? För att fÄ information finns det tvÄ typer av API i Consul.

Detta Àr DNS API. Som standard körs Consul pÄ port 8600. Vi kan konfigurera en proxyfrÄga och sÀkerstÀlla tillgÄng genom lokal upplösning, via lokal DNS. Vi kan göra ett domÀnanrop och fÄ information om IP-adressen som svar.

HTTP API – antingen kan vi pĂ„ 8500-porten lokalt begĂ€ra information om en specifik tjĂ€nst och fĂ„ ett JSON-svar som visar vilken IP som servern har, vilken vĂ€rd, vilken port som Ă€r registrerad. Ytterligare information kan ocksĂ„ överföras via token.

Service Discovery i distribuerade system med exempel frÄn Consul. Alexander Sigajev.

Vad behövs för att starta Consul?

I den första versionen anger vi i utvecklarlÀge en flagga som visar att detta Àr utvecklarlÀge. Agenten startar som en server och utför hela funktionen sjÀlvstÀndigt pÄ en och samma maskin. BekvÀmt, snabbt och det krÀvs praktiskt taget inga ytterligare instÀllningar för första start.

Det andra lÀget Àr produktionsstart. HÀr blir lanseringen nÄgot mer komplicerad. Om vi inte har nÄgon version av konsolen mÄste vi starta det första systemet i bootstrap-berget, d.v.s. denna maskin kommer att ta ansvar som ledare. Vi startar den, och sedan startar vi den andra serverinstansen, och överför informationen om var vÄr huvudserver ligger. Den tredje startas. Efter att tre maskiner har blivit aktiverade, startar vi den första maskinen frÄn det pÄgÄende bootstrapet i normalt lÀge. Data synkroniseras, och den inledande klustret Àr redan aktivt.

Det rekommenderas att starta mellan tre och sju instanser i serverlÀge. Detta beror pÄ att om antalet servrar ökar, ökar tiden för informationssynkronisering mellan dem. Antalet noder bör vara ojÀmnt för att sÀkerstÀlla kvorum.

Service Discovery i distribuerade system med exempel frÄn Consul. Alexander Sigajev.

Hur sÀkerstÀlls Health Checks? I konfigurationskatalogen för Consul skriver vi en kontrollregel i JSON-format. Första alternativet Àr tillgÀngligheten av, i detta exempel, domen google.com. Och vi anger att denna kontroll ska göras var 30:e sekund. PÄ sÄ sÀtt kontrollerar vi att vÄr nod har tillgÄng till det externa nÀtverket.

Det andra alternativet Àr sjÀlvkontroll. Vi skickar en vanlig curl-anrop till localhost pÄ den angivna porten med ett intervall pÄ 10 sekunder.

Dessa kontroller summeras och gÄr till Service Discovery. Baserat pÄ tillgÀngligheten antingen utesluts noderna eller lÀggs till i listan över tillgÀngliga och korrekt fungerande maskiner.

Service Discovery i distribuerade system med exempel frÄn Consul. Alexander Sigajev.

Consul tillhandahÄller ocksÄ ett anvÀndargrÀnssnitt som startas med en separat flagga och som kommer att finnas tillgÀngligt pÄ maskinen. Detta gör att man kan visa information och ocksÄ göra vissa Àndringar.

I detta exempel har fliken "TjÀnst" öppnats. Det visas att tre tjÀnster körs, varav en Àr Consul. Antalet verifieringar som har utförts. Och det finns tre datacenter dÀr maskinerna befinner sig.

Service Discovery i distribuerade system med exempel frÄn Consul. Alexander Sigajev.

Detta Àr ett exempel pÄ fliken «Nodes». Vi ser att de har sammansatta namn med data-center involverade. HÀr visas ocksÄ vilka tjÀnster som Àr aktiverade, det vill sÀga vi ser att taggarna inte Àr angivna. I dessa extra taggar kan man ange viss information som utvecklaren kan anvÀnda för att ange ytterligare parametrar.

Man kan ocksÄ skicka information till Consul om diskarnas status, om den genomsnittliga belastningen.

FrÄgor

FrÄga: Vi har en docker-container, hur anvÀnder man den med Consul?

Svar: Det finns flera metoder för docker-containern. En av de vanligaste Àr att anvÀnda en extern docker-container ansvarig för registreringen. Vid start överförs dockersocket. Alla hÀndelser kring registrering och avpublisering av containern registreras i Consul.

FrÄga: Det vill sÀga, startar Consul docker-containern sjÀlv?

Svar: Nej. Vi startar docker-containern. Och vid konfiguration anger vi – lyssna pĂ„ den hĂ€r soketen. Det fungerar ungefĂ€r pĂ„ samma sĂ€tt som med certifikatet, nĂ€r vi överför information om var och vad som finns.

FrÄga: SÄ inuti docker-containern som vi försöker koppla till Service Discovery mÄste det finnas nÄgon logik som kan skicka data till Consul?

Svar: Inte riktigt. NÀr den startar skickar vi genom miljövariabler. Till exempel, servicens namn, serviceport. I registret lyssnar den pÄ denna information och registrerar den i Consul.

FrÄga: Jag har Ànnu en frÄga om UI. Vi har distribuerat UI, sÀg, pÄ produktionsservern. Vad hÀnder med sÀkerheten? Var lagras data? Kan man pÄ nÄgot sÀtt samla data?

Svar: I UI kommer faktiskt datan frÄn databasen och frÄn Service Discovery. Lösenord anges manuellt i instÀllningarna.

FrÄga: Kan detta publiceras pÄ internet?

Svar: Som standard startar Consul pÄ localhost. För att publicera detta pÄ internet mÄste man installera en proxy. Vi ansvarar sjÀlva för sÀkerhetsregler.

FrÄga: Ger den historiska data direkt ur lÄdan? Det skulle vara intressant att se statistik om Health Checks. Man kan ju diagnostisera problem om servern ofta gÄr ner.

Svar: Jag Àr inte sÀker pÄ att det finns detaljer om kontrollerna dÀr.

FrÄga: Inte sÄ mycket det aktuella tillstÄndet, utan mer dynamiken Àr viktig.

Svar: För analys – ja.

FrÄga: BÀttre att inte anvÀnda Service Discovery för docker med Consul?

Svar: Jag skulle inte rekommendera att anvÀnda det. Syftet med presentationen Àr att introducera vad detta begrepp innebÀr. Historiskt sett har det utvecklats till, enligt min mening, version 1. Nu finns det mer fullfjÀdrade lösningar, som Kubernetes, som har allt detta under huven. Inom Kubernetes Service Discovery Àr Etcd underlÀgsen. Men jag kÀnner inte till det sÄ vÀl som jag gör med Consul. DÀrför bestÀmde jag mig för att demonstrera Service Discovery med hjÀlp av Consul.

FrÄga: Fördröjer schemat med ledarservrar applikationens start överlag? Och hur identifierar Consul en ny ledare om den nuvarande ligger nere?

Svar: De har beskrivit en hel protokoll. Om du Àr intresserad kan du lÀsa om det.

FrÄga: Aggerar Consul som en fullstÀndig server och gÄr alla förfrÄgningar genom den?

Svar: Den fungerar inte som en fullstÀndig server utan tar en viss zon. Den slutar vanligtvis med service.consul. Och sÄ följer vi logiken. Vi anvÀnder inte domÀnnamn i produktion, utan specifikt intern infrastruktur, som oftast döljs bakom cachelagring av servern, om vi arbetar med DNS.

FrÄga: SÄ, om vi vill komma Ät databasen, kommer vi pÄ ett eller annat sÀtt att behöva konsultera Consul för att först hitta den databasen, rÀtt?

Svar: Ja. Om vi arbetar med DNS fungerar det som utan Consul nÀr vi anvÀnder DNS-namn. Vanligtvis gör inte moderna applikationer en DNS-förfrÄgan för varje begÀran, eftersom vi har upprÀttat en anslutning och allt fungerar. Under en tid anvÀnder vi praktiskt taget inte det. Om anslutningen bryts, ja, dÄ frÄgar vi igen var vÄr databas Àr och gÄr dit.

Chat om Hashicorp-produkter — AnvĂ€ndarchatt för Hashicorp: Consul, Nomad, Terraform

P.S. AngÄende hÀlsokontroller. I Consul som i Kubernetes anvÀnds samma system för att kontrollera tjÀnsters hÀlsostatus baserat pÄ statuskoden.

200 OK för hÀlsosam
503 TjÀnst otillgÀnglig för ohÀlsosam

KĂ€llor:
https://www.consul.io/docs/agent/checks.html
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
https://thoslin.github.io/microservice-health-check-in-kubernetes/

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster