Teenuste avastamine jaotatud sĂŒsteemides, kasutades Consuli nĂ€idet. Aleksandr SigatĆĄev

Tutvustan teile Aleksandr SigatĆĄevi ettekannet teemal Teenuste avastamine jaotatud sĂŒsteemides, kasutades Consuli nĂ€idet.

Teenuste avastamine on loodud selleks, et uue rakenduse liitmine meie olemasoleva keskkonnaga oleks vÔimalikult madalate kuludega. Kasutades Teenuste avastamist, saame maksimaalselt eraldada kas konteineri nagu Docker vÔi virtuaalteenuse sellest keskkonnast, kus see on kÀivitatud.

MĂ€ngi videot

Tere kÔigile! Mina olen Aleksandr Sigatƥev, töötan ettevÔttes Inventos. TÀna tutvustan teile sellist mÔistet nagu Teenuste avastamine. Uurime Teenuste avastamist Consuli nÀitel.

Teenuste avastamine jaotatud sĂŒsteemides, kasutades Consuli nĂ€idet. Aleksandr SigatĆĄev

Milliseid probleeme lahendab Teenuste avastamine? Teenuste avastamine on loodud selleks, et uue rakenduse liitmine meie olemasoleva keskkonnaga oleks vÔimalikult madalate kuludega. Kasutades Teenuste avastamist, saame maksimaalselt eraldada kas konteineri nagu Docker vÔi virtuaalteenuse sellest keskkonnast, kus see on kÀivitatud.

Kuidas see vĂ€lja nĂ€eb? Klassikalise nĂ€itena veebist – see on frontend, mis vĂ”tab kasutaja pĂ€ringu vastu. Edasi suunatakse see backend'i. Antud nĂ€itel tasakaalustab load-balancer kahte backend'i.

Teenuste avastamine jaotatud sĂŒsteemides, kasutades Consuli nĂ€idet. Aleksandr SigatĆĄev

Siin nÀeme, et kÀivitame rakenduse kolmanda koopia. Kui rakendus kÀivitatakse, registreerib see end Teenuste avastamises. Teenuste avastamine teavitab load-balancerit. Load-balancer muudab oma konfiguratsiooni automaatselt ja uus backend rakendub. Nii saab backend'ide lisamine vÔi vastupidi, nende töölt kÔrvaldamine toimuda.

Teenuste avastamine jaotatud sĂŒsteemides, kasutades Consuli nĂ€idet. Aleksandr SigatĆĄev

Mida veel on mugav teha Teenuste avastamise abil? Teenuste avastamisest vÔivad leida konfiguratsioonid nginx, sertifikaadid ja aktiivsete backend-serveerijate loetelu.

Teenuste avastamine jaotatud sĂŒsteemides, kasutades Consuli nĂ€idet. Aleksandr SigatĆĄevSamuti vĂ”imaldab Teenuste avastamine avastada vigu ja talitlushĂ€ireid. Millised skeemid on vĂ”imalikud talitlushĂ€irete avastamisel?

  • See rakendus, mille me vĂ€lja töötasime, teavitab Teenuste avastamist, et see on ikka veel töökorras.
  • Teenuste avastamine kĂŒsib rakenduse juurest kĂ€ttesaadavuse kohta.
  • VĂ”i kasutatakse kolmanda osapoole skripti vĂ”i rakendust, mis kontrollib meie rakenduse kĂ€ttesaadavust ja teavitab Teenuste avastamist, et kĂ”ik on korras ja vĂ”ib töötada, vĂ”i vastupidi, et kĂ”ik on halvasti ja tuleb see rakenduse koopia tasakaalustamisest kĂ”rvaldata.

Iga skeem vĂ”ib rakenduda sĂ”ltuvalt sellest, millist tarkvara me kasutame. NĂ€iteks, kui me just alustasime uue projekti arendamist, saame probleemideta tagada skeemi, kus meie rakendus teavitab Service Discovery't. VĂ”i vĂ”ime ĂŒhendada, et Service Discovery viib lĂ€bi kontrolli.

Kui aga rakendus on meile pÀrandatud vÔi vÀlise arendaja loodud, sobib siin kolmas variant, kus me kirjutame töötleja, ja see kÔike integreerub meie tööga automaatselt.

Teenuste avastamine jaotatud sĂŒsteemides, kasutades Consuli nĂ€idet. Aleksandr SigatĆĄev

See on ĂŒks nĂ€ide. Nginx'i kujul olev load-balancer taaskĂ€ivitub. See on lisatööriist, mis on saadaval koos Consul'iga. See on consul-template. Me mÀÀratleme reegli. RÀÀgime, et kasutame ŃˆĐ°Đ±Đ»ĐŸĐœĐ° (Golangi templatiserija). Toimingute korral, teavitamisel, et on toimunud muudatusi, ta genereeritakse uuesti ja Service Discovery'le saadetakse kĂ€sk „reload”. Lihtne nĂ€ide, kui sĂŒndmuse korral konfigureeritakse nginx uuesti ja kĂ€ivitatakse.

Teenuste avastamine jaotatud sĂŒsteemides, kasutades Consuli nĂ€idet. Aleksandr SigatĆĄev

Mis on Consul?

  • EnnekĂ”ike on see Service Discovery.

  • Sellel on kĂ€ttesaadavuse kontrollimise mehhanism – Health Checking.

  • Samuti sisaldab see KV Store'i.

  • Ja selle aluseks on vĂ”imalus kasutada Multi Datacenter'i.

Milleks seda kÔike kasutada? KV Store'is saame sÀilitada konfigureerimise nÀiteid. Health Checking vÔimaldab meil kontrollida kohalikke teenuseid ja teavitada. Multi Datacenter'i kasutatakse selleks, et saaksime koostada teenuste kaardi. NÀiteks Amazonil on mitu tsooni ja see suunab liikluse kÔige optimaalsemalt, et vÀltida tarbetuid pÀringuid andmekeskuste vahel, mis arvestatakse eraldi kohaliku liikluse jÀtkude ja seega on vÀiksem viivitus.

Teenuste avastamine jaotatud sĂŒsteemides, kasutades Consuli nĂ€idet. Aleksandr SigatĆĄev

Vaatame natuke termineid, mida Consul'is kasutatakse.

  • Consul on Go keeles kirjutatud teenus. Üks Go programmi eeliseid on see, et see on 1 binaarfail, mille saad lihtsalt alla laadida. KĂ€ivitage see ĂŒkskĂ”ik kus ja teil pole sĂ”ltuvusi.
  • Edasi saame klahvide abil kĂ€ivitada selle teenuse kas kliendi vĂ”i serveri reĆŸiimis.
  • Samuti vĂ”imaldab atribuut „datacenter” mÀÀrata, millisele andmekeskusele see server kuulub.
  • Consensus pĂ”hineb raft-protokollil. Kui kedagi huvitab, saab selle kohta rohkem lugeda Consul'i veebisaidilt. See on protokoll, mis vĂ”imaldab mÀÀrata liidri ja otsustada, millised andmed on kehtivad ja kĂ€ttesaadavad.
  • Gossip – see protokoll, mis tagab node'ide vahelise suhtluse. See sĂŒsteem on detsentraliseeritud. Ühes andmekeskuses suhtlevad kĂ”ik node'id omavahel. Seega edastavad nad ĂŒksteisele teavet jooksva seisundi kohta. VĂ”ib öelda, et see on naabrite vahelised kuulujutud.
  • LAN Gossip – lokaalne andmevahetus naabrite vahel ĂŒhes andmekeskuses.
  • WAN Gossip – kasutatakse, kui on vajalik teabe sĂŒnkroniseerimine kahe andmekeskuse vahel. Teave liigub node'ide vahel, mis on mĂ€rgitud serveriteks.
  • RPC – vĂ”imaldab pĂ€ringute tegemist kliendi kaudu serveris.

RPC kirjeldus. Oletame, et virtuaalses vĂ”i fĂŒĂŒsilises serveris töötab Consul kliendina. Me pöördume selle poole kohalikult. Edasi kohalik klient pĂ€rib teavet serverilt ja sĂŒnkroniseerib. Teave vĂ”ib sĂ”ltuvalt seadistustest tulla lokaalsest vahemĂ€lust vĂ”i sĂŒnkroniseerida serveri liidriga.

Nendel kahe schemel on nii eeliseid kui ka puudusi. Kui töötame kohalikus vahemÀlus, siis on see kiire. Kui töötame serveris hoitava teabega, siis on see aeglasem, kuid saame vÀrskemat teavet.

Teenuste avastamine jaotatud sĂŒsteemides, kasutades Consuli nĂ€idet. Aleksandr SigatĆĄev

Kui seda graafiliselt kujutada, siis on meil selline skeem. NĂ€eme, et meil on kĂ€ivitatud kolm liidrit. Üks on tĂ€histatud tĂ€hega liidrina. Selles nĂ€ites on kolm klienti, kes vahetavad omavahel teavet kohaliku UDP/TCP kaudu. Teave andmekeskuste vahel edastatakse serverite vahel. Siin suheldakse klientide vahel kohalikult.

Teenuste avastamine jaotatud sĂŒsteemides, kasutades Consuli nĂ€idet. Aleksandr SigatĆĄev

Millist API't pakub Consul? Teabe hankimiseks on Consul'il kaks tĂŒĂŒpi API'd.

See on DNS API. Vaikimisi kÀivitub Consul 8600 pordin. Saame seadistada pÀringu proksimise ja tagada juurdepÀÀsu kohaliku resolvimise kaudu, kohaliku DNS-i kaudu. Saame pÀrida domeeni ja saame vastuseks IP-aadressi teavet.

HTTP API – vĂ”i saame kohalikult 8500 pordin kĂŒsida teavet konkreetse teenuse kohta ja saame JSON vastuse, millise IP'l on server, milline host, milline port on registreeritud. Ja lisainformatsioon vĂ”ib olla edastatud token'i kaudu.

Teenuste avastamine jaotatud sĂŒsteemides, kasutades Consuli nĂ€idet. Aleksandr SigatĆĄev

Mida on vaja, et Consul kÀivitada?

Esimeses variandis mÀÀrame arendaja reĆŸiimis lipu, et see on arendaja reĆŸiim. Agent kĂ€ivitub serverina. Ja tĂ€idab kogu funktsiooni juba ĂŒhel masinal iseseisvalt. Mugav, kiire ja praktiliselt mingit tĂ€iendavat seadistamist esimese kĂ€ivitamise jaoks ei ole vajalik.

Teine reĆŸiim on tootmisreĆŸiim. Siin kĂ€ivitamine veidi keerulisem. Kui meil pole ĂŒhtegi konsoliversiooni, peame tooma esimesena töötama masina, st selle masina, mis vĂ”tab ĂŒle juhi kohustused. KĂŒlastame seda, seejĂ€rel kĂ€ivitame teise serveri koopia, edastades talle teabe, kus asub meie meister. Kolmandat tĂ”stame ĂŒles. PĂ€rast kolme masina tĂ”stmist kĂ€ivitame esimesel masinal, mis on kĂ€ivitunud bootstrap'ist, oma tavalises reĆŸiimis. Andmed sĂŒnkroniseeritakse ja algne kluster on juba ĂŒles tĂ”stetud.

Soovitav on kĂ€ivitada kolm kuni seitse eksemplari serverireĆŸiimis. See tuleneb asjaolust, et kui serverite arv suureneb, suureneb ka teabe sĂŒnkroniseerimise aeg nende vahel. Nodide arv peab olema paaritu, et tagada kvoorum.

Teenuste avastamine jaotatud sĂŒsteemides, kasutades Consuli nĂ€idet. Aleksandr SigatĆĄev

Kuidas tagatakse tervisekontrollid? Configuratsiooni katalooge Consul jaoks kirjutame me reegli kontrollimise nagu JSON. Esimene variant on selle nĂ€ite jĂ€rgi juurdepÀÀsetavuse kontrollimine domeenile google.com. Ja ĂŒtleme, et iga 30 sekundi tagant tuleb seda kontrolli teostada. Nii kontrollime, et meie nodal on juurdepÀÀs vĂ€lisele vĂ”rgule.

Teine variant on kontrollida iseennast. Me teeme tavalise curl'i kutse localhost'i kindlaksmÀÀratud pordile iga 10 sekundi tagant.

Need kontrollid summeeritakse ja saadetakse Teenuse Tuvastamisse. Tuginedes juurdepÀÀsetavusele, kas need nodid vÀlistatakse vÔi ilmuvad saadaval ja korralikult töötavate masinate nimekirja.

Teenuste avastamine jaotatud sĂŒsteemides, kasutades Consuli nĂ€idet. Aleksandr SigatĆĄev

Samuti pakub Consul UI-liidest, mis kÀivitub eraldi lipuga ja on saadaval masinatel. See vÔimaldab vaadata teavet ning teha ka mÔningaid muudatusi.

Selles nĂ€ites on avatud 'Teenuse' vahekaart. NĂ€idatud on, et kolm teenust on kĂ€ivitatud, neist ĂŒks on Consul. Kontrollimise tulemuste hulk. Ja on kolme andmekeskust, kus masinad asuvad.

Teenuste avastamine jaotatud sĂŒsteemides, kasutades Consuli nĂ€idet. Aleksandr SigatĆĄev

See on "Nodes" vahekaart. NÀeme, et neil on koos nimesid andmekeskustega. Siin on nÀidatud ka, millised teenused on aktiivsed, st me nÀeme, et silte ei ole mÀÀratud. Nendes tÀiendavates siltes saab mÀÀrata teavet, mida arendaja saab kasutada tÀiendavate parameetrite mÀÀramiseks.

Samuti saab Consulile edastada teavet ketaste oleku ja keskmise koormuse kohta.

KĂŒsimused

KĂŒsimus: Meil on Docker konteiner, kuidas seda kasutada Consuliga?

Vastus: Docker konteineri jaoks on mitu lĂ€henemist. Üks levinumaid on kasutada kolmandat osapoolt Docker konteinerit, mis vastutab registri eest. KĂ€ivitamisel edastatakse talle Docker socket. KĂ”ik konteineri registreerimise ja tĂŒhistamise sĂŒndmused salvestatakse Consulisse.

KĂŒsimus: St Consul kĂ€ivitab ise Docker konteineri?

Vastus: Ei. Me kĂ€ivitame Docker konteineri. Ja konfiguratsioonis mÀÀrame – kuula sellist socketit. See on umbes sama, nagu töötamine sertifikaadiga, kui edastame teavet, kus ja mis meil on.

KĂŒsimus: Tundub, et Docker konteineris, mille proovime Service Discovery'gaĂŒhendada, peab olema mingi loogika, mis oskab edastada andmeid Consulile?

Vastus: Mitte pÀris. Kui see kÀivitub, edastame me keskkonnamuutujate kaudu muutujad. Oletame, teenuse nimi, teenuse port. Register kuulab seda teavet ja salvestab selle Consulisse.

KĂŒsimus: Mul on veel UI kohta kĂŒsimus. Oleme kĂ€ivitanud UI, eeldades, et see on tootmiserveris. Mis on turvalisusega? Kus andmed asuvad? Kas saab andmeid kuidagi koguda?

Vastus: UI puhul tulevad andmed tegelikult andmebaasist ja Service Discovery'st. Paroolid paneme seadistustes ise paika.

KĂŒsimus: Kas seda on lubatud internetis avaldada?

Vastus: Vaikimisi kÀivitub Consul localhost'is. Et seda internetti avaldada, tuleb paigaldada mÔni proxy. Turvalisuse eest vastutame ise.

KĂŒsimus: Kas ajaloolisi andmeid pakutakse? Huvi on vaadata tervise kontrollide statistikat. Kas tĂ”epoolest saab diagnoosida probleeme, kui server sageli koos allub.

Vastus: Ma ei ole kindel, et seal on kontrollide detaile.

KĂŒsimus: MĂ”ningase tĂ€htsuse oma oleva seisundi osas, kui palju olla dĂŒnaamikast.

Vastus: AnalĂŒĂŒsimiseks – jah.

KĂŒsimus: Kas Docker jaoks Service Discovery't Consuliga kasutada on parem mitte?

Vastus: Ma ei soovitaks seda kasutada. Ettekanne tutvustab, mis see mÔisted on. Aajaloos on see teinud teed, minu arvates, esimese versiooni juurde. Praegu on olemas palju tÀiuslikumaid lahendusi, nÀiteks Kubernetes, millega on see kÔik koos. Kuberneteses jÀÀb Service Discovery Etcd'ile alla. Kuid ma ei tunne seda nii hÀsti kui Consulit. SeetÔttu otsustasin Service Discovery nÀidata Consuli nÀitel.

KĂŒsimus: Kas liidri serveri skeem ei aeglusta rakenduse kĂ€ivitamist tervikuna? Ja kuidas Consul mÀÀrab uue liidri, kui see on maas?

Vastus: Neil on vÀlja töötatud kogu protokoll. Kui see huvitab, siis saad seda lugeda.

KĂŒsimus: Kas Consul toimib tĂ€ieliku serverina ja kĂ”ik pĂ€ringud liiguvad lĂ€bi selle?

Vastus: Ta ei tööta tÀieliku serverina, vaid hÔlmab kindlat ala. See lÔppeb tavaliselt service.consul'iga. Ja edasi juhindume loogikast. Me ei kasuta tootmises domeeninimesid, vaid sisemist infrastruktuuri, mis peidetakse tavaliselt serveri vahemÀlu taha, kui töötame DNS-iga.

KĂŒsimus: St. kui soovime andmebaasi juurde pÀÀseda, peame me igal juhul Consulit kĂŒsima, et kĂ”igepealt leida see andmebaas, eks?

Vastus: Jah. Kui töötame DNS-i kaudu, siis see töötab nagu ilma Consulita, kui kasutame DNS-nimesid. Tavalised tĂ€napĂ€evased rakendused ei kontrolli igas pĂ€ringus domeeninime, sest me oleme connect-iga ĂŒhendust loonud, kĂ”ik töötab ja lĂ€hitulevikus me ei kasutagi seda. Kui ĂŒhendus katkeb, siis – jah, kĂŒsime jĂ€lle, kus meie andmebaas on ja lĂ€heme selle juurde.

HashiCorp toodete vestlus — HashiCorpi kasutajate vestlus: Consul, Nomad, Terraform

P.S. Mis puutub tervisekontrollidesse. Consulis, nagu ka Kuberneteses, kasutatakse sama sĂŒsteemi teenuse elujĂ”udmise kontrollimiseks pĂ”hinedes staatuse koodile.

200 OK tervislik
503 Teenus ei ole kÀttesaadav tervislikul

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

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster