JĂ€lgimine ja monitooring Istios: mikroteenused ja ebakindluse printsiip

Heisenbergi ebamugavuse pĂ”himĂ”te ĂŒtleb, et ei saa samal ajal mÔÔta objekti asukohta ja selle kiirus. Kui objekt liigub, siis ei ole tal asukohta. Ja kui asukoht on olemas – siis tal ei ole kiirus.

JĂ€lgimine ja monitooring Istios: mikroteenused ja ebakindluse printsiip

Mis puudutab mikroteenuseid Red Hat OpenShift platvormil (ja Kubernetes'i juhtimisel), siis tÀnu avatud koodiga tarkvarale saavad nad samal ajal raporteerida nii oma jÔudlust kui ka töökindlust. Heisenbergi ebamugavus jÀÀb kehtima, kuid see kÔrvaldab ebamugavuse pilve rakenduste kasutamisel. Istio vÔimaldab hÔlpsasti korraldada nende rakenduste jÀlgimist ja monitooringut, et kÔik oleks kontrolli all.

MÀÀratleme terminoloogia

Alustama jĂ€lgimine (Tracing) me mĂ”istame sĂŒsteemi tegevuse logimist. See kĂ”lab ĂŒsna ĂŒldiselt, kuid tegelikult on siin ĂŒks peamisi reegleid andmete jĂ€lgimise suunamine sobivasse salvestusse, muretsemata nende vormingu pĂ€rast. KĂ”ik andmete otsimise ja analĂŒĂŒsimise töö jÀÀb nende tarbija Ă”lgadele. Istios kasutatakse jĂ€lgimissĂŒsteemi Jaeger, mis rakendab OpenTracing andmemudelit.

JĂ€ljed (Traces, ja sĂ”na „jĂ€ljed” kasutatakse siin tĂ€henduses „mĂ€rke”, nagu nĂ€iteks ballistika eksamineerimisel) nimetame me andmeid, mis kirjeldavad tĂ€ielikult pĂ€ringu vĂ”i tĂ¶Ă¶ĂŒlesande lĂ€bimist, nagu öeldakse, „kĂ”ik alates ja kuni”. NĂ€iteks kĂ”ik, mis juhtub hetkest, kui kasutaja vajutab nuppu veebilehel, kuni andmete tagastamise hetkeni, sealhulgas kĂ”ik kaasatud mikroteenused. Ühe jĂ€lje kohta vĂ”ib öelda, et see kirjeldab (vĂ”i modelleerib) pĂ€ringu lĂ€bimist sinna ja tagasi. Jaegeri liideses jagunevad jĂ€ljed ajateljel koostisosadeks, just nagu ahelat vĂ”iks jagada eraldi lĂŒlideks. Ainult et lĂŒlide asemel koosneb jĂ€lg nn span'idest.

Span – see on ajavahemik tööde tegemise algusest kuni nende lĂ”petamiseni. JĂ€tkates analoogiat, vĂ”ib öelda, et iga span esindab eraldi lĂŒli ketis. Span vĂ”ib omada (vĂ”i mitte omada) ĂŒhte vĂ”i mitut alam span'i. SeetĂ”ttu on kĂ”ige kĂ”rgema taseme span'il (root span) sama kogukestus nagu rada, millele see viitab.

JĂ€lgimine – see on tegelikult teie sĂŒsteemi jĂ€lgimine – silmade kaudu, kasutajaliidese kaudu vĂ”i automatiseerimise vahendite abil. JĂ€lgimise aluseks on jĂ€lgimisandmed. Istios on jĂ€lgimine rakendatud Prometheuse vahenditega, millel on ka vastav kasutajaliides. Prometheus toetab automaatset jĂ€lgimist, kasutades teavitusi Alerts ja Alert Managers.

JÀtame mÀrgid

Ette, et jÀlgimine oleks vÔimalik, peab rakendus looma span'ide kogumi. SeejÀrel tuleb need eksportida Jaegerisse, et see omakorda looks jÀlgimise visuaalse esituse. Nende span'ide hulka kuuluvad muu hulgas operatsiooni nimi ning ajamÀrke selle alguse ja lÔpu kohta. Span'ide edastamine toimub Jaegerile suunatud HTTP-pÀringute pealkirjade samuti sisse- ja vÀljaminevate pÀringute vahelise suunamise teel. SÔltuvalt kasutatavast programmeerimiskeelest vÔib see nÔuda vÀikseid muudatusi rakenduste lÀhtekoodis. Allpool on nÀide Java koodist (kasutades Spring Boot raamistikku), mis lisab B3 (Zipkin-stiilis) pealkirjad teie pÀringule Springi konfigureerimisklassis:

JĂ€lgimine ja monitooring Istios: mikroteenused ja ebakindluse printsiip
Kasutatakse jÀrgmisi pealkirja seadeid:

JĂ€lgimine ja monitooring Istios: mikroteenused ja ebakindluse printsiip
Kui kasutate Java't, siis koodi pole vaja muuta, piisab, kui lisada paar rida Maven POM-faili ning mÀÀrata keskkonnamuutujad. Siin on read, mida peate lisama POM.XML faili, et Jaeger Tracer Resolverit integreerida:

JĂ€lgimine ja monitooring Istios: mikroteenused ja ebakindluse printsiip
Ja vastavad keskkonnamuutujad mÀÀratakse Dockerfile'is:

JĂ€lgimine ja monitooring Istios: mikroteenused ja ebakindluse printsiip
NĂŒĂŒd on kĂ”ik seadistatud, ja meie mikroteenused hakkavad genereerima jĂ€lgimisandmeid.

Vaatame ĂŒldiselt

Istio sisaldab lihtsat juhtpaneeli, mis on ĂŒles ehitatud Grafana pĂ”hjal. Kui kĂ”ik on seadistatud ja töötab Red Hat OpenShift PaaS platvormil (meie nĂ€ites on Red Hat OpenShift ja Kubernetes paigaldatud minishiftile), kĂ€ivitatakse see paneel jĂ€rgmise kĂ€suga:

ava "$(minishift openshift service grafana -u)/d/1/istio-dashboard?refresh=5⩝Id=1"

Grafana paneel vĂ”imaldab kiiresti hinnata sĂŒsteemi toimimist. Selle paneeli fragment on nĂ€idatud alloleval joonisel:

JĂ€lgimine ja monitooring Istios: mikroteenused ja ebakindluse printsiip
Siit on nĂ€ha, et mikroteenus customer kutsub mikroteenust preference v1, mis omakorda kutsub mikroteenuseid recommendation v1 ja v2. Grafana paneelil on Dashboard Row plokk kĂ”rgetasemeliste mÔÔdikute jaoks, nagu globaalne pĂ€ringute maht (Global Request Volume), edukaid pĂ€ringute osakaal (success rates) ja 4xx vead. Samuti on seal Server Mesh esitus diagrammide kujul iga teenuse kohta ja Services Row plokk, et vaadata ĂŒksikasjalikke andmeid iga konteineri kohta iga teenuse jaoks.

NĂŒĂŒd uurime sĂŒgavamale

Korrektselt seadistatud Istio jĂ€lgimine vĂ”imaldab kohe sĂŒvitsi minna sĂŒsteemi sooritusvĂ”ime analĂŒĂŒsi. Jaegeri kasutajaliideses saab jĂ€lgimisi vaadata ning nĂ€ha, kui kaugele ja sĂŒgavale need ulatuvad, samuti visuaalselt lokaliseerida sooritusvĂ”ime kitsaskohti. Red Hat OpenShift platvormil minishift kĂ€ivitate Jaegeri kasutajaliidese jĂ€rgmise kĂ€su abil:

minishift openshift service jaeger-query --in-browser

JĂ€lgimine ja monitooring Istios: mikroteenused ja ebakindluse printsiip
Mida saab sellel ekraanipildil jÀlgimise kohta öelda:

  • See jaguneb 7 span'iks.
  • Kogu tĂ€itmise aeg on 6,99 ms.
  • MikrosĂŒsteemil recommendation, mis on ahelas viimane, kulub 0,69 ms.

Sellised diagrammid aitavad kiiresti olukorda mĂ”ista, kui mĂ”ni ĂŒksik toimiv teenus mĂ”jutab kogu sĂŒsteemi sooritusvĂ”imet.

NĂŒĂŒd teeme asja keerulisemaks ja kĂ€ivitame kaks eksemplari mikroteenusest recommendation:v2 kĂ€suga oc scale —replicas=2 deployment/recommendation-v2. Siin on, millised pod'id meil pĂ€rast seda on:

JĂ€lgimine ja monitooring Istios: mikroteenused ja ebakindluse printsiip
Kui nĂŒĂŒd tagasi Jaegeri peale lĂŒlituda ja soovituse teenuse span'i laiendada, nĂ€eme, millisele pod'ile pĂ€ringud suunatakse. Nii suudame hĂ”lpsasti lokaliseerida viivitused konkreetse pod'i tasemel. Vaadata tuleb node_id vĂ€lja.

JĂ€lgimine ja monitooring Istios: mikroteenused ja ebakindluse printsiip

Kuhu ja kuidas kÔik liigub

NĂŒĂŒd liikume Prometheuse liidese poole ja ĂŒsna oodatult nĂ€eme seal, et pĂ€ringud soovituse teenuse teise ja esimese versiooni vahel jagunevad suhe 2:1, rangelt tegutsevate pod'ide arvu alusel. Samuti muutub see diagramm dĂŒnaamiliselt pod'ide ĂŒles- ja allaskaalumisel, mis on eriti kasulik Canary tĂ€itmisel (me vaatame seda deployment'i skeemi jĂ€rgmine kord lĂ€hemalt).

JĂ€lgimine ja monitooring Istios: mikroteenused ja ebakindluse printsiip

KÔik on alles algamas

Tegelikult oleme tĂ€na, nagu öeldakse, vaid kergelt puudutanud kasuliku teabe varasalve Jaegeri, Grafana ja Prometheuse kohta. Üldiselt oli see meie eesmĂ€rk – suunata teid Ă”iges suunas ja avada Istio vĂ”imalusi.

Ja pidage meeles, et kĂ”ik see on juba integreeritud Istiosse. Teatud programmeerimiskeelte (nĂ€iteks Java) ja raamistike (nt Spring Boot) kasutamisel saab seda kĂ”ike rakendada, puudutamata rakenduste enda koodi. Jah, koodi tuleb veidi muuta, kui kasutate teisi keeli, peamiselt Nodejs vĂ”i C#. Kuid kuna jĂ€lgitavus (loe: „lingitamine”) on usaldusvÀÀrsete pilvesĂŒsteemide loomise ĂŒks kohustuslikke tingimusi, peate te igal juhul koodi muutma, olgu teil Istio vĂ”i mitte. Miks siis mitte suunata oma jĂ”upingutusi kasulikuma eesmĂ€rgi nimel?

Isegi selleks, et vastata kĂŒsimustele „kus?” ja „kui kiiresti?” 100% kindlalt.

Kaosinseneria Istios: nii see oli ette nÀhtud

Asjade purustamise oskus aitab tagada, et need ei puruneks

Tarkvara testimine on mitte ainult keeruline, vaid ka oluline. Samas on testimine, et kontrollida, kas funktsioon tagastab Ă”ige tulemuse, ĂŒks asi, aga testimine usaldusvÀÀrse vĂ”rgu tingimustes on hoopis teine ĂŒlesanne (tihti arvatakse, et vĂ”rk töötab alati tĂ”rgeteta, ja see on esimene kaheksast eksitusest jaotatud arvutustes). Üks raskusi selle ĂŒlesande lahendamisel seisneb selles, kuidas simuleerida sĂŒsteemi rikkeid vĂ”i sisestada neid tahtlikult, tehes nii nimetatud fault injection. Seda saab teha, muutes rakenduse algkoodi. Kuid siis testite te mitte oma algset koodi, vaid selle versiooni, mis simuleerib spetsiaalselt rikkeid. Tulemusena riskite sattuda surmavate fault injection'ite embustesse ja kokku puutuda geisenbug'idega – tĂ”rgetega, mis kaovad katsetamisel, et neid avastada.

Ja nĂŒĂŒd nĂ€itame, kuidas Istio aitab neid raskusi lahendada kiirelt ja lihtsalt.

Nii see vÀlja nÀeb, kui kÔik on suurepÀraselt

Kaalu jĂ€rgmine stsenaarium: meil on kaks pod'i meie soovitusmikroteenuses, mille vĂ”tsime Istio Ă”pikust. Üks pod on mĂ€rgitud kui v1 ja teine kui v2. Nagu nĂ€eme, töötab kĂ”ik praegu suurepĂ€raselt:

JĂ€lgimine ja monitooring Istios: mikroteenused ja ebakindluse printsiip
(Muide, paremal number on lihtsalt igas pod'is tehtud kÔnede loend)

Aga me ei vaja tÔepoolest seda, eks? Proovime siis kÔik purustada, puudutamata algseid koode.

Teeme mikroteenusele katkestusi

Allpool on nÀidatud yaml-fail Istio marsruutimisreegli jaoks, mis pooltel juhtudel tekitab vea (veateate). serverid 503):

JĂ€lgimine ja monitooring Istios: mikroteenused ja ebakindluse printsiip
Pange tÀhele, et me kirjeldame selgelt, et pooltel juhtudel peab toimuma viga 503.

Nii nÀeb vÀlja pildiscreenshot jooksutatud curl'i kÀsust pÀrast reegli aktiveerimist, et simuleerida katkestusi. Nagu nÀeme, tagastab pool pÀringutest veateate 503, sÔltumata sellest, kas need suunatakse pod'ile v1 vÔi v2:

JĂ€lgimine ja monitooring Istios: mikroteenused ja ebakindluse printsiip
Normaalse töö taastamiseks piisab reegli kustutamisest, meie puhul kÀsuga istioctl delete routerule recommendation-503 -n tutorial. Siin on Tutorial Red Hat OpenShift'i projekti nimi, kus meie Istio Ôpik töötab.

Lisame kunstlikud viivitused

Tehislikud 503 vead aitavad testida sĂŒsteemi taluvust riketeks, kuid vĂ”ime prognoosida ja hallata viivitusi peaks teid veelgi rohkem hĂ€mmastama. Ja tegelikus elus esinevad viivitused sageli rohkem kui rikete probleemid. Aeglaselt töötav mikroteenus on mĂŒrgine, mis mĂ”jutab kogu sĂŒsteemi. Istio abil saame testida koodi, mis kĂ€sitleb viivitusi, seda muudatusi tegemata. Alustuseks nĂ€itame, kuidas seda teha kunstlikult tekitatud vĂ”rgu viivituste korral.

Pange tĂ€hele, et sellise testimise jĂ€rel vĂ”ib teil olla vajadus (vĂ”i soov) oma koodi tĂ€iendada. Hea uudis on see, et sellisel juhul tegutsete proaktiivselt, mitte reaktiivselt. Just nii peaks olema ĂŒles ehitatud arendustsĂŒkkel: kodeerimine-testeerimine-tagasiside-kodeerimine-testeerimine


Nii nĂ€eb vĂ€lja reegel, mis
 Kuigi teadsite, mis? Istio on nii lihtne ja see yaml-fail on nii arusaadav, et kĂ”ik selles nĂ€ites rÀÀgib ise enda eest, lihtsalt vaadake:

JĂ€lgimine ja monitooring Istios: mikroteenused ja ebakindluse printsiip
Pooles juhtudel on meil 7-sekundiline viivitus. See ei ole sama, nagu oleksime sisestanud algkoodis kĂ€su sleep, kuna Istio viivitab pĂ€ringu tegelikult 7 sekundiks. Kuna Istio toetab Jaegeri jĂ€litamist, on see viivitus selgelt nĂ€htav Jaegeri kasutajaliideses, nagu on nĂ€idatud alloleval ekraanipildil. Pange tĂ€hele, et paremas ĂŒlanurgas on pikk pĂ€ring – selle kestus on 7,02 sekundit:

JĂ€lgimine ja monitooring Istios: mikroteenused ja ebakindluse printsiip
See stsenaarium vÔimaldab testida koodi vÔrgu viivituse tingimustes. On selge, et kui eemaldame selle reegli, eemaldame ka kunstliku viivituse. Kordame end, kuid me tegime kÔik selle, puutumatult algkoodi.

Ärge tagasi astuge ja Ă€rge alla andke

Teine kasulik funktsioon Istios, mis aitab kaosetehnoloogiate valdkonnas, on vĂ”imalus teha teenusele korduvaid pĂ€ringuid antud arvu kordi. Idee on see, et me ei katkestaks katseid, kui esimene pĂ€ring lĂ”ppeb veaga 503 – ja vĂ”ib-olla, N-ndal korral Ă”nnestub meil. VĂ”ib-olla on teenus lihtsalt mĂ”neks ajaks puhkusele lĂ€inud. Jah, see pĂ”hjus tuleks kindlasti vĂ€lja selgitada ja kĂ”rvaldada. Aga see on hiljem, praegu proovime sĂŒsteemi töös hoida.

Nii et me tahame, et teenus aeg-ajalt vĂ€ljastaks vea 503, ja Istio pĂŒĂŒab sellele jĂ€rgnevalt uuesti ĂŒhendust vĂ”tta. Siinkohal on kindlasti vaja viisi genereerida viga 503, muutmata koodi ise


Peatu, oota! Me just tegime seda.

See fail muudab nii, et teenus recommendation-v2 vÀljastab pooled korrad vea 503:

JĂ€lgimine ja monitooring Istios: mikroteenused ja ebakindluse printsiip
Ilmselgelt osa pÀringutest lÔppeb ebaÔnnestumisega:

JĂ€lgimine ja monitooring Istios: mikroteenused ja ebakindluse printsiip
NĂŒĂŒd rakendame Istio retry funktsiooni:

JĂ€lgimine ja monitooring Istios: mikroteenused ja ebakindluse printsiip
See marsruutingureegel teeb kolm kordust kahe sekundi intervalliga ja peaks vÀhendama (ideaalis tÀiesti kÔrvaldama) vea 503:

JĂ€lgimine ja monitooring Istios: mikroteenused ja ebakindluse printsiip
KokkuvĂ”tteks kĂŒsime: kuidas Istio, kĂ”igepealt, genereerib 503 viga poolele pĂ€ringutele. Ja teiseks, sama Istio teeb kolm katset, et uuesti ĂŒhendust vĂ”tta teenusega 503 vea ilmnemisel. Tulemuseks töötab kĂ”ik suurepĂ€raselt. Seega, kasutades Retry funktsiooni, tĂ€itsime oma lubaduse mitte alla anda.

Ja jah, me tegime seda taas, puudutamata koodi. KÔik, mis meil vaja oli, oli kaks Istio marsruutimise reeglit:

JĂ€lgimine ja monitooring Istios: mikroteenused ja ebakindluse printsiip

Kuidas mitte kasutajat alt vedada vĂ”i seitsmeĂŒhe ootamine

Ja nĂŒĂŒd keerame olukorra tagurpidi ja vaatame stsenaariumi, kus mitte alla anda on Ă”igustatud ainult mÀÀratud ajavahemiku jooksul. Ja siis tuleb lihtsalt katsetest loobuda, et mitte sundida kĂ”iki ootama ĂŒhte aeglast teenust. TeisisĂ”nu, me ei kaitse kaduma lĂ€inud positsiooni, vaid taganeme varupositsioonile, et mitte kasutajat petta ja mitte sundida teda teadmatuses vaevlema.

Istios on vĂ”imalik seada pĂ€ringu tĂ€itmise ajapiirang. Kui teenus ĂŒletab selle ajapiirangu, tagastatakse viga 504 (Gateway Timeout) – kĂ”ik see toimub taas lĂ€bi Istio konfiguratsiooni. Kuid meil tuleb lisada teenuse lĂ€htekoodi kĂ€sk sleep (ja seejĂ€rel loomulikult teha rebuild ja redeploy), et simuleerida teenuse aeglast tööd. Kahjuks muidu ei Ă”nnestu.

Nii et me lisasime teenuse recommendation v2 koodis kolmese kunduses sleep, rekonstrueerisime vastava pildi ja tegime konteineri rediplomatise, nĂŒĂŒd lisame ajapiirangu jĂ€rgmise Istio marsruutimise reegli kaudu:

JĂ€lgimine ja monitooring Istios: mikroteenused ja ebakindluse printsiip
Ülaltoodud ekraanipildilt on nĂ€ha, et katkestame katse ĂŒhendust vĂ”tta teenusega recommendation, kui me ei saa vastust ĂŒhe sekundi jooksul, st isegi enne, kui 504 viga esineb. PĂ€rast selle marsruutimise reegli rakendamist (ja kolme sekundi sleep'i lisamist teenuse recommendation:v2 koodi) saame jĂ€rgmist:

JĂ€lgimine ja monitooring Istios: mikroteenused ja ebakindluse printsiip
Korrame jĂ€lle, kuid ajapiirangut saab seadistada, puudutamata lĂ€htekoodi. TĂ€iendav boonus on see, et nĂŒĂŒd saate oma koodi muuta nii, et see reageerib ajapiirangule, ja hĂ”lpsasti testida neid muudatusi Istio abil.

Ja nĂŒĂŒd kĂ”ik koos

Isto'ga kaose toomis on suurepĂ€rane viis katsetada oma koodi ja kogu sĂŒsteemi usaldusvÀÀrsust. Tagasilöögimallid, bulkhead ja circuit breaker, kunstlike rike ja viivitusmehhanismid, samuti uuesti kutsumised ja ajaĂŒlemised on ÀÀrmiselt kasulikud usaldusvÀÀrsete pilvesĂŒsteemide loomisel. Koos Kubernetes'i ja Red Hat OpenShift'iga aitavad need tööriistad tulevikku kindlalt siseneda.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster