Ko mēs zinām par mikropakalpojumiem

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).

Ko mēs zinām par mikropakalpojumiem

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.

Ko mēs zinām par mikropakalpojumiem

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.

Ko mēs zinām par mikropakalpojumiem

Kā pārvarēt "mikropakalpojumu sadrumstalotības" laikmetu

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.

Ko mēs zinām par mikropakalpojumiem

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?

Kopumā mikropakalpojumu izveides ķēde izskatās Ŕādi:

CLI-push ā†’ Nepārtraukta integrācija ā†’ CepÅ”ana ā†’ IzvietoÅ”ana ā†’ MākslÄ«gie testi ā†’ Kanāriju testi ā†’ SaspieÅ”anas pārbaude ā†’ RažoÅ”ana ā†’ Apkope.

Iziesim cauri tieŔi Ŕādā secībā.

CLI-push

ā€¢ 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:

ā€” paÅ”as diagrammas;
ā€” veidnes;
ā€” Ä«paÅ”as vērtÄ«bas, ņemot vērā dažādas vides.

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ā.

Ko mēs zinām par mikropakalpojumiem

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.

  • Lietojumprogrammas veidoÅ”ana. Pēc klasikas - Docker attēlā.
  • 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).

Ko mēs zinām par mikropakalpojumiem

Izpildes laiks, mazāk ir labāk. Maksimums: 643 ms, minimālais: 42 ms. Fotoattēls ir noklikŔķināms.

Ko mēs zinām par mikropakalpojumiem

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.

Ko mēs zinām par mikropakalpojumiem
Ko mēs zinām par mikropakalpojumiem
Ko mēs zinām par mikropakalpojumiem
Ko mēs zinām par mikropakalpojumiem

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.

Avots: www.habr.com

Pievieno komentāru