Huomautus. käännös: Ensimmäinen osa Tämä sarja oli omistettu Istion ominaisuuksien esittelylle ja niiden esittelylle toiminnassa. Nyt puhumme tämän palveluverkon konfiguroinnin ja käytön monimutkaisemmista näkökohdista ja erityisesti hienosäädetystä reitityksestä ja verkkoliikenteen hallinnasta.
Muistutamme myös, että artikkeli käyttää konfiguraatioita (Kubernetesin ja Istion manifesteja) arkistosta istio-mestaruus.
liikenteen hallinta
Istion avulla klusteriin tulee uusia ominaisuuksia, jotka tarjoavat:
Vikojen lisääminen: viivästykset, hylätyt pyynnöt jne.
Artikkelin edetessä näitä ominaisuuksia havainnollistetaan käyttämällä esimerkkinä valittua sovellusta ja uusia konsepteja esitellään matkan varrella. Ensimmäinen tällainen käsite on DestinationRules(eli säännöt liikenteen/pyyntöjen vastaanottajasta - noin käännös.), jonka avulla aktivoimme A/B-testauksen.
A/B-testaus: DestinationRules käytännössä
A/B-testausta käytetään tapauksissa, joissa sovelluksesta on kaksi versiota (yleensä ne ovat visuaalisesti erilaisia) emmekä ole 100% varmoja, kumpi parantaa käyttökokemusta. Siksi käytämme molempia versioita samanaikaisesti ja keräämme mittareita.
Ota käyttöön käyttöliittymän toinen versio, joka tarvitaan A/B-testauksen esittelyyn, suorittamalla seuraava komento:
$ kubectl apply -f resource-manifests/kube/ab-testing/sa-frontend-green-deployment.yaml
deployment.extensions/sa-frontend-green created
Vihreän version käyttöönottoluettelo eroaa kahdesta syystä:
Kuva perustuu eri tagiin - istio-green,
Paloissa on etiketti version: green.
Koska molemmilla käyttöönotoilla on tunniste app: sa-frontend,virtuaalipalvelun reitittämät pyynnöt sa-external-services palvelua varten sa-frontend, ohjataan kaikkiin esiintymiinsä ja kuorma jaetaan round robin -algoritmi, joka johtaa seuraavaan tilanteeseen:
Pyydettyjä tiedostoja ei löytynyt
Näitä tiedostoja ei löytynyt, koska ne on nimetty eri sovelluksen eri versioissa. Varmistetaan tämä:
Tämä tarkoittaa, että index.html, joka pyytää yhtä versiota staattisista tiedostoista, voi lähettää kuormituksen tasapainottimella koteloihin, joilla on eri versio, jos tällaisia tiedostoja ei ilmeisistä syistä ole olemassa. Siksi, jotta sovellus toimisi, meidän on asetettava rajoitus: "saman sovelluksen version, joka palveli index.html:tä, tulee palvella myöhempiä pyyntöjä'.
Pääsemme siihen johdonmukaisella hash-pohjaisella kuormituksen tasapainotuksella (Johdonmukainen hash-kuormituksen tasapainotus). Tässä tapauksessa saman asiakkaan pyynnöt lähetetään samaan tausta-instanssiin, jolle käytetään ennalta määritettyä ominaisuutta - esimerkiksi HTTP-otsikkoa. Toteutettu DestinationRules-säännöillä.
DestinationRules
Jälkeen Virtuaalipalvelu Lähetti pyynnön haluttuun palveluun, DestinationRules-säännöillä voimme määrittää käytännöt, joita sovelletaan tämän palvelun esiintymiin kohdistettuun liikenteeseen:
Liikenteenhallinta Istion resursseilla
Huomata: Istion resurssien vaikutus verkkoliikenteeseen on esitetty tässä helposti ymmärrettävällä tavalla. Tarkemmin sanottuna päätöksen siitä, mihin instansseihin pyyntö lähettää, tekee lähettiläs CRD:ssä määritetyssä Ingress Gatewayssä.
Kohdesääntöjen avulla voimme määrittää kuormituksen tasapainotuksen käyttämään johdonmukaisia hajautusarvoja ja varmistaa, että sama palveluinstanssi vastaa samalle käyttäjälle. Seuraavalla kokoonpanolla voit saavuttaa tämän (destinationrule-sa-frontend.yaml):
Huomata: Voit lisätä eri arvoja otsikkoon ja testata tuloksia suoraan selaimessa tämä laajennus Chromeen (tai tämän kanssa Firefoxille - noin. käännös.).
Yleensä DestinationRulesilla on enemmän ominaisuuksia kuormituksen tasapainottamisen alalla - katso lisätietoja kohdasta virallinen dokumentaatio.
Ennen kuin tutkit VirtualServiceä tarkemmin, poistetaan sovelluksen "vihreä versio" ja sitä vastaava liikenteen suuntasääntö suorittamalla seuraavat komennot:
shadowing ("suojaus") tai Peilaus ("peilaus") käytetään tapauksissa, joissa haluamme testata tuotannon muutosta vaikuttamatta loppukäyttäjiin: tätä varten kopioimme ("peilaa") pyynnöt toiseen tapaukseen, jossa halutut muutokset on tehty, ja katsomme seurauksia. Yksinkertaisesti sanottuna tämä on silloin, kun kollegasi valitsee kriittisimmän ongelman ja tekee vetopyynnön niin valtavan likapalan muodossa, että kukaan ei voi tarkistaa sitä.
Jos haluat testata tätä skenaariota toiminnassa, luodaan toinen SA-Logic-esiintymä, jossa on virheitä (buggy) suorittamalla seuraava komento:
$ kubectl apply -f resource-manifests/kube/shadowing/sa-logic-service-buggy.yaml
deployment.extensions/sa-logic-buggy created
Ja nyt suoritetaan komento varmistaaksemme, että kaikki esiintymät app=sa-logic Niissä on myös tarrat vastaavilla versioilla:
Työkalut sa-logic kohdistetaan etiketeillä varustettuihin paloihin app=sa-logic, joten kaikki pyynnöt jaetaan kaikkien esiintymien kesken:
... mutta haluamme, että pyynnöt lähetetään v1-esiintymiin ja peilataan v2-esiintymiin:
Saavutamme tämän VirtualServicen avulla yhdessä DestinationRulen kanssa, jossa säännöt määrittävät VirtualServicen osajoukot ja reitit tiettyyn osajoukkoon.
Tässä ei tarvita selityksiä, joten katsotaanpa sitä toiminnassa:
$ kubectl apply -f resource-manifests/istio/shadowing/sa-logic-subsets-shadowing-vs.yaml
virtualservice.networking.istio.io/sa-logic created
Lisätään kuorma kutsumalla seuraava komento:
$ while true; do curl -v http://$EXTERNAL_IP/sentiment
-H "Content-type: application/json"
-d '{"sentence": "I love yogobella"}';
sleep .8; done
Katsotaanpa tuloksia Grafanassa, jossa voit nähdä, että versio, jossa on bugeja (buggy) johtaa epäonnistumiseen noin 60 %:ssa pyynnöistä, mutta mikään näistä virheistä ei vaikuta loppukäyttäjiin, koska käynnissä oleva palvelu vastaa niihin.
Onnistuneet vastaukset sa-logic-palvelun eri versioista
Täällä näimme ensimmäisen kerran, kuinka VirtualServiceä sovelletaan palveluidemme lähettiläisiin: milloin sa-web-app tekee pyynnön sa-logic, se kulkee sivuvaunun Envoyn kautta, joka - VirtualServicen kautta - on määritetty reitittämään pyyntö v1-alijoukkoon ja peilaamaan pyyntö palvelun v2-alijoukkoon. sa-logic.
Tiedän, saatat jo ajatella, että virtuaalipalvelut ovat yksinkertaisia. Seuraavassa osiossa laajennamme sitä sanomalla, että ne ovat myös todella mahtavia.
Canary Rollouts
Canary Deployment on prosessi, jossa sovelluksen uusi versio julkaistaan pienelle määrälle käyttäjiä. Sitä käytetään varmistamaan, että julkaisussa ei ole ongelmia ja vasta sen jälkeen, kun olet jo varma sen (julkaisun) laadusta, jakaa se muille käyttäjille.оsuurempi yleisö.
Jatkamme työskentelyä osajoukon kanssa esitelläksemme kanarialintujen käyttöönottoa buggy у sa-logic.
Älkäämme tuhlaako aikaa pikkuasioihin ja lähettäkäämme 20% käyttäjistä välittömästi bugi-versioon (tämä edustaa Canary-julkaisuamme) ja loput 80% normaaliin palveluun. Voit tehdä tämän käyttämällä seuraavaa VirtualService (sa-logic-subsets-canary-vs.yaml):
... ja näemme heti, että jotkin pyynnöt johtavat epäonnistumiseen:
$ while true; do
curl -i http://$EXTERNAL_IP/sentiment
-H "Content-type: application/json"
-d '{"sentence": "I love yogobella"}'
--silent -w "Time: %{time_total}s t Status: %{http_code}n"
-o /dev/null; sleep .1; done
Time: 0.153075s Status: 200
Time: 0.137581s Status: 200
Time: 0.139345s Status: 200
Time: 30.291806s Status: 500
VirtualServices mahdollistaa Canaryn käyttöönoton: Tässä tapauksessa olemme rajanneet ongelmien mahdollisen vaikutuksen 20 prosenttiin käyttäjäkannasta. Ihana! Nyt kaikissa tapauksissa, joissa emme ole varmoja koodistamme (toisin sanoen - aina...), voimme käyttää peilaus- ja canary rolloutia.
Aikakatkaisut ja uudelleenyritykset
Mutta virheet eivät aina päädy koodiin. Luettelossa alkaen "8 väärinkäsitystä hajautetusta tietojenkäsittelystä"Ensinnäkin on virheellinen uskomus "verkko on luotettava". Todellisuudessa verkko ei luotettava, ja tästä syystä tarvitsemme aikakatkaisuja (aikakatkaisut) ja yrittää uudelleen (yrittää uudelleen).
Esittelyssä jatkamme saman ongelmaversion käyttöä sa-logic (buggy), ja simuloimme verkon epäluotettavuutta satunnaisilla vioilla.
Anna virheitä sisältävälle palvelullemme 1/3 todennäköisyydellä, että vastaaminen kestää liian kauan, 1/3 todennäköisyydellä päättyy sisäiseen palvelinvirheeseen ja 1/3 todennäköisyydellä sivun palauttaminen onnistuneesti.
Lieventääksemme tällaisten ongelmien vaikutusta ja parantaaksemme käyttäjien elämää, voimme:
lisää aikakatkaisu, jos palvelun vastaaminen kestää yli 8 sekuntia,
Ja jokainen yritys katsotaan epäonnistuneeksi, jos vasteaika ylittää 3 sekuntia.
Tämä on optimointi, koska käyttäjän ei tarvitse odottaa kahdeksaa sekuntia kauempaa ja teemme kolme uutta yritystä saada vastaus epäonnistuessa, mikä lisää onnistuneen vastauksen mahdollisuuksia.
Ota päivitetty kokoonpano käyttöön seuraavalla komennolla:
Ja tarkista Grafana-kaavioista, että onnistuneiden vastausten määrä on kasvanut edellä:
Onnistuneiden vastaustilastojen parannuksia aikakatkaisujen ja uudelleenyritysten lisäämisen jälkeen
Ennen kuin siirryt seuraavaan osaan (tai pikemminkin artikkelin seuraavaan osaan, koska tässä ei ole enää käytännön kokeita - noin käännös.), poista sa-logic-buggy ja VirtualService suorittamalla seuraavat komennot:
Puhumme kahdesta tärkeästä mikropalveluarkkitehtuurin mallista, joiden avulla voit saavuttaa itsensä palautumisen (itseparantava) palvelut.
katkaisija("katkaisija") käytetään lopettamaan pyynnöt, jotka tulevat epäterveellisenä pidetyn palvelun ilmentymään ja palauttamaan se, kun taas asiakaspyynnöt uudelleenohjataan kyseisen palvelun terveisiin esiintymiin (mikä lisää onnistuneiden vastausten prosenttiosuutta). (Huom: Tarkempi kuvaus kuviosta löytyy esim. täällä.)
väliseinä("osio") eristää palveluvirheet vaikuttamasta koko järjestelmään. Esimerkiksi palvelu B on rikki ja toinen palvelu (palvelun B asiakas) tekee pyynnön palvelulle B, jolloin se tyhjentää säievarastonsa eikä pysty palvelemaan muita pyyntöjä (vaikka ne eivät olisi palvelusta B). (Huom: Tarkempi kuvaus kuviosta löytyy esim. täällä.)
Jätän näiden mallien toteutustiedot pois, koska ne on helppo löytää virallinen dokumentaatio, ja haluan myös todella näyttää todennuksen ja valtuutuksen, joista keskustellaan artikkelin seuraavassa osassa.