{"id":75892,"date":"2020-03-29T01:43:46","date_gmt":"2020-03-28T23:43:46","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/mikroservisy-kombinatornyj-vzryv-versij"},"modified":"2020-03-29T01:43:46","modified_gmt":"2020-03-28T23:43:46","slug":"mikroservisy-kombinatornyj-vzryv-versij","status":"publish","type":"post","link":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/mikroservisy-kombinatornyj-vzryv-versij","title":{"rendered":"Mikrotjenester \u2014 en kombination af versionseksplosion","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hej, Habr! Jeg pr\u00e6senterer for dig <i>en autoriseret overs\u00e6ttelse af artiklen <noindex><a rel=\"nofollow\" href=\"https:\/\/worklifenotes.com\/2020\/03\/04\/microservices-combinatorial-explosion-of-versions\/\">Mikrotjenester \u2013 Kombinatorisk Eksplosion af Versioner<\/a><\/noindex>.<\/i><br \/>\n<img decoding=\"async\" alt=\"Mikrotjenester \u2014 en kombination af versionseksplosion\" src=\"\/wp-content\/uploads\/2020\/03\/595431c434519e41afe45e86c5725b8d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nI en tid, hvor IT-verdenen gradvist overg\u00e5r til mikrotjenester og v\u00e6rkt\u00f8jer som Kubernetes, bliver et problem mere og mere synligt. Dette problem er <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9A%D0%BE%D0%BC%D0%B1%D0%B8%D0%BD%D0%B0%D1%82%D0%BE%D1%80%D0%BD%D1%8B%D0%B9_%D0%B2%D0%B7%D1%80%D1%8B%D0%B2\">kombinatorisk eksplosion<\/a><\/noindex> af versioner af mikrotjenester. IT-f\u00e6llesskabet mener dog, at den nuv\u00e6rende situation er betydeligt bedre end <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Dependency_hell\">\u00bbDependency hell\u00ab<\/a><\/noindex> fra den tidligere generation af teknologier. Ikke desto mindre er versioneringsstyring af mikrotjenester et meget komplekst problem. Et eksempel p\u00e5 dette kan ses i artikler som <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/444130\/\">\u00bbGiv mig min monolit tilbage\u00ab<\/a><\/noindex>.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nHvis du, mens du l\u00e6ser denne tekst, ikke forst\u00e5r problemet, lad mig forklare det. Antag, at dit produkt best\u00e5r af 10 mikrotjenester. Lad os nu antage, at der for hver af disse mikrotjenester udgives 1 ny version. Kun 1 version \u2014 jeg h\u00e5ber, vi alle kan blive enige om, at dette er et ganske trivielt og ubetydeligt faktum. Men lad os se en gang til p\u00e5 vores produkt. Med kun \u00e9n ny version af hver komponent, har vi nu 2^10 \u2014 eller 1024 permutationer af, hvordan vi kan sammens\u00e6tte vores produkt.<\/p>\n<p>Hvis der stadig er nogen forvirring, lad mig bryde matematikken ned. S\u00e5 vi har 10 mikrotjenester, hver f\u00e5r en opdatering. Det vil sige, at vi f\u00e5r 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\u00e6ssigt er det det samme som at have et bin\u00e6rt tal med 10 cifre. For eksempel, lad os sige, at 1 er den nye version, og 0 er den gamle version \u2014 s\u00e5 kan en mulig permutation repr\u00e6senteres som 1001000000 \u2014 hvor 1. og 4. komponent er opdateret, mens alle de andre ikke er. Fra matematikkens perspektiv ved vi, at et bin\u00e6rt tal med 10 cifre kan have 2^10 eller 1024 v\u00e6rdier. Det vil sige, at vi har bekr\u00e6ftet omfanget af det tal, vi har med at g\u00f8re.<\/p>\n<p>Lad os forts\u00e6tte med overvejelserne \u2014 hvad sker der, hvis vi har 100 mikrotjenester og hver har 10 mulige versioner? Hele situationen bliver meget ubehagelig \u2014 nu har vi 10^100 permutationer \u2014 og det er et k\u00e6mpestort tal. Ikke desto mindre foretr\u00e6kker jeg at omtale denne situation p\u00e5 denne m\u00e5de, fordi nu skjuler vi os ikke bag ord som \u00bbkubernetes\u00ab, men konfronterer problemet som det er.<\/p>\n<p>Hvorfor fascinerer dette problem mig s\u00e5 meget? Dels fordi vi tidligere i verden af NLP og AI diskuterede problemet med den kombinatoriske eksplosion for 5-6 \u00e5r siden. I stedet for versioner havde vi separate ord, og i stedet for produkter havde vi s\u00e6tninger og afsnit. Selvom problemerne inden for NLP og AI i h\u00f8j grad stadig st\u00e5r uafklaret, m\u00e5 det erkendes, at der er gjort betydelige fremskridt de seneste \u00e5r. <i>(efter min mening kunne fremskridtene v\u00e6re st\u00f8rre,<b>fleste af<\/b>hvis folk i branchen havde givet lidt mindre opm\u00e6rksomhed til maskinl\u00e6ring og lidt mere til andre teknikker \u2014 men det er et off-topic emne).<\/i><\/p>\n<p>Lad os vende tilbage til verdenen af DevOps og mikroservices. Vi st\u00e5r over for et stort problem, der gemmer sig som en elefant i et ammunitionslager \u2014 for hvad jeg ofte h\u00f8rer er: \"bare tag Kubernetes og Helm, s\u00e5 bliver alt godt!\" Men nej, alt bliver ikke godt, hvis man lader det st\u00e5, som det er. Desuden synes det analytiske svar p\u00e5 dette problem ikke acceptable givet kompleksiteten. Ligesom med NLP skal vi f\u00f8rst n\u00e6rme os dette problem ved at indsn\u00e6vre s\u00f8geomr\u00e5det \u2014 i dette tilf\u00e6lde ved at udelukke for\u00e6ldede permutationer.<\/p>\n<p>En af de ting, der kan hj\u00e6lpe \u2014 jeg skrev i sidste \u00e5r <noindex><a rel=\"nofollow\" href=\"https:\/\/worklifenotes.com\/2019\/03\/21\/devops-kpis-measuring-distance-between-latest-and-greatest-and-oldest-production-version\/\">om behovet for at opretholde et minimalt spred mellem versioner, der uploades til kunderne.<\/a><\/noindex>Det er ogs\u00e5 vigtigt at bem\u00e6rke, at en veludviklet CI\/CD-proces meget hj\u00e6lper med at reducere variationer. Dog er den nuv\u00e6rende tilstand for CI\/CD ikke tilstr\u00e6kkelig god til at l\u00f8se problemet med permutationer uden yderligere v\u00e6rkt\u00f8jer til at holde styr p\u00e5 og f\u00f8lge komponenter.<\/p>\n<p>Hvad vi har brug for, er et eksperimenteringssystem p\u00e5 integrationsstadiet, hvor vi kunne fastsl\u00e5 risikofaktoren for hver komponent og ogs\u00e5 have en automatiseret proces til opdatering af forskellige komponenter og test uden operat\u00f8rens indblanding \u2014 for at se, hvad der fungerer, og hvad der ikke g\u00f8r.<\/p>\n<p>Et s\u00e5dant eksperimenteringssystem kunne se s\u00e5ledes ud:<\/p>\n<ol>\n<li>Udviklerne skriver tests (dette er et kritisk trin \u2014 for ellers har vi ikke kriteriet for evaluering \u2014 det svarer til datam\u00e6rkning i maskinl\u00e6ring).<\/li>\n<li>Hver komponent (projekt) f\u00e5r sit eget CI-system \u2014 denne proces er i dag veludviklet, og sp\u00f8rgsm\u00e5let om at skabe et CI-system for en enkelt komponent er derfor stort set l\u00f8st.<\/li>\n<li>\u00abSmart integration system\u00bb samler resultater fra forskellige CI-systemer og kompilere projektkomponenter til det endelige produkt, udf\u00f8rer test og beregner til sidst den korteste vej til at opn\u00e5 den \u00f8nskede funktionalitet i produktet baseret p\u00e5 eksisterende komponenter og risikofaktorer. Hvis en opdatering ikke er muligt, informerer dette system udviklerne om de tilg\u00e6ngelige komponenter, og hvor fejl opst\u00e5r. Jeg vil igen understrege, at testsystemet her er af kritisk betydning \u2014 da integrationssystemet bruger tests som vurderingskriterium.<\/li>\n<li>CD-systemet, som derefter modtager data fra \u00abSmart integration system\u00bb og udf\u00f8rer opdateringen. Denne fase afslutter cyklussen.<\/li>\n<\/ol>\n<p>\nSammenfattende er en af mine st\u00f8rste udfordringer lige nu manglen p\u00e5 et s\u00e5dant \u00abSmart integration system\u00bb, der kan forbinde forskellige komponenter i produktet og derved muligg\u00f8re sporing af, hvordan produktet generelt er sammensat. Jeg ville v\u00e6re interesseret i samfundets tanker om dette (spoiler \u2014 jeg arbejder i \u00f8jeblikket p\u00e5 et projekt <noindex><a rel=\"nofollow\" href=\"https:\/\/relizahub.com\">Reliza<\/a><\/noindex>, der kan blive et s\u00e5dant smarte integrationssystem).<\/p>\n<p>En sidste ting, jeg vil n\u00e6vne, er, at for mig er monolitter ikke acceptable for ethvert projekt af mellem st\u00f8rrelse. Jeg er meget skeptisk over for fors\u00f8g p\u00e5 at forkorte tiden til levering og kvaliteten af udviklingen ved at vende tilbage til monolitten. For det f\u00f8rste har monolitten et lignende problem med komponentadministration \u2014 blandt de forskellige biblioteker, den best\u00e5r af, men dette er ikke s\u00e5 synligt og viser sig prim\u00e6rt i den tid, udviklerne bruger. F\u00f8lgen af monolithproblemet er den praktiske umulighed af at foretage \u00e6ndringer i koden \u2014 og en ekstremt langsom udviklingshastighed.<\/p>\n<p>Mikrotjenester forbedrer situationen, men derefter st\u00e5r mikroservicearkitekturen over for problemet med kombinatorisk eksplosion i integrationsfasen. Ja, generelt har vi flyttet det samme problem \u2014 fra udviklingsfasen til integrationsfasen. Men efter min mening f\u00f8rer mikroservice-tilgangen stadig til bedre resultater, og teams n\u00e5r resultater hurtigere (sandsynligvis prim\u00e6rt p\u00e5 grund af reducering af st\u00f8rrelsen p\u00e5 udviklingsenheden \u2014 eller <i>batch size<\/i>). Men overgangen fra monolit til mikrotjenester har endnu ikke givet en tilstr\u00e6kkelig forbedring af processen \u2014 den kombinatoriske eksplosion af versioner af mikrotjenester er et enormt problem, og vi har et stort forbedringspotentiale, efterh\u00e5nden som vi l\u00f8ser dette.<br \/>\n<br \/>Kilde: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/494340\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u0439 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u044c\u0438 Microservices \u2013 Combinatorial Explosion of Versions. \u0412\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0430 \u043a\u043e\u0433\u0434\u0430 \u043c\u0438\u0440 IT \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0432\u0440\u043e\u0434\u0435 Kubernetes, \u0432\u0441\u0435 \u0431\u043e\u043b\u0435\u0435 \u0437\u0430\u043c\u0435\u0442\u043d\u043e\u0439 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u043e\u0434\u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u042d\u0442\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2014 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0442\u043e\u0440\u043d\u044b\u0439 \u0432\u0437\u0440\u044b\u0432 \u0432\u0435\u0440\u0441\u0438\u0439 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u0412\u0441\u0435 \u0436\u0435 IT \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442, \u0447\u0442\u043e \u0441\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u044f\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u00abDependency hell\u00bb \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":75893,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-75892","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440!\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/mikroservisy-kombinatornyj-vzryv-versij\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u044b \u2014 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0442\u043e\u0440\u043d\u044b\u0439 \u0432\u0437\u0440\u044b\u0432 \u0432\u0435\u0440\u0441\u0438\u0439 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440!\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/mikroservisy-kombinatornyj-vzryv-versij\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-03-28T23:43:46+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-28T23:43:46+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Mikrotjenester \u2014 kombinationen af versioner | ProHoster","description":"Hello, Habr!","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/mikroservisy-kombinatornyj-vzryv-versij","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u044b \u2014 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0442\u043e\u0440\u043d\u044b\u0439 \u0432\u0437\u0440\u044b\u0432 \u0432\u0435\u0440\u0441\u0438\u0439 | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440!","og:url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/mikroservisy-kombinatornyj-vzryv-versij","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-03-28T23:43:46+00:00","article:modified_time":"2020-03-28T23:43:46+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"75892","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 17:47:28","updated":"2022-09-30 17:33:29","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/75892","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=75892"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/75892\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/75893"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=75892"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=75892"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=75892"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}