Hej, Habr! Jag presenterar för er en egen översÀttning av artikeln .

NÀr IT-vÀrlden gradvis övergÄr till mikrotjÀnster och verktyg som Kubernetes blir ett problem allt mer framtrÀdande. Det hÀr problemet Àr av mikrotjÀnsternas versioner. IT-gemenskapen anser ÀndÄ att den nuvarande situationen Àr betydligt bÀttre Àn den tidigare generationens teknologier. Dock Àr versionshantering av mikrotjÀnster en ganska komplicerad frÄga. Ett av bevisen pÄ detta kan ses i artiklar som .
Om du fortfarande inte förstĂ„r problemet, lĂ„t mig förklara. Anta att din produkt bestĂ„r av 10 mikrotjĂ€nster. Anta nu att det för varje av dessa mikrotjĂ€nster slĂ€pps en ny version. Bara en version â jag hoppas att vi alla kan enas om att detta Ă€r en ganska trivial och obetydlig fakta. Men lĂ„t oss titta pĂ„ vĂ„r produkt igen. Med bara en ny version av varje komponent har vi nu 2^10 â eller 1024 permutationer av hur vi kan sĂ€tta ihop vĂ„r produkt.
Om det fortfarande finns oklarheter, lĂ„t mig bryta ner matematiken. SĂ„, vi har 10 mikrotjĂ€nster, varje fĂ„r en uppdatering. Det innebĂ€r att vi fĂ„r 2 möjliga versioner för varje mikrotjĂ€nst (antingen den gamla eller den nya). Nu, för varje komponent i produkten kan vi anvĂ€nda vilken av dessa tvĂ„ versioner vi vill. Matematiskt sett Ă€r detta detsamma som om vi hade ett binĂ€rt tal med 10 tecken. Till exempel, lĂ„t oss sĂ€ga att 1 Ă€r den nya versionen och 0 Ă€r den gamla versionen â sĂ„ kan en möjlig permutation anges som 1001000000 â dĂ€r den 1:a och 4:e komponenten Ă€r uppdaterade, medan alla andra inte Ă€r det. FrĂ„n matematiken vet vi att ett binĂ€rt tal med 10 tecken kan ha 2^10 eller 1024 vĂ€rden. Det betyder att vi har bekrĂ€ftat omfattningen av det antal vi har att göra med.
LĂ„t oss fortsĂ€tta resonemanget â vad hĂ€nder om vi har 100 mikrotjĂ€nster och var och en med 10 möjliga versioner? Hela situationen blir ganska obehaglig â nu har vi 10^100 permutationer â vilket Ă€r ett enormt antal. Men jag föredrar att beskriva denna situation pĂ„ detta sĂ€tt, för nu döljer vi oss inte bakom ord som »kubernetes«, utan konfronterar problemet som det Ă€r.
Vad fascinerar mig sĂ„ mycket med detta problem? Delvis för att jag tidigare arbetat inom NLP och AI, dĂ€r vi diskuterade problemet med kombinatorisk explosion för 5-6 Ă„r sedan. IstĂ€llet för versioner hade vi separata ord, och istĂ€llet för produkter hade vi meningar och stycken. Ăven om NLP- och AI-problemen till stor del fortfarande Ă€r olösta, mĂ„ste man erkĂ€nna att det har gjorts betydande framsteg de senaste Ă„ren. (enligt min Ă„sikt skulle framstegen kunna vara störrebĂ€sta resultatet (subjektiv Ă„sikt).om folk inom branschen Ă€gnade lite mindre uppmĂ€rksamhet Ă„t maskininlĂ€rning och lite mer Ă„t andra tekniker - men det Ă€r en annan diskussion).
Jag ÄtervÀnder till vÀrlden av DevOps och mikrotjÀnster. Vi stÄr inför ett enormt problem, som en elefant i ett konstkabinett - för vad jag ofta hör Àr: "ta bara kubernetes och helm sÄ blir allt bra!" Men nej, allt blir inte bra om vi lÀmnar allt som det Àr. Dessutom verkar en analytisk lösning pÄ detta problem oacceptabel med tanke pÄ komplexiteten. Precis som inom NLP bör vi först nÀrma oss detta problem genom att avgrÀnsa sökomrÄdet - i det hÀr fallet genom att utesluta förÄldrade permutationer.
En av sakerna som kan hjÀlpa - jag skrev förra Äret Det Àr ocksÄ viktigt att notera att en vÀlarbetad CI/CD-process hjÀlper mycket med att minska variationer. Men, dagens tillstÄnd med CI/CD Àr inte tillrÀckligt bra för att lösa permutationsproblemet utan ett extra verktyg för att övervaka och spÄra komponenter.
Vad vi behöver Àr ett experimentellt system under integrationsstadiet, dÀr vi kan definiera riskfaktorer för varje komponent, samt ha en automatiserad process för att uppdatera olika komponenter och testa utan operatörens inblandning - för att se vad som fungerar och vad som inte gör.
Ett sÄdant experimentellt system skulle kunna se ut sÄ hÀr:
- Utvecklare skriver tester (detta Àr en kritisk fas - för annars har vi ingen bedömningskriterium - det Àr precis som datamÀrkning inom maskininlÀrning).
- Varje komponent (projekt) fÄr sitt eget CI-system - den hÀr processen Àr idag vÀlarbetad, och frÄgan om att skapa ett CI-system för en enskild komponent Àr till stor del löst.
- Den "Intelligenta integrationssystemet" samlar resultat frÄn olika CI-system och sÀtter samman projektkomponenter till en slutprodukt, utför tester och berÀknar slutligen den kortaste vÀgen för att uppnÄ önskad produktfunktionalitet utifrÄn befintliga komponenter och riskfaktorer. Om en uppdatering inte Àr möjlig, varnar systemet utvecklarna om de befintliga komponenterna och vilken av dem som har ett fel. Jag vill Äterigen understryka att testsystemet hÀr Àr av avgörande betydelse, eftersom integrationssystemet anvÀnder tester som utvÀrderingskriterier.
- CD-systemet som sedan tar emot data frÄn den "Intelligenta integrationssystemet" och utför sjÀlva uppdateringen. Detta steg avslutar cykeln.
Sammanfattningsvis Ă€r en av de största utmaningarna för mig just nu avsaknaden av ett sĂ„dant "Intelligent integrationssystem" som kopplar samman olika komponenter i produkten och dĂ€rmed möjliggör att följa hur produkten som helhet Ă€r sammansatt. Jag skulle vara intresserad av communityns tankar kring detta (spoiler â jag arbetar för nĂ€rvarande med ett projekt , som kan bli ett sĂ„dant intelligent integrationssystem).
En sista sak jag vill nĂ€mna Ă€r att jag inte anser att en monolit Ă€r acceptabel för nĂ„got projekt av ens medelstorlek. Jag Ă€r mycket skeptisk till försök att pĂ„skynda genomförandet och kvaliteten pĂ„ utvecklingen genom att Ă„tervĂ€nda till en monolit. För det första har monoliten ett liknande problem med komponenthantering â bland de olika bibliotek som den bestĂ„r av, men allt detta Ă€r inte sĂ„ mĂ€rkbart och visar sig först och frĂ€mst i den tid som utvecklarna lĂ€gger ner. En konsekvens av monolitens problem Ă€r den faktiska omöjligheten att göra förĂ€ndringar i koden â och extremt lĂ„ngsam utvecklingshastighet.
MikrotjĂ€nster förbĂ€ttrar situationen, men dĂ„ stĂ„r mikrotjĂ€nstarkitekturen inför problemet med kombinatorisk explosion i integrationsfasen. Ja, i allmĂ€nhet har vi flyttat samma problem â frĂ„n utvecklingsfasen till integrationsfasen. Men enligt min Ă„sikt leder mikrotjĂ€nstmetoden Ă€ndĂ„ till bĂ€ttre resultat, och teamen uppnĂ„r resultat snabbare (troligen frĂ€mst pĂ„ grund av minskningen av storleken pĂ„ utvecklingsenheten â eller batch-storlek). Men övergĂ„ngen frĂ„n monolit till mikrotjĂ€nster har hittills inte resulterat i tillrĂ€cklig förbĂ€ttring av processen â den kombinationsexplosion av versioner av mikrotjĂ€nster Ă€r ett stort problem, och vi har stor potential att förbĂ€ttra situationen i takt med att vi löser detta.
KĂ€lla: habr.com
