Sveiki! Mani sauc Vadims Medisons, es vadu Avito sistÄmas platformas izstrÄdi. Ne reizi vien ir runÄts par to, kÄ mÄs uzÅÄmumÄ pÄrejam no monolÄ«tÄs arhitektÅ«ras uz mikropakalpojumu arhitektÅ«ru. Ir pienÄcis laiks pastÄstÄ«t par to, kÄ esam pÄrveidojuÅ”i savu infrastruktÅ«ru, lai maksimÄli izmantotu mikropakalpojumus un nepazustu tajos. KÄ PaaS mums palÄ«dz, kÄ mÄs vienkÄrÅ”ojÄm izvietoÅ”anu un samazinÄjÄm mikropakalpojuma izveidi lÄ«dz vienam klikŔķim - lasiet tÄlÄk. Ne viss, par ko es rakstu tÄlÄk, ir pilnÄ«bÄ ieviests Avito, daži no tiem ir tas, kÄ mÄs attÄ«stÄm savu platformu.
(Un Ŕī raksta beigÄs es runÄÅ”u par iespÄju apmeklÄt trÄ«s dienu seminÄru no mikropakalpojumu arhitektÅ«ras eksperta Krisa RiÄardsona).
KÄ mÄs nonÄcÄm lÄ«dz mikropakalpojumiem
Avito ir viena no lielÄkajÄm klasificÄtajÄm vietnÄm pasaulÄ, tajÄ katru dienu tiek publicÄti vairÄk nekÄ 15 miljoni jaunu sludinÄjumu. MÅ«su aizmugursistÄma pieÅem vairÄk nekÄ 20 tÅ«kstoÅ”us pieprasÄ«jumu sekundÄ. Å obrÄ«d mums ir vairÄki simti mikropakalpojumu.
Jau vairÄkus gadus esam veidojuÅ”i mikropakalpojumu arhitektÅ«ru. KÄ tieÅ”i - mÅ«su kolÄÄ£i sÄ«kÄk stÄstÄ«ja mÅ«su sadaÄ¼Ä RIT++ 2017. CodeFest 2017 (sk. Video), Sergejs Orlovs un Mihails ProkopÄuks detalizÄti paskaidroja, kÄpÄc mums bija nepiecieÅ”ama pÄreja uz mikropakalpojumiem un kÄdu lomu Å”eit spÄlÄja Kubernetes. Tagad mÄs darÄm visu, lai samazinÄtu mÄrogoÅ”anas izmaksas, kas ir raksturÄ«gas Å”Ädai arhitektÅ«rai.
SÄkotnÄji mÄs neveidojÄm ekosistÄmu, kas vispusÄ«gi palÄ«dzÄtu mums attÄ«stÄ«t un palaist mikropakalpojumus. ViÅi vienkÄrÅ”i savÄca saprÄtÄ«gus atvÄrtÄ pirmkoda risinÄjumus, palaida tos mÄjÄs un aicinÄja izstrÄdÄtÄju ar tiem rÄ«koties. RezultÄtÄ viÅÅ” devÄs uz duci vietÄm (informÄcijas paneļiem, iekÅ”Äjiem pakalpojumiem), pÄc tam viÅÅ” kļuva spÄcÄ«gÄks savÄ vÄlmÄ izgriezt kodu vecajÄ veidÄ, monolÄ«tÄ. ZaÄ¼Ä krÄsa zemÄk redzamajÄs diagrammÄs norÄda, ko izstrÄdÄtÄjs tÄ vai citÄdi dara ar savÄm rokÄm, un dzeltenÄ krÄsa norÄda uz automatizÄciju.
Tagad PaaS CLI utilÄ«tprogrammÄ jauns pakalpojums tiek izveidots ar vienu komandu, un jauna datu bÄze tiek pievienota ar vÄl divÄm komandÄm un tiek izvietota Stage.
Ar monolÄ«tu arhitektÅ«ru, lai nodroÅ”inÄtu produkta izmaiÅu konsekvenci, izstrÄdÄtÄji bija spiesti noskaidrot, kas notiek ar saviem kaimiÅiem. StrÄdÄjot pie jaunÄs arhitektÅ«ras, pakalpojumu konteksti vairs nav atkarÄ«gi viens no otra.
TurklÄt, lai mikropakalpojumu arhitektÅ«ra bÅ«tu efektÄ«va, ir jÄizveido daudzi procesi, proti:
ā¢ mežizstrÄde;
ā¢ pieprasÄ«t izsekoÅ”anu (Jaeger);
ā¢ kļūdu apkopoÅ”ana (Sentry);
ā¢ statusi, ziÅojumi, notikumi no Kubernetes (Event Stream Processing);
ā¢ sacensÄ«bu limits / Ä·Ädes pÄrtraucÄjs (varat izmantot Hystrix);
ā¢ pakalpojumu savienojamÄ«bas kontrole (izmantojam Netramesh);
ā¢ monitorings (Grafana);
ā¢ montÄža (TeamCity);
ā¢ komunikÄcija un paziÅoÅ”ana (Slack, e-pasts);
ā¢ uzdevumu izsekoÅ”ana; (Jira)
ā¢ dokumentÄcijas sagatavoÅ”ana.
Lai nodroÅ”inÄtu, ka sistÄma nezaudÄ savu integritÄti un saglabÄjas efektÄ«va, kad tÄ mÄrogojas, mÄs pÄrdomÄjÄm mikropakalpojumu organizÄÅ”anu Avito.
KÄ mÄs pÄrvaldÄm mikropakalpojumus
SekojoÅ”ais palÄ«dz ieviest vienotu āpartiju politikuā starp daudziem Avito mikropakalpojumiem:
infrastruktÅ«ras sadalÄ«Å”ana slÄÅos;
Platformas kÄ pakalpojuma (PaaS) koncepcija;
uzraudzīt visu, kas notiek ar mikropakalpojumiem.
InfrastruktÅ«ras abstrakcijas slÄÅi ietver trÄ«s slÄÅus. Ejam no augÅ”as uz leju.
A. Tops - servisa siets. SÄkumÄ izmÄÄ£inÄjÄm Istio, bet izrÄdÄ«jÄs, ka tas patÄrÄ pÄrÄk daudz resursu, kas ir pÄrÄk dÄrgi mÅ«su apjomiem. TÄpÄc arhitektÅ«ras komandas vecÄkais inženieris Aleksandrs LukjanÄenko izstrÄdÄja savu risinÄjumu - Netramesh (pieejams Open Source), ko Å”obrÄ«d izmantojam ražoÅ”anÄ un kas patÄrÄ vairÄkas reizes mazÄk resursu nekÄ Istio (bet nedara visu, ar ko Istio var lepoties). B. VidÄja - Kubernetes. MÄs tajÄ izvietojam un izmantojam mikropakalpojumus. C. ApakÅ”daļa - pliks metÄls. MÄs neizmantojam mÄkoÅus vai tÄdas lietas kÄ OpenStack, bet pilnÄ«bÄ paļaujamies uz tukÅ”u metÄlu.
Visus slÄÅus apvieno PaaS. Un Ŕī platforma, savukÄrt, sastÄv no trim daļÄm.
I. Ä¢eneratori, ko kontrolÄ, izmantojot CLI utilÄ«tu. TieÅ”i viÅa palÄ«dz izstrÄdÄtÄjam izveidot mikropakalpojumu pareizÄ veidÄ un ar minimÄlu piepÅ«li.
II. KonsolidÄtais kolekcionÄrs ar visu rÄ«ku kontroli, izmantojot kopÄju informÄcijas paneli.
III. UzglabÄÅ”ana. Izveido savienojumu ar plÄnotÄjiem, kas automÄtiski iestata aktivizÄtÄjus nozÄ«mÄ«gÄm darbÄ«bÄm. Pateicoties Å”Ädai sistÄmai, neviens uzdevums netiek palaists garÄm tikai tÄpÄc, ka kÄds ir aizmirsis iestatÄ«t uzdevumu JirÄ. Å im nolÅ«kam mÄs izmantojam iekÅ”Äjo rÄ«ku Atlas.
Mikropakalpojumu ievieÅ”ana Avito tiek veikta arÄ« saskaÅÄ ar vienotu shÄmu, kas vienkÄrÅ”o to kontroli katrÄ izstrÄdes un izlaiÅ”anas posmÄ.
KÄ darbojas standarta mikropakalpojumu izstrÄdes cauruļvads?
ā¢ Mikropakalpojuma izveide.
MÄs ilgi cÄ«nÄ«jÄmies, lai iemÄcÄ«tu katram izstrÄdÄtÄjam veikt mikropakalpojumus. Tas ietvÄra detalizÄtu instrukciju rakstÄ«Å”anu Confluence. Bet shÄmas mainÄ«jÄs un tika papildinÄtas. RezultÄts ir tÄds, ka brauciena sÄkumÄ parÄdÄ«jÄs saÅ”aurinÄjums: mikropakalpojumu palaiÅ”ana prasÄ«ja daudz vairÄk laika, un joprojÄm bieži radÄs problÄmas to izveides laikÄ.
Galu galÄ mÄs izveidojÄm vienkÄrÅ”u CLI utilÄ«tu, kas automatizÄ pamata darbÄ«bas, veidojot mikropakalpojumu. Faktiski tas aizstÄj pirmo git push. LÅ«k, ko tieÅ”i viÅa dara.
ā Izveido pakalpojumu pÄc veidnes ā soli pa solim, āvedÅaā režīmÄ. Mums ir veidnes galvenajÄm programmÄÅ”anas valodÄm Avito aizmugursistÄmÄ: PHP, Golang un Python.
- Viena komanda vienlaikus izvieto vidi vietÄjai attÄ«stÄ«bai noteiktÄ maŔīnÄ - tiek palaists Minikube, Helm diagrammas tiek automÄtiski Ä£enerÄtas un palaistas vietÄjÄs kubernetes.
ā savieno nepiecieÅ”amo datu bÄzi. IzstrÄdÄtÄjam nav jÄzina IP, pieteikumvÄrds un parole, lai piekļūtu viÅam vajadzÄ«gajai datubÄzei ā vai tÄ bÅ«tu lokÄli, Stage vai ražoÅ”anÄ. TurklÄt datu bÄze tiek nekavÄjoties izvietota defektu izturÄ«gÄ konfigurÄcijÄ un ar balansÄÅ”anu.
ā Tas pats veic dzÄ«vu montÄžu. PieÅemsim, ka izstrÄdÄtÄjs kaut ko izlaboja mikropakalpojumÄ, izmantojot savu IDE. LietderÄ«ba redz izmaiÅas failu sistÄmÄ un, pamatojoties uz tÄm, atjauno lietojumprogrammu (Golang) un restartÄ. PHP gadÄ«jumÄ mÄs vienkÄrÅ”i pÄrsÅ«tÄm direktoriju kuba iekÅ”pusÄ, un tur tiek iegÅ«ta tieÅ”Ä pÄrlÄdÄÅ”ana āautomÄtiskiā.
ā Ä£enerÄ automÄtiskos testus. Sagatavju veidÄ, bet diezgan piemÄrots lietoÅ”anai.
ā¢ Mikropakalpojumu izvietoÅ”ana.
Mikropakalpojuma izvietoÅ”ana mums agrÄk bija neliels darbs. Bija nepiecieÅ”ams:
I. Dockerfile.
II. Konfig.
III. Stūres diagramma, kas pati par sevi ir apgrūtinoŔa un ietver:
MÄs esam atbrÄ«vojuÅ”ies no Kubernetes manifestu pÄrstrÄdes, tÄpÄc tie tagad tiek Ä£enerÄti automÄtiski. Bet pats galvenais, viÅi vienkÄrÅ”oja izvietoÅ”anu lÄ«dz robežai. No Ŕī brīža mums ir Dockerfile, un izstrÄdÄtÄjs ieraksta visu konfigurÄciju vienÄ Ä«sÄ app.toml failÄ.
JÄ, un paÅ”Ä app.toml nav ko darÄ«t vienu minÅ«ti. MÄs norÄdÄm, kur un cik pakalpojuma eksemplÄru izveidot (izstrÄdÄtÄja serverÄ«, iestudÄjumÄ, ražoÅ”anÄ), un norÄdÄm tÄ atkarÄ«bas. IevÄrojiet lÄ«nijas izmÄru = "mazs" blokÄ [dzinÄjs]. Å is ir limits, kas pakalpojumam tiks pieŔķirts, izmantojot Kubernetes.
PÄc tam, pamatojoties uz konfigurÄciju, tiek automÄtiski Ä£enerÄtas visas nepiecieÅ”amÄs Helm diagrammas un izveidoti savienojumi ar datu bÄzÄm.
ā¢ Pamata validÄcija. Å Ädas pÄrbaudes ir arÄ« automatizÄtas. NepiecieÅ”ams izsekot:
ā vai ir Dockerfile;
ā vai ir app.toml;
ā vai ir pieejama dokumentÄcija?
ā vai atkarÄ«ba ir kÄrtÄ«bÄ?
ā vai ir noteikti brÄ«dinÄjuma noteikumi.
Uz pÄdÄjo punktu: pakalpojuma Ä«paÅ”nieks pats nosaka, kuri produkta rÄdÄ«tÄji ir jÄuzrauga.
ā¢ DokumentÄcijas sagatavoÅ”ana.
JoprojÄm ir problemÄtiska joma. Å Ä·iet, ka tas ir visredzamÄkais, bet tajÄ paÅ”Ä laikÄ tas ir arÄ« rekords, kas "bieži tiek aizmirsts", un tÄpÄc tas ir neaizsargÄts Ä·Ädes posms.
NepiecieÅ”ams, lai katram mikropakalpojumam bÅ«tu dokumentÄcija. Tas ietver Å”Ädus blokus.
I. ÄŖss pakalpojuma apraksts. Burtiski daži teikumi par to, ko tas dara un kÄpÄc tas ir vajadzÄ«gs.
II. ArhitektÅ«ras diagrammas saite. Ir svarÄ«gi, lai ar Ätru skatienu uz to bÅ«tu viegli saprast, piemÄram, vai Redis izmantojat keÅ”atmiÅai vai kÄ galveno datu krÄtuvi pastÄvÄ«gÄ režīmÄ. Avito pagaidÄm Ŕī ir saite uz Confluence.
III. Runbook. ÄŖss ceļvedis par pakalpojuma sÄkÅ”anu un tÄ apstrÄdes sarežģītÄ«bÄm.
IV. FAQ, kur bÅ«tu labi paredzÄt problÄmas, ar kurÄm var saskarties jÅ«su kolÄÄ£i, strÄdÄjot ar dienestu.
V. API galapunktu apraksts. Ja pÄkÅ”Åi jÅ«s nenorÄdÄ«jÄt galamÄrÄ·us, kolÄÄ£i, kuru mikropakalpojumi ir saistÄ«ti ar jums, gandrÄ«z noteikti par to samaksÄs. Tagad Å”im nolÅ«kam mÄs izmantojam Swagger un mÅ«su risinÄjumu, ko sauc par Ä«su.
VI. EtiÄ·etes. Vai marÄ·ieri, kas parÄda, kuram produktam, funkcionalitÄtei vai uzÅÄmuma struktÅ«rvienÄ«bai pieder pakalpojums. Tie palÄ«dz Ätri saprast, piemÄram, vai izmantojat funkcionalitÄti, ko jÅ«su kolÄÄ£i ieviesa tai paÅ”ai biznesa vienÄ«bai pirms nedÄļas.
VII. Pakalpojuma Ä«paÅ”nieks vai Ä«paÅ”nieki. VairumÄ gadÄ«jumu to vai tos var noteikt automÄtiski, izmantojot PaaS, taÄu, lai bÅ«tu droŔībÄ, izstrÄdÄtÄjam tie ir jÄnorÄda manuÄli.
Visbeidzot, laba prakse ir pÄrskatÄ«t dokumentÄciju, lÄ«dzÄ«gi kÄ koda pÄrskatÄ«Å”anÄ.
NepÄrtraukta integrÄcija
Repozitoriju sagatavoŔana.
Cauruļvada izveide TeamCity.
Tiesību iestatīŔana.
MeklÄjiet pakalpojumu Ä«paÅ”niekus. Å eit ir hibrÄ«da shÄma - manuÄla marÄ·ÄÅ”ana un minimÄla automatizÄcija no PaaS. PilnÄ«bÄ automÄtiska shÄma neizdodas, ja pakalpojumi tiek nodoti atbalstam citai izstrÄdes komandai vai, piemÄram, ja pakalpojuma izstrÄdÄtÄjs aiziet.
Pakalpojuma reÄ£istrÄÅ”ana AtlasÄ (SkatÄ«t iepriekÅ”). Ar visiem tÄ Ä«paÅ”niekiem un atkarÄ«bÄm.
PÄrbauda migrÄcijas. MÄs pÄrbaudÄm, vai kÄds no tiem nav potenciÄli bÄ«stams. PiemÄram, vienÄ no tiem tiek parÄdÄ«ta izmaiÅu tabula vai kaut kas cits, kas var izjaukt datu shÄmas saderÄ«bu starp dažÄdÄm pakalpojuma versijÄm. Tad migrÄcija netiek veikta, bet gan ievietota abonementÄ ā PaaS jÄsignalizÄ pakalpojuma Ä«paÅ”niekam, kad to droÅ”i lietot.
Cep
NÄkamais posms ir iepakoÅ”anas pakalpojumi pirms izvietoÅ”anas.
StÅ«res diagrammu Ä£enerÄÅ”ana paÅ”am pakalpojumam un saistÄ«tajiem resursiem. Tostarp datu bÄzÄm un keÅ”atmiÅai. Tie tiek izveidoti automÄtiski saskaÅÄ ar app.toml konfigurÄciju, kas tika Ä£enerÄta CLI push stadijÄ.
BiļeÅ”u izveide administratoriem portu atvÄrÅ”anai (ja nepiecieÅ”ams).
VienÄ«bu testu izpilde un koda pÄrklÄjuma aprÄÄ·inÄÅ”ana. Ja koda pÄrklÄjums ir zem noteiktÄ sliekÅ”Åa, visticamÄk, pakalpojums netiks tÄlÄk - uz izvietoÅ”anu. Ja tas ir uz pieÅemama sliekÅ”Åa, pakalpojumam tiks pieŔķirts āpesimistisksā koeficients: tad, ja laika gaitÄ rÄdÄ«tÄjs neuzlabojas, izstrÄdÄtÄjs saÅems paziÅojumu, ka pÄrbaužu ziÅÄ nav progresa ( un kaut kas ar to ir jÄdara).
AtmiÅas un CPU ierobežojumu uzskaite. MÄs galvenokÄrt rakstÄm mikropakalpojumus GolangÄ un vadÄm tos Kubernetes. LÄ«dz ar to viens smalkums, kas saistÄ«ts ar Golang valodas Ä«patnÄ«bÄm: pÄc noklusÄjuma, startÄjot, tiek izmantoti visi maŔīnas kodoli, ja jÅ«s nepÄrprotami neiestatÄt GOMAXPROCS mainÄ«go, un, kad vienÄ maŔīnÄ tiek palaisti vairÄki Å”Ädi pakalpojumi, tie sÄkas. sacensties par resursiem, iejaucoties viens otram. ZemÄk esoÅ”ie grafiki parÄda, kÄ mainÄs izpildes laiks, ja lietojumprogrammu palaižat bez strÄ«diem un sacensÄ«bÄm par resursiem režīmÄ. (Grafiku avoti ir Å”eit).
Izpildes laiks, mazÄk ir labÄk. Maksimums: 643 ms, minimÄlais: 42 ms. FotoattÄls ir noklikŔķinÄms.
Laiks operÄcijai, jo mazÄk ir labÄk. Maksimums: 14091 ns, minimÄlais: 151 ns. FotoattÄls ir noklikŔķinÄms.
MontÄžas sagatavoÅ”anas posmÄ varat skaidri iestatÄ«t Å”o mainÄ«go vai izmantot bibliotÄku automaxprocs no puiÅ”iem no Uber.
Izvietot
ā¢ PÄrbaudes konvencijas. Pirms sÄkat piegÄdÄt servisa komplektus paredzÄtajÄ vidÄ, jums ir jÄpÄrbauda:
- API galapunkti.
ā API galapunktu atbilžu atbilstÄ«ba shÄmai.
ā žurnÄla formÄts.
ā galvenes iestatÄ«Å”ana pieprasÄ«jumiem pakalpojumam (Å”obrÄ«d to veic netramesh)
ā Ä«paÅ”nieka pilnvaras iestatÄ«Å”ana, sÅ«tot ziÅojumus uz notikumu kopni. Tas ir nepiecieÅ”ams, lai izsekotu pakalpojumu savienojamÄ«bu visÄ autobusÄ. Uz kopni var nosÅ«tÄ«t gan idempotentus datus, kas nepalielina pakalpojumu savienojamÄ«bu (kas ir labi), gan biznesa datus, kas stiprina pakalpojumu savienojamÄ«bu (kas ir ļoti slikti!). Un brÄ«dÄ«, kad Ŕī savienojamÄ«ba kļūst par problÄmu, izpratne par to, kas raksta un lasa autobusu, palÄ«dz pareizi nodalÄ«t pakalpojumus.
Avito vÄl nav daudz konvenciju, taÄu to kopums paplaÅ”inÄs. Jo vairÄk Å”Ädu lÄ«gumu ir pieejami komandai saprotamÄ un saprotamÄ formÄ, jo vieglÄk ir saglabÄt konsekvenci starp mikropakalpojumiem.
SintÄtiskie testi
ā¢ SlÄgtÄ cikla testÄÅ”ana. Å im nolÅ«kam mÄs tagad izmantojam atvÄrto avotu Hoverfly.io. PirmkÄrt, tas reÄ£istrÄ pakalpojuma reÄlo slodzi, pÄc tam - tikai slÄgtÄ ciklÄ - atdarina to.
ā¢ Stresa testÄÅ”ana. MÄs cenÅ”amies nodroÅ”inÄt visu pakalpojumu optimÄlu veiktspÄju. Un visÄm katra pakalpojuma versijÄm ir jÄveic slodzes pÄrbaude ā tÄ mÄs varam izprast pakalpojuma paÅ”reizÄjo veiktspÄju un atŔķirÄ«bu no iepriekÅ”ÄjÄm tÄ paÅ”a pakalpojuma versijÄm. Ja pÄc pakalpojuma atjauninÄÅ”anas tÄ veiktspÄja samazinÄjÄs par pusotru reizi, tas ir skaidrs signÄls tÄ Ä«paÅ”niekiem: jums ir jÄiedziļinÄs kodÄ un jÄlabo situÄcija.
MÄs izmantojam apkopotos datus, piemÄram, lai pareizi ieviestu automÄtisko mÄrogoÅ”anu un galu galÄ vispÄr saprastu, cik pakalpojums ir mÄrogojams.
Slodzes testÄÅ”anas laikÄ mÄs pÄrbaudÄm, vai resursu patÄriÅÅ” atbilst noteiktajiem ierobežojumiem. Un mÄs galvenokÄrt koncentrÄjamies uz galÄjÄ«bÄm.
a) MÄs skatÄmies uz kopÄjo slodzi.
- PÄrÄk mazs - visticamÄk, kaut kas nedarbojas vispÄr, ja slodze pÄkÅ”Åi nokrÄ«t vairÄkas reizes.
- PÄrÄk liels ā nepiecieÅ”ama optimizÄcija.
b) MÄs skatÄmies nogriezni saskaÅÄ ar RPS.
Å eit mÄs aplÅ«kojam atŔķirÄ«bu starp paÅ”reizÄjo un iepriekÅ”Äjo versiju un kopÄjo daudzumu. PiemÄram, ja serviss ražo 100 rps, tad tas ir vai nu slikti uzrakstÄ«ts, vai arÄ« tÄ ir tÄ specifika, bet jebkurÄ gadÄ«jumÄ tas ir pamats servisu aplÅ«kot ļoti rÅ«pÄ«gi.
Ja, gluži pretÄji, RPS ir pÄrÄk daudz, iespÄjams, ka ir kÄda veida kļūda un daži galapunkti ir pÄrtraukuÅ”i izpildÄ«t lietderÄ«go slodzi, bet kÄds cits ir vienkÄrÅ”i iedarbinÄts return true;
KanÄriju testi
Kad esam izturÄjuÅ”i sintÄtiskos testus, mÄs pÄrbaudÄm mikropakalpojumu nelielam lietotÄju skaitam. MÄs sÄkam uzmanÄ«gi, ar nelielu pakalpojuma paredzÄtÄs auditorijas daļu ā mazÄk nekÄ 0,1%. Å ajÄ posmÄ ir ļoti svarÄ«gi, lai uzraudzÄ«bÄ tiktu iekļauti pareizie tehniskie un produktu rÄdÄ«tÄji, lai tie pÄc iespÄjas ÄtrÄk parÄdÄ«tu problÄmu servisÄ. MinimÄlais kanÄriju testa laiks ir 5 minÅ«tes, galvenais - 2 stundas. Sarežģītiem pakalpojumiem mÄs iestatÄm laiku manuÄli.
AnalizÄsim:
ā valodai specifiski rÄdÄ«tÄji, jo Ä«paÅ”i php-fpm darbinieki;
ā Sentry kļūdas;
ā atbildes statusi;
ā atbildes laiks, precÄ«zs un vidÄjais;
ā latentums;
ā izÅÄmumi, apstrÄdÄti un neapstrÄdÄti;
ā produkta rÄdÄ«tÄji.
SaspieÅ”anas pÄrbaude
IzspieÅ”anas testÄÅ”anu sauc arÄ« par āsaspiežesā testÄÅ”anu. Tehnikas nosaukums tika ieviests Netflix. TÄs bÅ«tÄ«ba ir tÄda, ka vispirms mÄs piepildÄm vienu instanci ar reÄlu trafiku lÄ«dz atteices punktam un tÄdÄjÄdi nosakÄm tÄs ierobežojumu. PÄc tam pievienojam vÄl vienu gadÄ«jumu un ielÄdÄjam Å”o pÄri - atkal maksimÄli; mÄs redzam to griestus un deltu ar pirmo āsaspiedienuā. Un tÄpÄc mÄs savienojam vienu gadÄ«jumu un aprÄÄ·inÄm izmaiÅu modeli.
PÄrbaudes dati, izmantojot āsaspieÅ”anuā, ieplÅ«st arÄ« kopÄjÄ metrikas datu bÄzÄ, kur mÄs vai nu bagÄtinÄm mÄkslÄ«gÄs slodzes rezultÄtus ar tiem, vai pat aizstÄjam ar tiem āsintÄtikuā.
RažoŔana
ā¢ MÄrogoÅ”ana. Kad mÄs izvÄrÅ”am pakalpojumu uz ražoÅ”anu, mÄs uzraugÄm, kÄ tas tiek mÄrogots. MÅ«su pieredze liecina, ka tikai CPU indikatoru uzraudzÄ«ba ir neefektÄ«va. AutomÄtiskÄ mÄrogoÅ”ana ar RPS etalonuzdevumu tÄ«rÄ veidÄ darbojas, taÄu tikai noteiktiem pakalpojumiem, piemÄram, tieÅ”saistes straumÄÅ”anai. TÄpÄc vispirms aplÅ«kojam lietojumprogrammas produktu metriku.
TÄ rezultÄtÄ, mÄrogojot, mÄs analizÄjam:
- CPU un RAM indikatori,
ā pieprasÄ«jumu skaits rindÄ,
- reakcijas laiks,
ā prognoze, pamatojoties uz uzkrÄtajiem vÄsturiskajiem datiem.
MÄrogojot pakalpojumu, ir svarÄ«gi arÄ« uzraudzÄ«t tÄ atkarÄ«bas, lai netiktu mÄrogots pirmais pakalpojums Ä·ÄdÄ un tie, kuriem tas piekļūst, slodzes laikÄ neizdodas. Lai noteiktu pieÅemamu slodzi visam pakalpojumu kopumam, mÄs aplÅ«kojam ātuvÄkÄā atkarÄ«gÄ pakalpojuma vÄsturiskos datus (pamatojoties uz CPU un RAM indikatoru kombinÄciju kopÄ ar lietotnei specifiskiem rÄdÄ«tÄjiem) un salÄ«dzinÄm tos ar vÄsturiskajiem datiem. inicializÄcijas pakalpojumu un tÄ tÄlÄk visÄ āatkarÄ«bas Ä·ÄdÄā no augÅ”as uz leju.
Pakalpojums
PÄc mikropakalpojuma nodoÅ”anas ekspluatÄcijÄ varam tam piestiprinÄt trigerus.
Å eit ir aprakstÄ«tas tipiskas situÄcijas, kurÄs notiek trigeri.
ā KonstatÄtas potenciÄli bÄ«stamas migrÄcijas.
ā Ir izlaisti droŔības atjauninÄjumi.
ā Pats pakalpojums jau sen nav atjauninÄts.
ā Pakalpojuma slodze ir ievÄrojami samazinÄjusies vai daži tÄ produktu rÄdÄ«tÄji ir Ärpus normÄlÄ diapazona.
ā Pakalpojums vairs neatbilst jaunajÄm platformas prasÄ«bÄm.
Daži no trigeriem ir atbildÄ«gi par darbÄ«bas stabilitÄti, daži - kÄ sistÄmas uzturÄÅ”anas funkcija - piemÄram, kÄds pakalpojums nav bijis ilgstoÅ”i izvietots un tÄ bÄzes attÄls vairs neiztur droŔības pÄrbaudes.
MÄrinstrumentu panelis
ÄŖsÄk sakot, informÄcijas panelis ir visa mÅ«su PaaS vadÄ«bas panelis.
Vienots informÄcijas punkts par pakalpojumu, ar datiem par tÄ testa pÄrklÄjumu, tÄ attÄlu skaitu, ražoÅ”anas kopiju skaitu, versijÄm utt.
RÄ«ks datu filtrÄÅ”anai pÄc pakalpojumiem un etiÄ·etÄm (piederÄ«bas marÄ·ieri biznesa vienÄ«bÄm, produktu funkcionalitÄte utt.)
RÄ«ks integrÄcijai ar infrastruktÅ«ras rÄ«kiem izsekoÅ”anas, reÄ£istrÄÅ”anas un uzraudzÄ«bas veikÅ”anai.
Viena dienesta dokumentÄcija.
Vienots skats uz visiem notikumiem visos pakalpojumos.
KopÄ
Pirms PaaS ievieÅ”anas jauns izstrÄdÄtÄjs varÄtu pavadÄ«t vairÄkas nedÄļas, lai izprastu visus rÄ«kus, kas nepiecieÅ”ami mikropakalpojuma palaiÅ”anai ražoÅ”anÄ: Kubernetes, Helm, mÅ«su iekÅ”ÄjÄs TeamCity funkcijas, savienojumu ar datu bÄzÄm un keÅ”atmiÅÄm iestatÄ«Å”ana kļūmju izturÄ«gÄ veidÄ utt. aizÅem pÄris stundas, lai izlasÄ«tu Ä«so pamÄcÄ«bu un izveidotu paÅ”u pakalpojumu.
Es sniedzu ziÅojumu par Å”o tÄmu HighLoad++ 2018, jÅ«s varat to noskatÄ«ties Video Šø prezentÄcija.
Bonusa celiÅÅ” tiem, kas izlasÄ«ja lÄ«dz galam
MÄs Avito organizÄjam iekÅ”Äjas trÄ«s dienu apmÄcÄ«bas izstrÄdÄtÄjiem no plkst Kriss RiÄardsons, eksperts mikropakalpojumu arhitektÅ«rÄ. VÄlamies dot iespÄju tajÄ piedalÄ«ties kÄdam no Ŕī ieraksta lasÄ«tÄjiem. Å eit ApmÄcÄ«bu programma ir publicÄta.
ApmÄcÄ«bas notiks no 5. lÄ«dz 7. augustam MaskavÄ. Å Ä«s ir darba dienas, kas bÅ«s pilnÄ«bÄ aizÅemtas. Pusdienas un apmÄcÄ«bas bÅ«s mÅ«su birojÄ, un izvÄlÄtais dalÄ«bnieks pats apmaksÄs ceļa izdevumus un izmitinÄÅ”anu.
Var pieteikties dalÄ«bai Å”ajÄ google formÄ. No Tevis ā atbilde uz jautÄjumu, kÄpÄc jÄapmeklÄ apmÄcÄ«bas un informÄcija, kÄ ar Tevi sazinÄties. Atbildi angliski, jo Kriss pats izvÄlÄsies dalÄ«bnieku, kurÅ” apmeklÄs apmÄcÄ«bu.
ApmÄcÄ«bu dalÄ«bnieka vÄrdu paziÅosim Ŕī ieraksta atjauninÄjumÄ un sociÄlajos tÄ«klos Avito izstrÄdÄtÄjiem (AvitoTech in Š¤ŠµŠ¹ŃŠ±ŃŠŗŠµ, Vkontakte, ÄivinÄt) ne vÄlÄk kÄ lÄ«dz 19. jÅ«lijam.