Mikropakalpojumi: izmÄram ir nozÄ«me, pat ja jums ir Kubernetes
19. septembrÄ« MaskavÄ notika pirmÄ tematiskÄ tikÅ”anÄs HUG (Highload++ User Group), kas bija veltÄ«ta mikropakalpojumiem. Notika prezentÄcija āOperating Microservices: Size Matters, Even If You Have Kubernetesā, kurÄ dalÄ«jÄmies ar Flant plaÅ”o pieredzi projektu vadÄ«Å”anÄ ar mikropakalpojumu arhitektÅ«ru. PirmkÄrt, tas noderÄs visiem izstrÄdÄtÄjiem, kuri domÄ par Ŕīs pieejas izmantoÅ”anu savÄ esoÅ”ajÄ vai topoÅ”ajÄ projektÄ.
IepazÄ«stinÄm reportÄžas video (50 minÅ«tes, daudz informatÄ«vÄks par rakstu), kÄ arÄ« galvenais izraksts no tÄ teksta formÄ.
NB: Video un prezentÄcija ir pieejama arÄ« Ŕīs ziÅas beigÄs.
Ievads
Parasti labam stÄstam ir sÄkums, galvenais sižets un atrisinÄjums. Å is ziÅojums ir vairÄk kÄ prelÅ«dija, turklÄt traÄ£iska. Ir arÄ« svarÄ«gi atzÄ«mÄt, ka tas sniedz nepiederoÅ”u skatÄ«jumu uz mikropakalpojumiem. ekspluatÄcija.
SÄkÅ”u ar Å”o grafiku, kura autors (2015.g.) bija MÄrtiÅÅ” Faulers:
Tas parÄda, kÄ monolÄ«ta lietojuma gadÄ«jumÄ, kas sasniedz noteiktu vÄrtÄ«bu, produktivitÄte sÄk kristies. Mikropakalpojumi atŔķiras ar to, ka sÄkotnÄjÄ produktivitÄte ar tiem ir zemÄka, taÄu, pieaugot sarežģītÄ«bai, efektivitÄtes degradÄcija tiem nav tik jÅ«tama.
Es pievienoÅ”u Å”ai diagrammai Kubernetes izmantoÅ”anas gadÄ«jumÄ:
KÄpÄc lietojumprogramma ar mikropakalpojumiem ir labÄka? Jo Å”Äda arhitektÅ«ra izvirza nopietnas prasÄ«bas arhitektÅ«rai, kuras savukÄrt lieliski nosedz Kubernetes iespÄjas. No otras puses, daļa no Ŕīs funkcionalitÄtes noderÄs monolÄ«tam, jo āāÄ«paÅ”i tÄpÄc, ka mÅ«sdienu tipiskais monolÄ«ts nav gluži monolÄ«ts (sÄ«kÄka informÄcija bÅ«s vÄlÄk ziÅojumÄ).
KÄ redzat, galÄ«gais grafiks (kad Kubernetes infrastruktÅ«rÄ atrodas gan monolÄ«tÄs, gan mikropakalpojumu lietojumprogrammas) Ä«paÅ”i neatŔķiras no sÄkotnÄjÄ. TÄlÄk mÄs runÄsim par lietojumprogrammÄm, kas darbojas, izmantojot Kubernetes.
Noderīgi un kaitīgi mikropakalpojumi
Un Å”eit ir galvenÄ doma:
Kas ir normÄli mikropakalpojumu arhitektÅ«ra? Tam vajadzÄtu dot jums reÄlus ieguvumus, palielinot jÅ«su darba efektivitÄti. Ja mÄs atgriežamies pie grafika, tas ir:
Ja tu viÅai piezvani noderÄ«ga, tad grafika otrÄ pusÄ bÅ«s kaitÄ«gs mikropakalpojumi (traucÄ darbu):
Atgriežoties pie āgalvenÄs domasā: vai man vispÄr vajadzÄtu uzticÄties savai pieredzei? KopÅ” Ŕī gada sÄkuma esmu skatÄ«jies 85 projekti. Ne visi no tiem bija mikropakalpojumi (apmÄram treÅ”daļai lÄ«dz pusei no tiem bija Å”Äda arhitektÅ«ra), taÄu tas joprojÄm ir liels skaits. Mums (Flant company) kÄ Ärpakalpojumu sniedzÄjiem izdodas redzÄt ļoti dažÄdas aplikÄcijas izstrÄdÄtas gan mazos uzÅÄmumos (ar 5 izstrÄdÄtÄjiem), gan lielajos (~500 izstrÄdÄtÄju). Papildu ieguvums ir tas, ka mÄs redzam Ŕīs lietojumprogrammas tieÅ”raidÄ un attÄ«stÄs gadu gaitÄ.
KÄpÄc mikropakalpojumi?
Uz jautÄjumu par mikropakalpojumu priekÅ”rocÄ«bÄm ir ļoti konkrÄta atbilde no jau pieminÄtÄ MÄrtina Faulera:
skaidras modularitÄtes robežas;
neatkarīga izvietoŔana;
brÄ«vÄ«ba izvÄlÄties tehnoloÄ£ijas.
Esmu daudz runÄjis ar programmatÅ«ras arhitektiem un izstrÄdÄtÄjiem un jautÄjis, kÄpÄc viÅiem nepiecieÅ”ami mikropakalpojumi. Un es izveidoju savu sarakstu ar viÅu cerÄ«bÄm. LÅ«k, kas notika:
Ja mÄs aprakstam dažus punktus āsajÅ«tÄsā, tad:
skaidras moduļu robežas: Å”eit mums ir baigais monolÄ«ts, un tagad viss bÅ«s glÄ«ti sakÄrtots Git krÄtuvÄs, kurÄs viss ir āpa plauktiÅiemā, siltais un mÄ«kstais nav sajaukts;
izvietoÅ”anas neatkarÄ«ba: pakalpojumus varÄsim ieviest neatkarÄ«gi, lai attÄ«stÄ«ba noritÄtu ÄtrÄk (paralÄli publicÄjiet jaunas iespÄjas);
attÄ«stÄ«bas neatkarÄ«ba: mÄs varam dot Å”o mikropakalpojumu vienai komandai/izstrÄdÄtÄjam, bet vienu otrai, pateicoties tam, mÄs varam attÄ«stÄ«ties ÄtrÄk;
Š±Š¾lielÄka uzticamÄ«ba: ja notiek daļÄja degradÄcija (viens mikropakalpojums no 20 kritieniem), tad tikai viena poga pÄrtrauks darboties, un sistÄma kopumÄ turpinÄs darboties.
Tipiska (kaitīga) mikropakalpojumu arhitektūra
Lai izskaidrotu, kÄpÄc realitÄte nav tÄda, kÄdu mÄs sagaidÄm, es iepazÄ«stinÄÅ”u kolektÄ«vs mikropakalpojumu arhitektÅ«ras attÄls, kas balstÄ«ts uz daudzu un dažÄdu projektu pieredzi.
PiemÄrs varÄtu bÅ«t abstrakts tieÅ”saistes veikals, kas gatavojas konkurÄt ar Amazon vai vismaz OZON. TÄ mikropakalpojumu arhitektÅ«ra izskatÄs Å”Ädi:
VairÄku iemeslu dÄļ Å”ie mikropakalpojumi ir rakstÄ«ti dažÄdÄs platformÄs:
TÄ kÄ katram mikropakalpojumam ir jÄbÅ«t autonomam, daudziem no tiem ir nepiecieÅ”ama sava datu bÄze un keÅ”atmiÅa. GalÄ«gÄ arhitektÅ«ra ir Å”Äda:
KÄdas ir tÄ sekas?
Fauleram arÄ« tas ir ir raksts ā par āsamaksuā par mikropakalpojumu izmantoÅ”anu:
Un mÄs redzÄsim, vai mÅ«su cerÄ«bas piepildÄ«jÄs.
Skaidras moduļu robežas...
Bet cik daudz mikropakalpojumu mums patiesÄ«bÄ ir jÄlabo?ieviest izmaiÅas? Vai mÄs vispÄr varam izdomÄt, kÄ viss darbojas bez izplatÄ«ta izsekotÄja (galu galÄ jebkuru pieprasÄ«jumu apstrÄdÄ puse mikropakalpojumu)?
Ir modelis"liels netÄ«rumu kamolsā, un Å”eit tas izrÄdÄ«jÄs izkliedÄts netÄ«rumu kamols. Lai to apstiprinÄtu, Å”eit ir sniegts aptuvens pieprasÄ«jumu izpildes piemÄrs.
IzvÄrÅ”anas neatkarÄ«ba...
Tehniski tas ir sasniegts: mÄs varam izvÄrst katru mikropakalpojumu atseviŔķi. Bet praksÄ jÄÅem vÄrÄ, ka tas vienmÄr izrullÄ daudzi mikropakalpojumi, un mums tas ir jÄÅem vÄrÄ to izlaiÅ”anas secÄ«ba. LabÄ nozÄ«mÄ, mums parasti ir jÄpÄrbauda atseviÅ”Ä·Ä Ä·ÄdÄ, vai mÄs izlaižam laidienu pareizÄ secÄ«bÄ.
TehnoloÄ£iju izvÄles brÄ«vÄ«ba...
ViÅa ir. VienkÄrÅ”i atcerieties, ka brÄ«vÄ«ba bieži robežojas ar nelikumÄ«bÄm. Å eit ir ļoti svarÄ«gi neizvÄlÄties tehnoloÄ£ijas, lai tikai ar tÄm āspÄlÄtosā.
Attīstības neatkarība...
KÄ izveidot testa cilpu visai lietojumprogrammai (ar tik daudziem komponentiem)? Bet jums tas joprojÄm ir jÄatjaunina. Tas viss noved pie tÄ, ka faktiskais testa Ä·Äžu skaits, ko principÄ varam saturÄt, izrÄdÄs minimÄls.
KÄ bÅ«tu ar to visu izvietoÅ”anu lokÄli?.. IzrÄdÄs, ka bieži vien izstrÄdÄtÄjs savu darbu veic patstÄvÄ«gi, bet āizlases kÄrtÄ«bÄā, jo ir spiests gaidÄ«t, kamÄr Ä·Äde bÅ«s brÄ«va testÄÅ”anai.
AtseviŔķa mÄrogoÅ”ana...
JÄ, bet tas ir ierobežots izmantotÄs DBVS jomÄ. DotajÄ arhitektÅ«ras piemÄrÄ Cassandra problÄmu nebÅ«s, bet MySQL un PostgreSQL radÄ«sies.
ŠŠ¾lielÄka uzticamÄ«ba...
Ne tikai viena mikropakalpojuma kļūme patiesÄ«bÄ bieži vien izjauc visas sistÄmas pareizu darbÄ«bu, bet arÄ« rodas jauna problÄma: ir ļoti grÅ«ti padarÄ«t katru mikropakalpojumu izturÄ«gu pret defektiem. TÄ kÄ mikropakalpojumos tiek izmantotas dažÄdas tehnoloÄ£ijas (memcache, Redis u.c.), tad katram ir viss jÄpÄrdomÄ un jÄievieÅ”, kas, protams, ir iespÄjams, bet prasa milzÄ«gus resursus.
Slodzes izmÄrÄmÄ«ba...
Å is ir patieÅ”Äm labs.
Mikropakalpojumu "vieglums"...
Mums ir ne tikai milzÄ«gi tÄ«kla pieskaitÄmÄs izmaksas (DNS pieprasÄ«jumi vairojas utt.), bet arÄ« daudzo uzsÄkto apakÅ”vaicÄjumu dÄļ replicÄt datus (veikala keÅ”atmiÅas), kas radÄ«ja ievÄrojamu krÄtuves apjomu.
Un lÅ«k, mÅ«su cerÄ«bu piepildÄ«juma rezultÄts:
Bet tas vÄl nav viss!
Jo:
VisticamÄk, mums bÅ«s nepiecieÅ”ams ziÅojumu autobuss.
KÄ izveidot konsekventu dublÄjumu Ä«stajÄ brÄ«dÄ«? VienÄ«gais Ä«sts iespÄja ir izslÄgt satiksmi Å”im nolÅ«kam. Bet kÄ to izdarÄ«t ražoÅ”anÄ?
Ja runÄjam par vairÄku reÄ£ionu atbalstu, tad ilgtspÄjas organizÄÅ”ana katrÄ no tiem ir ļoti darbietilpÄ«gs uzdevums.
Rodas problÄma veikt centralizÄtas izmaiÅas. PiemÄram, ja mums ir jÄatjaunina PHP versija, mums bÅ«s jÄiesaistÄs katrÄ repozitorijÄ (un to ir desmitiem).
DarbÄ«bas sarežģītÄ«bas pieaugums ir eksponenciÄls.
Ko darīt ar Ŕo visu?
SÄciet ar monolÄ«tu aplikÄciju. Faulera pieredze saka ka gandrÄ«z visas veiksmÄ«gÄs mikropakalpojumu lietojumprogrammas sÄkÄs kÄ monolÄ«ts, kas kļuva pÄrÄk liels un pÄc tam tika salauzts. TajÄ paÅ”Ä laikÄ gandrÄ«z visÄs sistÄmÄs, kas no paÅ”a sÄkuma tika izveidotas kÄ mikropakalpojumi, agrÄk vai vÄlÄk radÄs nopietnas problÄmas.
VÄl viena vÄrtÄ«ga doma ir tÄda, ka, lai projekts ar mikropakalpojumu arhitektÅ«ru bÅ«tu veiksmÄ«gs, jums tas ir ļoti labi jÄzina un priekÅ”metu joma, kÄ arÄ« to, kÄ izveidot mikropakalpojumus. Un labÄkais veids, kÄ apgÅ«t mÄcÄ«bu priekÅ”metu jomu, ir izgatavot monolÄ«tu.
Bet ko darÄ«t, ja mÄs jau esam Å”ajÄ situÄcijÄ?
Pirmais solis jebkuras problÄmas risinÄÅ”anÄ ir tai piekrist un saprast, ka tÄ ir problÄma, ka mÄs vairs nevÄlamies ciest.
Ja aizauguÅ”a monolÄ«ta gadÄ«jumÄ (kad ir beigusies iespÄja tam iegÄdÄties papildu resursus) mÄs to nogriežam, tad Å”ajÄ gadÄ«jumÄ iznÄk pretÄjs stÄsts: kad pÄrmÄrÄ«gie mikropakalpojumi vairs nepalÄ«dz, bet traucÄ - nogriezt lieko un palielinÄt!
AtbrÄ«vojieties no visvairÄk apÅ”aubÄmajiem mikropakalpojumiem:
Apvienojiet visus mikropakalpojumus, kas ir atbildÄ«gi par priekÅ”gala Ä£enerÄÅ”anu:
... vienÄ mikropakalpojumÄ, kas rakstÄ«ts vienÄ (mÅ«sdienÄ«gÄ un normÄlÄ, kÄ jÅ«s pats domÄjat) valodÄ/ietvarÄ:
Tam būs viens ORM (viena DBVS) un vispirms dažas lietojumprogrammas:
... bet kopumÄ tur var pÄrsÅ«tÄ«t daudz vairÄk, iegÅ«stot Å”Ädu rezultÄtu:
TurklÄt Kubernetes mÄs to visu palaižam atseviŔķos gadÄ«jumos, kas nozÄ«mÄ, ka mÄs joprojÄm varam izmÄrÄ«t slodzi un mÄrogot tos atseviŔķi.
Apkopot
Paskaties uz lielÄku attÄlu. Ä»oti bieži visas Ŕīs problÄmas ar mikropakalpojumiem rodas tÄpÄc, ka kÄds uzÅÄmÄs savu uzdevumu, bet gribÄja āspÄlÄties ar mikropakalpojumiemā.
VÄrdÄ "mikropakalpojumi" daļa "mikro" ir lieka.. Tie ir āmikroā tikai tÄpÄc, ka ir mazÄki par milzÄ«gu monolÄ«tu. Bet neuzskatiet tos par kaut ko mazu.
Un, lai iegÅ«tu pÄdÄjo domu, atgriezÄ«simies pie sÄkotnÄjÄs diagrammas:
Uz tÄ uzrakstÄ«ta piezÄ«me (augÅ”ÄjÄ labajÄ pusÄ) ir saistÄ«ts ar faktu, ka komandas, kas veido jÅ«su projektu, prasmes vienmÄr ir primÄras ā tiem bÅ«s galvenÄ loma jÅ«su izvÄlÄ starp mikropakalpojumiem un monolÄ«tu. Ja komandai nepietiks prasmju, bet tÄ sÄks veidot mikropakalpojumus, stÄsts noteikti bÅ«s liktenÄ«gs.
Videoklipi un slaidi
Video no runas (~50 minÅ«tes; diemžÄl neizskan daudzÄs apmeklÄtÄju emocijas, kas lielÄ mÄrÄ noteica reportÄžas noskaÅu, bet tÄ nu tas ir):