Zerbitzuaren Aurkikuntza sistema banatuetan Consul adibidea erabiliz. Alexander Sigachev

Alexander Sigachev-en Zerbitzuaren aurkikuntza txostenaren transkripzioa irakurtzea gomendatzen dizut sistema banatuetan Consul adibide gisa erabiliz.

Service Discovery kostu minimoarekin aplikazio berri bat gure lehendik dagoen ingurunera konektatu ahal izateko sortu zen. Service Discovery erabiliz, docker edukiontzi bat edo zerbitzu birtual bat exekutatzen ari den ingurunetik ahalik eta gehien bereiz ditzakegu.

Ongi etorri denei! Alexander Sigachev naiz, Inventosen egiten dut lan. Eta gaur Service Discovery bezalako kontzeptu bat aurkeztuko dizut. Ikus dezagun Service Discovery adibide gisa Consul erabiliz.

Zerbitzuaren Aurkikuntza sistema banatuetan Consul adibidea erabiliz. Alexander Sigachev

Zer arazo konpontzen ditu Service Discovery-k? Service Discovery kostu minimoarekin aplikazio berri bat gure lehendik dagoen ingurunera konektatu ahal izateko sortu zen. Service Discovery erabiliz, docker edukiontzi bat edo zerbitzu birtual bat exekutatzen ari den ingurunetik ahalik eta gehien bereiz ditzakegu.

Nolakoa da? Webeko adibide klasiko batean, hau da erabiltzailearen eskaera onartzen duen frontend-a. Ondoren, backend-era bideratzen du. Adibide honetan, karga-orekatzaile honek bi backend orekatzen ditu.

Zerbitzuaren Aurkikuntza sistema banatuetan Consul adibidea erabiliz. Alexander Sigachev

Hemen ikusten dugu aplikazioaren hirugarren instantzia bat abiarazten ari garela. Horren arabera, aplikazioa hasten denean, Service Discovery-n erregistratzen da. Service Discovery-k karga-orekatzaileari jakinarazten dio. Load-balancer-ek bere konfigurazioa automatikoki aldatzen du eta backend berria martxan jartzen da. Horrela, backend-ak gehi daitezke, edo, alderantziz, lanetik kanpo utzi.

Zerbitzuaren Aurkikuntza sistema banatuetan Consul adibidea erabiliz. Alexander Sigachev

Zer gehiago egitea komenigarria da Service Discovery-rekin? Service Discovery-k nginx konfigurazioak, ziurtagiriak eta backend zerbitzari aktiboen zerrenda gorde ditzake.

Zerbitzuaren Aurkikuntza sistema banatuetan Consul adibidea erabiliz. Alexander SigachevService Discovery-k hutsegiteak detektatzeko eta hutsegiteak detektatzeko aukera ere ematen du. Zeintzuk dira akatsak detektatzeko eskema posibleak?

  • Garatu dugun aplikazio honek automatikoki oraindik funtzionatzen duela jakinarazten dio Service Discovery-ri.
  • Service Discovery-k, bere aldetik, aplikazioaren erabilgarritasuna aztertzen du.
  • Edo hirugarrenen script edo aplikazio bat erabiltzen dugu, gure aplikazioa erabilgarritasuna egiaztatzen duena eta Service Discovery-ri jakinarazten diona dena ondo dagoela eta funtziona dezakeela, edo, alderantziz, dena gaizki dagoela eta aplikazioaren instantzia hori orekatzetik kanpo utzi behar dela.

Eskema bakoitza zer software erabiltzen dugun arabera erabil daiteke. Adibidez, proiektu berri bat garatzen hasi berri gara, orduan erraz eskain dezakegu eskema bat gure aplikazioak Service Discovery jakinarazten duenean. Edo Service Discovery egiaztatzen ari den konektatu dezakegu.

Aplikazioa heredatu badugu edo beste norbaitek garatu badu, hirugarren aukera egokia da kudeatzaile bat idazten dugunean, eta hori guztia automatikoki sartzen da gure lanean.

Zerbitzuaren Aurkikuntza sistema banatuetan Consul adibidea erabiliz. Alexander Sigachev

Hau adibide bat da. Nginx formako karga-orekatzailea berrabiarazi da. Hau Consul-ekin ematen den aukerako erabilgarritasuna da. Hau kontsul-txantiloia da. Araua deskribatzen dugu. Txantiloi bat erabiltzen ari garela esaten dugu (Golang Template Engine). Gertaerak gertatzen direnean, aldaketak gertatu direnean, birsortzen da eta "berriro kargatu" komandoa bidaltzen da Service Discovery-ra. Adibiderik errazena gertaera batek nginx birkonfiguratu eta berrabiarazten duenean da.

Zerbitzuaren Aurkikuntza sistema banatuetan Consul adibidea erabiliz. Alexander Sigachev

Zer da Kontsula?

  • Lehenik eta behin, hau Service Discovery da.

  • Erabilgarritasuna egiaztatzeko mekanismo bat du - Osasun egiaztapena.

  • KV denda bat ere badu.

  • Eta Multi Datacenter erabiltzeko gaitasunean oinarritzen da.

Zertarako erabil daiteke hau guztia? KV dendan adibideko konfigurazioak gorde ditzakegu. Osasun Kontrola tokiko zerbitzua egiaztatu eta jakinarazi dezakegu. Multi Datacenter erabiltzen da zerbitzu-mapa bat eraiki ahal izateko. Esaterako, Amazon-ek hainbat zona eta trafikoa bideratzen ditu modurik hoberenean, datu-zentroen artean alferrikako eskaerarik egon ez dadin, tokiko trafikotik bereizita kobratzen direnak eta, horrenbestez, latentzia txikiagoa dutenak.

Zerbitzuaren Aurkikuntza sistema banatuetan Consul adibidea erabiliz. Alexander Sigachev

Uler ditzagun apur bat Kontsulan erabiltzen diren terminoak.

  • Kontsula Go-n idatzitako zerbitzua da. Go programa baten abantailetako bat deskargatu berri duzun fitxategi bitar bat da. Edozein lekutatik abiarazi eta ez duzu inolako menpekotasunik.
  • Ondoren, teklak erabiliz, zerbitzu hau bezero moduan edo zerbitzari moduan abiarazi dezakegu.
  • Gainera, "datu-zentroa" atributuak zerbitzari hau zein datu-zentrori dagokion bandera ezar dezakezu.
  • Adostasuna – baltsa protokoloan oinarrituta. Norbaitek interesa badu, honi buruzko informazio gehiago irakur dezakezu Kontsularen webgunean. Liderra zehazteko eta zein diru baliozko eta eskuragarritzat jotzen den zehazteko aukera ematen duen protokoloa da.
  • Gossip nodoen arteko elkarrekintza ahalbidetzen duen protokoloa da. Gainera, sistema hau deszentralizatua dago. Datu-zentro baten barruan, nodo guztiak bizilagunekin komunikatzen dira. Eta, horren arabera, egungo egoerari buruzko informazioa elkarri transmititzen zaio. Auzokideen arteko esamesak direla esan dezakegu.
  • LAN Gossip - datu-zentro bereko auzokideen arteko tokiko datu-trukea.
  • WAN Gossip - bi datu-zentroren artean informazioa sinkronizatu behar dugunean erabiltzen da. Zerbitzari gisa markatutako nodoen artean informazio-fluxua da.
  • RPC - zerbitzari batean bezero baten bidez eskaerak exekutatzeko aukera ematen du.

RPCren deskribapena. Demagun Consul bezero gisa exekutatzen ari dela makina birtual edo zerbitzari fisiko batean. Berarekin harremanetan jartzen gara lokalean. Eta gero tokiko bezeroak zerbitzariari informazioa eskatzen dio eta sinkronizatu egiten da. Ezarpenen arabera, informazioa berreskura daiteke tokiko cachetik, edo liderrekin sinkronizatu daiteke zerbitzari maisuarekin.

Bi eskema hauek alde onak eta txarrak dituzte. Tokiko cache batekin lan egiten badugu, azkarra da. Zerbitzarian gordeta dauden datuekin lan egiten badugu, denbora gehiago behar da, baina informazio garrantzitsuagoa lortzen dugu.

Zerbitzuaren Aurkikuntza sistema banatuetan Consul adibidea erabiliz. Alexander Sigachev

Hau grafikoki irudikatzen baduzu, hau da gunearen argazkia. Ikusten dugu hiru maisu ditugula martxan. Bat izartxo batekin markatuta dago lider gisa. Adibide honetan, UDP/TCP bidez informazioa lokalean elkartrukatzen duten hiru bezero daude. Eta datu-zentroen arteko informazioa zerbitzarien artean transferitzen da. Hemen bezeroak elkarren artean elkarreragiten lokalean.

Zerbitzuaren Aurkikuntza sistema banatuetan Consul adibidea erabiliz. Alexander Sigachev

Zein API eskaintzen du Consul? Informazioa lortzeko, Consulek bi API mota ditu.

Hau DNS APIa da. Lehenespenez, Consul 8600 atakan exekutatzen da. Eskaeraren proxy-a konfiguratu eta sarbidea eman dezakegu ebazpen lokalaren bidez, DNS lokalaren bidez. Domeinuaren arabera kontsultatu eta erantzun gisa IP helbidearen informazioa jaso dezakegu.

HTTP APIa - edo lokalean zerbitzu zehatz bati buruzko informazioa eska dezakegu 8500 atakan eta JSON erantzuna jaso dezakegu, zer IP zerbitzariak duen, zer ostalari, zer ataka erregistratuta dagoen. Eta informazio gehigarria token bidez transmititu daiteke.

Zerbitzuaren Aurkikuntza sistema banatuetan Consul adibidea erabiliz. Alexander Sigachev

Zer behar duzu Kontsul exekutatzeko?

Lehenengo aukeran, garatzaile moduan hau garatzaile moduan dela adierazten duen bandera adierazten dugu. Agentea zerbitzari gisa hasten da. Eta funtzio osoa burutzen du modu independentean makina batean. Erosoa, azkarra eta ia ez da ezarpen gehigarririk behar lehen abiarazterako.

Bigarren modua ekoizpenean abiaraztea da. Hemen abiaraztea pixka bat konplikatu egiten da. Kontsularen bertsiorik ez badugu, orduan lehen makina eraman behar dugu bootstrap-era, hau da, makina hau, buruzagiaren ardurak hartuko dituena. Altxatzen dugu, gero zerbitzariaren bigarren instantzia planteatzen dugu, gure maisua dagoen non dagoen informazioa pasatzen dugu. Hirugarrena planteatzen dugu. Hiru makina martxan izan ondoren, modu normalean berrabiaraziko dugu lehen makinan martxan dagoen abiotik. Datuak sinkronizatuta daude eta hasierako klusterra dagoeneko martxan dago.

Zerbitzari moduan hiru edo zazpi instantzia exekutatzeko gomendatzen da. Izan ere, zerbitzari kopurua hazten bada, haien arteko informazioa sinkronizatzeko denbora handitzen da. Nodo kopurua bakoitia izan behar da quoruma bermatzeko.

Zerbitzuaren Aurkikuntza sistema banatuetan Consul adibidea erabiliz. Alexander Sigachev

Nola ematen dira Osasun Kontrolak? Egiaztapen-araua Json forman idazten dugu Consul konfigurazio-direktorioan. Lehenengo aukera adibide honetan google.com domeinuaren erabilgarritasuna da. Eta egiaztapen hori 30 segundoko tarteetan egin behar dela esaten dugu. Horrela egiaztatuko dugu gure nodoak kanpoko sarerako sarbidea duela.

Bigarren aukera zeure burua egiaztatzea da. Curl arrunta erabiltzen dugu zehaztutako atakan localhost deitzeko 10 segundoko tarteetan.

Egiaztapen hauek laburbildu eta Service Discovery-ra bidaltzen dira. Eskuragarritasunaren arabera, nodo hauek baztertzen dira edo erabilgarri dauden eta behar bezala funtzionatzen duten makinen zerrendan agertzen dira.

Zerbitzuaren Aurkikuntza sistema banatuetan Consul adibidea erabiliz. Alexander Sigachev

Consul-ek UI interfaze bat ere eskaintzen du, bandera bereizi batekin abiarazten dena eta makinan eskuragarri egongo dena. Honek informazioa ikusteko aukera ematen dizu eta aldaketa batzuk ere egin ditzakezu.

Adibide honetan, "Zerbitzua" fitxa irekita dago. Hiru zerbitzu martxan daudela erakusten da, horietako bat Kontsul da. Egindako egiaztapen kopurua. Eta makinak dauden hiru datu-zentro daude.

Zerbitzuaren Aurkikuntza sistema banatuetan Consul adibidea erabiliz. Alexander Sigachev

Hau Nodoak fitxaren adibide bat da. Datu-zentroekin lotutako izen konposatuak dituztela ikusten dugu. Zein zerbitzu martxan dauden ere erakusten du, hau da, etiketarik ezarri ez dela ikusten dugu. Etiketa gehigarri hauek garatzaileak parametro osagarriak zehazteko erabil dezakeen informazio batzuk eman ditzakete.

Kontsulari diskoen egoerari eta batez besteko kargari buruzko informazioa ere igor diezaiokezu.

Zure galderak

Galdera: Docker edukiontzi bat dugu, nola erabili Consul-ekin?

Erantzuna: Docker edukiontzirako hainbat ikuspegi daude. Ohikoenetako bat erregistroaz arduratzen den hirugarrenen docker edukiontzi bat erabiltzea da. Abiaraztean, docker socket bat pasatzen zaio. Edukiontzien erregistro eta argitalpen-gertaera guztiak Kontsulan erregistratzen dira.

Galdera: Beraz, kontsulak berak docker edukiontzia abiarazten du?

Erantzuna: Ez. Docker edukiontzi bat exekutatzen ari gara. Eta konfiguratzean adierazten dugu - entzun halako eta halako socket bat. Hau gutxi gorabehera ziurtagiri batekin lan egiten dugunaren berdina da, non eta zer daukagun informazioa kargatzen dugunean.

Galdera: Ikusten da Service Discovery-ra konektatzen saiatzen ari garen Docker edukiontziaren barruan Consul-era datuak bidal ditzakeen logika bat egon beharko litzatekeela?

Erantzuna: Benetan ez. Hasten denean, aldagaiak ingurune-aldagaitik pasatzen ditugu. Demagun zerbitzuaren izena, zerbitzuaren ataka. Erregistroak informazio hori entzuten du eta Kontsulan sartzen du.

Galdera: beste galdera bat daukat UI-ari buruz. UI inplementatu dugu, adibidez, ekoizpen zerbitzari batean. Zer gertatzen da segurtasunarekin? Non gordetzen dira datuak? Posible al da datuak nolabait metatzea?

Erantzuna: UI-n datu-baseko eta Service Discovery-ko datuak daude. Ezarpenetan pasahitzak geuk ezartzen ditugu.

Galdera: Hau Interneten argitaratu al daiteke?

Erantzuna: lehenespenez, Consul localhost-en hasten da. Interneten argitaratzeko, proxy motaren bat instalatu beharko duzu. Gure segurtasun arauen erantzule gara.

Galdera: Datu historikoak ematen al ditu kaxatik kanpo? Interesgarria da Osasun Kontrolei buruzko estatistikak ikustea. Zerbitzariak askotan huts egiten badu ere arazoak diagnostikatu ditzakezu.

Erantzuna: ez nago ziur txekeen xehetasunak daudenik.

Galdera: egungo egoera ez da dinamika bezain garrantzitsua.

Erantzuna: azterketa egiteko - bai.

Galdera: Hobe al da Kontsul docker-erako Service Discovery ez erabiltzea?

Erantzuna: ez nuke erabiltzea gomendatuko. Txostenaren helburua kontzeptu hori zer dagoen ezagutaraztea da. Historikoki, bidea egin du, nire ustez, 1. bertsiora. Orain irtenbide osoagoak daude, adibidez, Kubernetes, hau guztia kaputxa azpian daukana. Kubernetes Zerbitzuaren Aurkikuntza Etcd baino txikiagoa da. Baina ez dut kontsularekin bezain ezaguna. Horregatik, Zerbitzuaren Aurkikuntza egitea erabaki nuen Consul adibide gisa erabiliz.

Galdera: lider zerbitzari batekin eskemak ez al du aplikazioaren hasiera osorik moteltzen? Eta nola zehazten du Kontsulak buruzagi berri bat hau gezurretan ari bada?

Erantzuna: Protokolo oso bat dute deskribatuta. Interesa baduzu, irakur dezakezu.

Galdera: Kontsulak zerbitzari oso gisa jarduten du guretzat eta eskaera guztiak bertatik igarotzen dira?

Erantzuna: ez du zerbitzari oso gisa jokatzen, eremu zehatz bat hartzen du baizik. Zerbitzuarekin amaitzen da normalean.kontsul. Eta gero logikoki aurrera egiten dugu. Ekoizpenean ez ditugu domeinu-izenak erabiltzen, barne-azpiegitura baizik, normalean zerbitzariaren cachearen atzean ezkutatzen dena DNS erabiliz lan egiten badugu.

Galdera: Hau da, datu-base batera sartu nahi badugu, edonola ere, Kontsulari tira egingo diogu datu-base hau aurkitzeko lehenik, ezta?

Erantzuna: Bai. DNS erabiliz lan egiten badugu, Consul gabe bezala funtzionatzen du DNS izenak erabiltzen ditugunean. Normalean, aplikazio modernoek ez dute domeinu-izena eskaera guztietan ateratzen, konexioa instalatu dugulako, dena funtzionatzen du eta etorkizun hurbilean ia ez dugu erabiltzen. Konexioa hausten bada, orduan bai, berriro galdetzen dugu non dagoen gure oinarria eta bertara joaten gara.

hashicorp produktuaren txata β€” Hashicorp erabiltzaileen txata: Consul, Nomad, Terraform

P.S. Osasun-kontrolei buruz. Consul, Kubernetes bezala, sistema bera erabiltzen du zerbitzu baten biziraupen-egoera egiaztatzeko, kodearen egoeran oinarrituta.

200 OK for healthy
503 Service Unavailable for unhealthy

Iturriak:
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/

Iturria: www.habr.com

Gehitu iruzkin berria