Teenuste leidmine jaotatud sĂŒsteemides Consuli nĂ€itel. Aleksandr SigatĆĄev

Tutvustan teile Aleksandr SigatĆĄovi ettekande tĂ”lgendust teenuste avastamisest hajutatud sĂŒsteemides, kasutades nĂ€itena Consulit.

Teenuste avastamine on loodud selleks, et saaksime minimaalse vaevaga ĂŒhendada uusi rakendusi juba olemasolevasse keskkonda. Kasutades teenuste avastamist, suudame maksimaalselt eraldada kas konteineri, nagu Dockeri, vĂ”i virtuaalse teenuse keskkonnast, kus see on kĂ€ivitatud.

Vaata videot

Tere kÔigile! Olen Aleksandr Sigatƥov, töötan ettevÔttes Inventos. TÀna tutvustan teile sellist mÔistet nagu teenuste avastamine. Vaatame teenuste avastamist Consuli nÀitel.

Teenuste leidmine jaotatud sĂŒsteemides Consuli nĂ€itel. Aleksandr SigatĆĄev

Milliseid probleeme lahendab teenuste avastamine? Teenuste avastamine on loodud selleks, et saaksime minimaalse vaevaga ĂŒhendada uusi rakendusi juba olemasolevasse keskkonda. Kasutades teenuste avastamist, suudame maksimaalselt eraldada kas konteineri, nagu Dockeri, vĂ”i virtuaalse teenuse keskkonnast, kus see on kĂ€ivitatud.

Kuidas see vÀlja nÀeb? Klassikalises veebinÀites on see frontend, mis vÔtab kasutaja pÀringu vastu. Edasi suunatakse see backend'ile. Antud nÀites tasakaalustab load-balancer kahte backend'i.

Teenuste leidmine jaotatud sĂŒsteemides Consuli nĂ€itel. Aleksandr SigatĆĄev

Siit nĂ€eme, et kĂ€ivitame rakenduse kolmanda eksemplari. Seega, kui rakendus kĂ€ivitatakse, registreerib see end teenuste leidmise sĂŒsteemis. Teenuste leidmise sĂŒsteem teavitab koormuse jaoturit. Koormuse jaotur muudab automaatselt oma konfiguratsiooni ja uus taust teenus hakkab tööle. Nii saab taustteenuseid lisada vĂ”i, vastupidi, eemaldada töö seest.

Teenuste leidmine jaotatud sĂŒsteemides Consuli nĂ€itel. Aleksandr SigatĆĄev

Mida veel on mugav teha teenuste leidmise sĂŒsteemi abil? Teenuste leidmise sĂŒsteemis vĂ”ivad olla salvestatud nginx konfiguratsioonid, sertifikaadid ja aktiivsete taustserverite nimekiri.

Teenuste leidmine jaotatud sĂŒsteemides Consuli nĂ€itel. Aleksandr SigatĆĄevSamuti vĂ”imaldab teenuste leidmise sĂŒsteem tuvastada rikkeid ja avastada tĂ”rkeid. Millised skeemid on vĂ”imalikud tĂ”rgete tuvastamiseks?

  • See rakendus, mille me vĂ€lja töötasime, teavitab teenuste leidmise sĂŒsteemi, et see on endiselt töövĂ”imeline.
  • Teenuste leidmise sĂŒsteem omakorda kĂŒsib rakenduselt selle kĂ€ttesaadavuse kohta.
  • VĂ”i kasutatakse kolmandat osapoole skripti vĂ”i rakendust, mis kontrollib meie rakenduse kĂ€ttesaadavust ja teavitab teenuste leidmise sĂŒsteemi, et kĂ”ik on korras ja saab töötada, vĂ”i vastupidi, et kĂ”ik on halvasti ja on vajalik see rakenduse eksemplar koormuse jaotusest eemaldada.

Iga skeem vÔib olla rakendatav sÔltuvalt sellest, millist tarkvara me kasutame. NÀiteks, kui oleme alles alustanud uue projekti arendamist, siis saame hÔlpsasti rakendada skeemi, kus meie rakendus teavitab Service Discovery't. Samuti vÔime seadistada, et Service Discovery teostab kontrolli.

Kuid juhul, kui rakendus on meile pÀrandatud vÔi loodud mÔne kolmanda osapoole poolt, sobib siinkohal kolmas variant, kus kirjutame töötleja, ja kÔik see liitub meie tööprotsessiga automaatselt.

Teenuste leidmine jaotatud sĂŒsteemides Consuli nĂ€itel. Aleksandr SigatĆĄev

See on ĂŒks nĂ€ide. Nginx koormuse tasakaalustaja taaskĂ€ivitub. See on tĂ€iendav utiliit, mis on saadaval koos Consuliga. See on consul-template. Me mÀÀratleme reegli. Ütleme, et kasutame mallisĂŒsteemi (Golang template). SĂŒndmuste korral, teavitustega, et on toimunud muutusi, see genereeritakse uuesti ja Service Discovery saadab kĂ€su "reload". Lihtne nĂ€ide, kuidas nginx konfigureeritakse ĂŒmber ja taaskĂ€ivitub sĂŒndmuse korral.

Teenuste leidmine jaotatud sĂŒsteemides Consuli nĂ€itel. Aleksandr SigatĆĄev

Mis on Consul?

  • Esiteks – see on Service Discovery.

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

  • Samuti on tal KV Store.

  • Ja selle pĂ”hialuseks on Multi Datacenter'i kasutamise vĂ”imalus.

Milleks see kÔik mÔeldud on? KV Store'is saame hoida konfigureerimise nÀiteid. Health Checking vÔimaldab meil kontrollida kohalikke teenuseid ja teavitada neist. Multi Datacenter vÔimaldab luua teenuste kaarti. NÀiteks Amazonil on mitu tsooni ja see suunab liiklust kÔige optimaalsemalt, vÀltides liigseid pÀringuid andmekeskuste vahel, mis on eraldi tasustatud kohaliku liikluse kÔrval ning seega madalama latentsusega.

Teenuste leidmine jaotatud sĂŒsteemides Consuli nĂ€itel. Aleksandr SigatĆĄev

LĂ€heme veidi sĂŒgavamale terminolooge, mida Consul kasutab.

  • Consul on Go keeles kirjutatud teenus. Üks Go programmi eeliseid on see, et see on 1 binaarfail, mille lihtsalt alla laadid. KĂ€ivita see igast kohast ja sul ei ole mingeid sĂ”ltuvusi.
  • Edasi saame vĂ”tmete abil kĂ€ivitada selle teenuse kas kliendi vĂ”i serveri reĆŸiimis.
  • Samuti vĂ”imaldab atribuut „datacenter” seada lipu, millisele andmekeskusele see server kuulub.
  • Konsensus – pĂ”hineb raft-protokolil. Huvi korral saab selle kohta lĂ€hemalt lugeda Consul'i veebisaidilt. See on protokoll, mis vĂ”imaldab mÀÀrata juhti ja otsustada, millised andmed on kehtivad ja kĂ€ttesaadavad.
  • Gossip – see on protokoll, mis tagab suhtlemise sĂ”lmede vahel. Lisaks on see sĂŒsteem detsentraliseeritud. Ühes andmekeskuses suhtlevad kĂ”ik sĂ”lmed naabritega. Seega edastatakse ĂŒksteisele teavet hetkeolukorra kohta. VĂ”ib öelda, et need on naabrite vahelised kuulujutud.
  • LAN Gossip – kohalike andmete vahetamine naabrite vahel ĂŒhes andmekeskuses.
  • WAN Gossip – kasutatakse, kui on vaja sĂŒnkroonida teavet kahe andmekeskuse vahel. Teave liigub serveriks mĂ€rgitud sĂ”lmede vahel.
  • RPC – vĂ”imaldab teha pĂ€ringute saatesĂŒsteemi kaudu kliendilt serverisse.

RPC kirjeldus. Oletame, et virtuaalses masinas vĂ”i fĂŒĂŒsilisel serveril on kĂ€imas Consul kliendina. Me pöördume selle poole kohalikult. Edasi pĂ€rib kohalik klient teavet serverilt ja sĂŒnkroniseerib. Teave vĂ”ib sĂ”ltuvalt seadistustest pĂ€rineda kohalikust vahemĂ€lust vĂ”i olla sĂŒnkroniseeritud liidri ehk serveri meistriga.

Neil kahel skeemil on nii eeliseid kui ka puuduseid. Kui me töötame kohaliku vahemÀluga, on see kiire. Kui me töötame serveris salvestatud andmetega, siis see kestab kauem, kuid saame aktuaalsema teabe.

Teenuste leidmine jaotatud sĂŒsteemides Consuli nĂ€itel. Aleksandr SigatĆĄev

Kui seda visuaalselt kujutada, siis nĂ€eks see vĂ€lja nii. NĂ€hes, et meil on kĂ€imas kolm meistrit. Üht tĂ€hekesega mĂ€rgitud kui liider. Antud nĂ€ites on kolm klienti, kes vahetavad ĂŒksteisega kohalikult teavet lĂ€bi UDP/TCP. Ja teave andmekeskuste vahel edastatakse serverite vahel. Siin suhtlevad kliendid omavahel kohalikult.

Teenuste leidmine jaotatud sĂŒsteemides Consuli nĂ€itel. Aleksandr SigatĆĄev

Millist API-d Consul pakub? Teabe saamiseks on Consulil kaks tĂŒĂŒpi API-d.

See on DNS API. Vaikimisi töötab Consul porti 8600 peal. Saame seadistada pÀringute proximise ja tagada juurdepÀÀsu kohaliku lahenduse kaudu, kohaliku DNS-i kaudu. Saame pÀrida domeeni ja saada vastuseks IP-aadressi teabe.

HTTP API – me saame kas kohalikult 8500 porti kaudu pĂ€rida konkreetse teenuse teavet ja saada JSON-vastuse, milline IP serveril on, milline host, milline port on registreeritud. Ja lisateavet saab edastada ka tokeni kaudu.

Teenuste leidmine jaotatud sĂŒsteemides Consuli nĂ€itel. Aleksandr SigatĆĄev

Mida on vaja, et kÀivitada Consul?

Esimeses variandis nĂ€itame arenduse reĆŸiimis lippu, et see on arenduse reĆŸiim. Agent kĂ€ivitub serverina. Ja kogu funktsiooni tĂ€idab juba iseseisvalt ĂŒhel masinal. Mugav, kiire ja praktiliselt ei vaja esmakĂ€ivitamiseks mingeid tĂ€iendavaid seadistusi.

Teine reĆŸiim on tootmisreĆŸiim. Siin kĂ€ivitamine on veidi keerulisem. Kui meil pole ĂŒhtegi konsultandi versiooni, peame viima esimeses seadmes boottarkvara, s.t. seadme, mis vĂ”tab enda kanda juhi ĂŒlesanded. KĂ€ivitame selle, seejĂ€rel kĂ€ivitame teise serveri eksemplari, edastades talle teabe, kus meie master asub. KĂ€ivitame kolmanda. Kui meil on kolm seadet töötamas, taaskĂ€ivitame esimeses seadmes boottarkvara tavareĆŸiimis. Andmed sĂŒnkroniseeritakse ja algne klaster on juba ĂŒles tĂ”stetud.

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

Teenuste leidmine jaotatud sĂŒsteemides Consuli nĂ€itel. Aleksandr SigatĆĄev

Kuidas tagatakse tervisekontrollid? Konsuli konfiguratsioonikausta kirjutame Json vormis kontrollreeglid. Esimene variant on ligipÀÀsetavus antud nĂ€ites domeenile google.com. Ja ĂŒtleme, et iga 30 sekundi jĂ€rel tuleb seda kontrolli teha. Nii kontrollime, et meie node-l on ligipÀÀs vĂ€lisesse vĂ”rku.

Teine variant on enda kontrollimine. Kutsume localhost'i antud pordi kaudu vÀlja tavalise curl'i iga 10 sekundi jÀrel.

Need kontrollid summeeritakse ja edastatakse Service Discovery'le. Saadavuse alusel vÀlistatakse need sÔlmed vÔi nad ilmuvad kergesti kergesti töötavate masinate nimekirja.

Teenuste leidmine jaotatud sĂŒsteemides Consuli nĂ€itel. Aleksandr SigatĆĄev

Consul pakub ka UI-liidese, mis kÀivitatakse eraldi lipu abil ja on masinas saadaval. See vÔimaldab vaadata teavet ning teha teatud muudatusi.

Antud nĂ€ites on avatud vahekaart „Teenused”. NĂ€ha, et on kĂ€imas kolm teenust, neist ĂŒks on Consul. NĂ€idatakse lĂ€biviidud kontrollide arvu ja kolme andmekeskust, kus masinad asuvad.

Teenuste leidmine jaotatud sĂŒsteemides Consuli nĂ€itel. Aleksandr SigatĆĄev

See on nĂ€ide vahekaardist „Nodes”. NĂ€eme, et neil on koostisosade nimed, mis sisaldavad andmekeskusi. Siin on nĂ€ha ka, millised teenused on kĂ€imas, st nĂ€eme, et silte ei ole mÀÀratud. Nendes lisasiltes vĂ”idakse mÀÀrata teavet, mida arendaja saab kasutada tĂ€iendavate parameetrite mÀÀramiseks.

Samuti saab Consul'ile edastada teavet ketta oleku, keskmise koormuse kohta.

KĂŒsimused

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

Vastus: Docker konteinerite jaoks on mitu lĂ€henemist. Üks levinumaid on kasutada kolmanda osapoole Docker konteinerit, mis vastutab registreerimise eest. KĂ€ivitamisel edastatakse talle Docker socket. KĂ”ik registreerimise ja eemaldamise sĂŒndmused kantakse ĂŒle Consulile.

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

Vastus: Ei, me kÀivitame Docker konteineri. Ja konfigureerimisel nÀitame, et kuulame sellist socketit. See on umbes sama, nagu töötades sertifikaadiga, kui edastame teavet selle kohta, kus ja mis meil asub.

KĂŒsimus: Kas see tĂ€hendab, et Docker konteineris, mille ĂŒritame ĂŒhendada Service Discoveryga, peab olema mingi loogika, mis suutis andmeid Consulile edastada?

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

KĂŒsimus: Mul on veel ĂŒks kĂŒsimus UI kohta. Oleme kĂ€ivitanud UI, oletame, tootmisserveris. Kuidas on turvalisusega? Kus andmeid hoitakse? Kas on vĂ”imalik andmeid kuidagi koguda?

KĂŒsimus: Kas see on vĂ”imalik avaldada internetis?

Vastus: UI-s on tÔepoolest andmed andmebaasist ja Service Discovery-st. Paroolid seadistame ise.

Vastus: Vaikimisi kÀivitub Consul localhost-is. Selleks, et avaldada internetis, tuleb installeerida mingi proxy. Turvaseaduste eest vastutame ise.

KĂŒsimus: Kas ajaloolisi andmeid pakutakse vaikimisi? Oleks huvitav nĂ€ha statistikat Health Checks-i kohta. Probleeme saab ju diagnostiseerida, kui server sageli kokku kukub.

Vastus: Ma ei ole kindel, kas seal on pĂ€ris ĂŒksikasjade kontrollimist.

KĂŒsimus: Praegune olek ei ole nii oluline, kui oluline on dĂŒnaamika.

Vastus: AnalĂŒĂŒsimiseks – jah.

KĂŒsimus: Kas Consul'i kasutamine dokkeri jaoks pole soovitatav?

Vastus: Ma ei soovitaks seda kasutada. Ettepaneku eesmÀrk on tutvustada, et selline mÔisted olemas on. Ajalooliselt on ta lÀbinud tee, minu arvates, kuni 1. versioonini. Praegu on olemas juba tÀielikumad lahendused, nÀiteks Kubernetes, mis omab seda kÔike. Kubernetes'is jÀÀb Service Discovery Etcd-ile alla. Kuid ma ei tunne seda nii hÀsti kui Consul-iga. SeetÔttu otsustasin Service Discovery nÀidata Consul'i nÀitel.

KĂŒsimus: Kas juhi serveriga skeem ei takista rakenduse kĂ€ivitamist tervikuna? Kuidas Consul mÀÀrab uue juhi, kui olemasolev on maas?

Vastus: Neil on palju protokollidest. Kui huvitav, siis saad lugeda.

KĂŒsimus: Kas Consul tegutseb meil tĂ€ieliku serverina ja kĂ”ik pĂ€ringud liiguvad selle kaudu?

Vastus: Ta ei tegutse tÀieliku serverina, vaid katab kindla ala. See lÔppeb tavaliselt service.consul. Ja edasi liigume loogika jÀrgi. Me ei kasuta tootmises domeeninimesid, vaid sisemist infrastruktuuri, mis tavaliselt peidetakse serveri vahemÀlu taha, kui me töötame DNS-iga.

KĂŒsimus: St kui soovime andmebaasile ligi pÀÀseda, siis peame igal juhul Consul'ilt kĂŒsima, et kĂ”igepealt see andmebaas leida, eks?

Vastus: Jah. Kui töötame DNS-iga, siis see toimib nagu Consul'i kasutamata, kui kasutame DNS-nimesid. KĂ”ige moodsamad rakendused ei kĂŒsi igas pĂ€ringus domeeninime, kuna meil on ĂŒhendus loodud, kĂ”ik toimib ja me ei kasuta seda lĂ€hiajal. Kui ĂŒhendus katkeb, siis – jah, kĂŒsime jĂ€lle, kus meie andmebaas asub ja liigume sinna.

HashiCorpi toodete jututuba — HashiCorpi kasutajate jututuba: Consul, Nomad, Terraform

P.S. Seotud tervisekontrollidega. Consulis, nagu ka Kuberneteses, kasutatakse sama teenuse elujĂ”u kontrollimise sĂŒsteemi, mis pĂ”hineb staatuse koodil.

200 OK terve jaoks
503 Teenus ei ole kergesti saadaval haige jaoks

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 veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster