Hej, Habr! Jeg prĂŠsenterer for dig en autoriseret oversĂŠttelse af artiklen .

I en tid, hvor IT-verdenen gradvist overgÄr til mikrotjenester og vÊrktÞjer som Kubernetes, bliver et problem mere og mere synligt. Dette problem er af versioner af mikrotjenester. IT-fÊllesskabet mener dog, at den nuvÊrende situation er betydeligt bedre end fra den tidligere generation af teknologier. Ikke desto mindre er versioneringsstyring af mikrotjenester et meget komplekst problem. Et eksempel pÄ dette kan ses i artikler som .
Hvis du, mens du lĂŠser denne tekst, ikke forstĂ„r problemet, lad mig forklare det. Antag, at dit produkt bestĂ„r af 10 mikrotjenester. Lad os nu antage, at der for hver af disse mikrotjenester udgives 1 ny version. Kun 1 version â jeg hĂ„ber, vi alle kan blive enige om, at dette er et ganske trivielt og ubetydeligt faktum. Men lad os se en gang til pĂ„ vores produkt. Med kun Ă©n ny version af hver komponent, har vi nu 2^10 â eller 1024 permutationer af, hvordan vi kan sammensĂŠtte vores produkt.
Hvis der stadig er nogen forvirring, lad mig bryde matematikken ned. SĂ„ vi har 10 mikrotjenester, hver fĂ„r en opdatering. Det vil sige, at vi fĂ„r 2 mulige versioner for hver mikrotjeneste (enten den gamle eller den nye). Nu har vi for hver af produktkomponenterne mulighed for at bruge en af disse to versioner. MatematikmĂŠssigt er det det samme som at have et binĂŠrt tal med 10 cifre. For eksempel, lad os sige, at 1 er den nye version, og 0 er den gamle version â sĂ„ kan en mulig permutation reprĂŠsenteres som 1001000000 â hvor 1. og 4. komponent er opdateret, mens alle de andre ikke er. Fra matematikkens perspektiv ved vi, at et binĂŠrt tal med 10 cifre kan have 2^10 eller 1024 vĂŠrdier. Det vil sige, at vi har bekrĂŠftet omfanget af det tal, vi har med at gĂžre.
Lad os fortsĂŠtte med overvejelserne â hvad sker der, hvis vi har 100 mikrotjenester og hver har 10 mulige versioner? Hele situationen bliver meget ubehagelig â nu har vi 10^100 permutationer â og det er et kĂŠmpestort tal. Ikke desto mindre foretrĂŠkker jeg at omtale denne situation pĂ„ denne mĂ„de, fordi nu skjuler vi os ikke bag ord som »kubernetes«, men konfronterer problemet som det er.
Hvorfor fascinerer dette problem mig sĂ„ meget? Dels fordi vi tidligere i verden af NLP og AI diskuterede problemet med den kombinatoriske eksplosion for 5-6 Ă„r siden. I stedet for versioner havde vi separate ord, og i stedet for produkter havde vi sĂŠtninger og afsnit. Selvom problemerne inden for NLP og AI i hĂžj grad stadig stĂ„r uafklaret, mĂ„ det erkendes, at der er gjort betydelige fremskridt de seneste Ă„r. (efter min mening kunne fremskridtene vĂŠre stĂžrre,fleste afhvis folk i branchen havde givet lidt mindre opmĂŠrksomhed til maskinlĂŠring og lidt mere til andre teknikker â men det er et off-topic emne).
Lad os vende tilbage til verdenen af DevOps og mikroservices. Vi stĂ„r over for et stort problem, der gemmer sig som en elefant i et ammunitionslager â for hvad jeg ofte hĂžrer er: "bare tag Kubernetes og Helm, sĂ„ bliver alt godt!" Men nej, alt bliver ikke godt, hvis man lader det stĂ„, som det er. Desuden synes det analytiske svar pĂ„ dette problem ikke acceptable givet kompleksiteten. Ligesom med NLP skal vi fĂžrst nĂŠrme os dette problem ved at indsnĂŠvre sĂžgeomrĂ„det â i dette tilfĂŠlde ved at udelukke forĂŠldede permutationer.
En af de ting, der kan hjĂŠlpe â jeg skrev i sidste Ă„r Det er ogsĂ„ vigtigt at bemĂŠrke, at en veludviklet CI/CD-proces meget hjĂŠlper med at reducere variationer. Dog er den nuvĂŠrende tilstand for CI/CD ikke tilstrĂŠkkelig god til at lĂžse problemet med permutationer uden yderligere vĂŠrktĂžjer til at holde styr pĂ„ og fĂžlge komponenter.
Hvad vi har brug for, er et eksperimenteringssystem pĂ„ integrationsstadiet, hvor vi kunne fastslĂ„ risikofaktoren for hver komponent og ogsĂ„ have en automatiseret proces til opdatering af forskellige komponenter og test uden operatĂžrens indblanding â for at se, hvad der fungerer, og hvad der ikke gĂžr.
Et sÄdant eksperimenteringssystem kunne se sÄledes ud:
- Udviklerne skriver tests (dette er et kritisk trin â for ellers har vi ikke kriteriet for evaluering â det svarer til datamĂŠrkning i maskinlĂŠring).
- Hver komponent (projekt) fĂ„r sit eget CI-system â denne proces er i dag veludviklet, og spĂžrgsmĂ„let om at skabe et CI-system for en enkelt komponent er derfor stort set lĂžst.
- «Smart integration system» samler resultater fra forskellige CI-systemer og kompilere projektkomponenter til det endelige produkt, udfĂžrer test og beregner til sidst den korteste vej til at opnĂ„ den Ăžnskede funktionalitet i produktet baseret pĂ„ eksisterende komponenter og risikofaktorer. Hvis en opdatering ikke er muligt, informerer dette system udviklerne om de tilgĂŠngelige komponenter, og hvor fejl opstĂ„r. Jeg vil igen understrege, at testsystemet her er af kritisk betydning â da integrationssystemet bruger tests som vurderingskriterium.
- CD-systemet, som derefter modtager data fra «Smart integration system» og udfÞrer opdateringen. Denne fase afslutter cyklussen.
Sammenfattende er en af mine stĂžrste udfordringer lige nu manglen pĂ„ et sĂ„dant «Smart integration system», der kan forbinde forskellige komponenter i produktet og derved muliggĂžre sporing af, hvordan produktet generelt er sammensat. Jeg ville vĂŠre interesseret i samfundets tanker om dette (spoiler â jeg arbejder i Ăžjeblikket pĂ„ et projekt , der kan blive et sĂ„dant smarte integrationssystem).
En sidste ting, jeg vil nĂŠvne, er, at for mig er monolitter ikke acceptable for ethvert projekt af mellem stĂžrrelse. Jeg er meget skeptisk over for forsĂžg pĂ„ at forkorte tiden til levering og kvaliteten af udviklingen ved at vende tilbage til monolitten. For det fĂžrste har monolitten et lignende problem med komponentadministration â blandt de forskellige biblioteker, den bestĂ„r af, men dette er ikke sĂ„ synligt og viser sig primĂŠrt i den tid, udviklerne bruger. FĂžlgen af monolithproblemet er den praktiske umulighed af at foretage ĂŠndringer i koden â og en ekstremt langsom udviklingshastighed.
Mikrotjenester forbedrer situationen, men derefter stĂ„r mikroservicearkitekturen over for problemet med kombinatorisk eksplosion i integrationsfasen. Ja, generelt har vi flyttet det samme problem â fra udviklingsfasen til integrationsfasen. Men efter min mening fĂžrer mikroservice-tilgangen stadig til bedre resultater, og teams nĂ„r resultater hurtigere (sandsynligvis primĂŠrt pĂ„ grund af reducering af stĂžrrelsen pĂ„ udviklingsenheden â eller batch size). Men overgangen fra monolit til mikrotjenester har endnu ikke givet en tilstrĂŠkkelig forbedring af processen â den kombinatoriske eksplosion af versioner af mikrotjenester er et enormt problem, og vi har et stort forbedringspotentiale, efterhĂ„nden som vi lĂžser dette.
Kilde: habr.com
