Mikroteenused — versioonide kombinatoorne plahvatus

Tere, Habr! Esitleme teile autoriteetse tĂ”lke artiklit Mikroteenused – kombinatoorne versioonide plahvatus.
Mikroteenused — versioonide kombinatoorne plahvatus
Aegadel, mil IT-maailm ĂŒha enam mikroteenustele ja sellistele tööriistadele nagu Kubernetes ĂŒle lĂ€heb, muutub ĂŒhe probleem jĂ€rjest silmatorkavamaks. See probleem on kombinatoorne plahvatus mikroteenuste versioonidest. Sellegipoolest arvab IT-kogukond, et tĂ€nane olukord on oluliselt parem kui „SĂ”ltuvuse pĂ”rgu“ eelmistest tehnoloogiate pĂ”lvkondadest. Siiski on mikroteenuste versioonide haldamine ĂŒsna keeruline probleem. Üheks tĂ”endiks selle kohta vĂ”ivad olla artiklid nagu „Tooge mulle tagasi mu monoliit“.

Kui te ei saa selle teksti lugedes ikka veel probleemist aru, siis laske mul selgitada. Oletame, et teie toode koosneb 10 mikroteenusest. NĂŒĂŒd oletame, et igaĂŒhele neist mikroteenustest tuleb 1 uus versioon. Ainult 1 versioon – loodan, et me kĂ”ik saame kokku leppida, et see on ĂŒsna triviaalne ja mĂ€rkamatu fakt. Kuid vaatame nĂŒĂŒd meie toodet veel kord. Iga komponendi uue versiooniga on meil nĂŒĂŒd 2^10 – ehk 1024 permutatsiooni, kuidas meie toodet kokku panna.

Kui endiselt on arusaamatus, laske mul matemaatikat lahti seletada. Nii et meil on 10 mikroteenust, igaĂŒhel uus uuendus. See tĂ€hendab, et saame 2 vĂ”imaliku versiooni igale mikroteenusele (kas vana vĂ”i uus). NĂŒĂŒd saame iga toote komponenti kasutama nende kahe versiooni sĂ”ltumatu kombinatsiooni. Matemaatiliselt on see sama mis terane number 10 numbriga. NĂ€iteks, ĂŒtleme, et 1 on uus versioon ja 0 vana versioon – siis vĂ”ib ĂŒks vĂ”imalik permutatsiooni olla tĂ€histatud kui 1001000000 – kus 1. ja 4. komponent on uuendatud, samas kui kĂ”ik teised pole. Matemaatikast teame, et terane number 10 numbriga vĂ”ib omada 2^10 vĂ”i 1024 vÀÀrtust. See tĂ€hendab, et me oleme kinnitanud, kui suur on number, millega tegeleme.

JĂ€tkame mĂ”tisklemist – mis juhtub, kui meil on 100 mikroteenust ja igal ĂŒhel 10 vĂ”imalikku versiooni? Kogu olukord muutub ĂŒsna ebameeldivaks – nĂŒĂŒd on meil 10^100 permutatsiooni – see on tohutu number. Sellegipoolest eelistan ma seda olukorda tĂ€pselt nii nimetada, sest nĂŒĂŒd ei peida me end selliste sĂ”nade taha nagu „kubernetes“, vaid kohtume probleemiga silmitsi, nagu see on.

Miks mind see probleem nii palju paelub? Osaliselt seetĂ”ttu, et töötasin varem NLP ja AI vallas, arutasime me combinatoorse plahvatuse probleemi umbes 5-6 aastat tagasi. Ainult et versioonide asemel olid meil eraldi sĂ”nad ja toodete asemel laused ning lĂ”igud. Kuigi NLP ja AI probleemid jÀÀvad suuresti lahendamata, tuleb tunnistada, et viimase paarina aasta jooksul on tehtud mĂ€rkimisvÀÀrset edusammu. (minu arvates oleks edusamm olnudilotkasuurem, kui tööstuse inimesed oleksid veidi vĂ€hem tĂ€helepanu pööranud masinĂ”ppele ja veidi rohkem teistele tehnikatele — aga see on juba off-topic).

JĂ”uan tagasi DevOpsi ja mikroteenuste maailma. Meie ees seisab tohutu probleem, mis peidab end nagu elevant Kunstkamera — sest mida ma sageli kuulen — "vĂ”ta lihtsalt kubernetes ja helm ning kĂ”ik on korras!" Aga ei, kĂ”ik ei ole korras, kui jĂ€tta kĂ”ik nagu on. Veelgi enam, selle probleemi analĂŒĂŒtiline lahendus ei tundu vastuvĂ”etav selle keerukuse tĂ”ttu. Nagu NLP-s, tuleb meil kĂ”igepealt lĂ€heneda sellele probleemile otsingu ulatuse kitsendamise kaudu — antud juhul vanade permutatsioonide vĂ€lja jĂ€tmise kaudu.

Üks asi, mis vĂ”iks aidata — kirjutasin eelmisel aastal vajadusest hoida minimaalne hajusus klientidele vĂ€ljastatud versioonide vahel.Samuti on oluline mĂ€rkida, et hĂ€sti kujundatud CI/CD protsess aitab tĂ”esti variatsioone vĂ€hendada. Siiski, tĂ€nane CI/CD olukord ei ole piisavalt hea permutatsioonide probleemi lahendamiseks ilma tĂ€iendava komponentide jĂ€lgimise ja arvestamise tööriistade kasutamiseta.

Mida me vajame, on eksperimentide sĂŒsteem integreerimise etapis, kus vĂ”iksime mÀÀratleda riskiteguri iga komponendi kohta ning samuti omada automatiseeritud protsessi erinevate komponentide vĂ€rskendamiseks ja testimiseks ilma operaatori sekkumiseta — et nĂ€ha, mis töötab ja mis mitte.

Selline eksperimentide sĂŒsteem vĂ”iks vĂ€lja nĂ€ha jĂ€rgmine:

  1. Arendajad kirjutavad teste (see on kriitiline etapp — sest muidu ei ole meil hindamiskriteeriumit — see on just nagu andmete mĂ€rgistamine masinĂ”ppes).
  2. Igal komponendil (projekt) on oma CI sĂŒsteem — see protsess on tĂ€na hĂ€sti vĂ€lja kujundatud ja kĂŒsimus CI sĂŒsteemi loomisel ĂŒhele komponendile on suurel mÀÀral lahendatud.
  3. „Nutikas integreerimissĂŒsteem“ kogub erinevate CI sĂŒsteemide tulemusi ja koondab projekti komponente lĂ”plikku toodet, kĂ€ivitab testimise ning arvutab lĂ”puks vĂ€lja kĂ”ige lĂŒhemad teed toote vajaliku funktsionaalsuse saavutamiseks olemasolevate komponentide ja riskifaktorite alusel. Kui uuendamine ei ole vĂ”imalik, teavitab see sĂŒsteem arendajaid olemasolevatest komponentidest ja millisel neist viga esineb. Kordan veel kord, et testimisĂŒsteem on siin kriitilise tĂ€htsusega — kuna integreerimissĂŒsteem kasutab teste hindamiskriteeriumina.
  4. CD sĂŒsteem, mis seejĂ€rel saadab andmed „Nutika integreerimissĂŒsteemist“ ja viib lĂ€bi otsese uuendamise. See etapp lĂ”petab tsĂŒkli.

KokkuvĂ”ttes on minu jaoks ĂŒks suurimaid probleeme praegu „Nutika integreerimissĂŒsteemi“ puudumine, mis siduks erinevaid komponente tooteks ja vĂ”imaldaks seelĂ€bi jĂ€lgida, kuidas toode tervikuna on koostatud. Mind huvitavad kogukonna mĂ”tted selle kohta (spoiler — töötan praegu projekti kallal Reliza, mis vĂ”ib saada selliseks nutikaks integreerimissĂŒsteemiks).

Viimane asjaolu, mille tahaksin mainida, on see, et minu jaoks ei ole monoliit igasuguste keskmise suurusega projektide jaoks vastuvĂ”etav. Mind paneb suur skeptitsism tagasi tulema monoliidi juurde, et kiirendada rakendamise aega ja arenduse kvaliteeti. Esiteks on monoliidil sarnane probleem komponentide haldamisega — erinevate teekide seas, millest see koosneb, kuid kogu see ei ole nii mĂ€rgatav ja avaldub eelkĂ”ige arendajate kulutatud ajal. Monoliidi probleemid toovad endaga kaasa muudatuste tegemise tegeliku vĂ”imatuse — ja ÀÀrmiselt aeglase arendusprotsessi.

Mikroteenused parandavad olukorda, kuid seejĂ€rel seisab mikroteenuste arhitektuur silmitsi kombinatoorse plahvatuse probleemiga integreerimise etapis. Jah, me oleme pĂ”himĂ”tteliselt sama probleemi nihutanud — arendusetapilt integreerimisetapile. Siiski arvan, et mikroteenuste lĂ€henemine viib siiski paremate tulemusteni ja meeskonnad saavutavad tulemusi kiiremini (tĂ”enĂ€oliselt peamiselt arenduse vĂ€iksemate ĂŒksuste tĂ”ttu — vĂ”i partii suurus). Siiski, ĂŒleminek monoliidilt mikroteenustele ei ole seni andnud piisavat paranemist protsessis — mikroteenuste versioonide kombinatoorne plahvatus on tohutu probleem, ja meil on suur potentsiaal olukorra parandamiseks selle lahendamise kĂ€igus.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster