{"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\/nl\/blog\/administrirovanie\/mikroservisy-kombinatornyj-vzryv-versij","title":{"rendered":"Microservices \u2013 een combinatorische explosie van versies","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hallo, Habr! Ik stel u voor aan <i>de auteursvertaling van het artikel <noindex><a rel=\"nofollow\" href=\"https:\/\/worklifenotes.com\/2020\/03\/04\/microservices-combinatorial-explosion-of-versions\/\">Microservices \u2013 Combinatorial Explosion of Versions<\/a><\/noindex>.<\/i><br \/>\n<img decoding=\"async\" alt=\"Microservices \u2013 een combinatorische explosie van versies\" src=\"\/wp-content\/uploads\/2020\/03\/595431c434519e41afe45e86c5725b8d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nIn een tijd waarin de IT-wereld geleidelijk overgaat op microservices en tools zoals Kubernetes, wordt \u00e9\u00e9n probleem steeds meer zichtbaar. Dit probleem is <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\">de combinatorische explosie<\/a><\/noindex> van versies van microservices. Toch gelooft de IT-gemeenschap dat de huidige situatie aanzienlijk beter is dan <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Dependency_hell\">het \"Dependency hell\"<\/a><\/noindex> van de vorige generatie technologie\u00ebn. Desondanks is versiebeheer van microservices een zeer complexe uitdaging. Een bewijs hiervan zijn artikelen zoals <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/444130\/\">\"Terug naar mijn monoliet\"<\/a><\/noindex>.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nAls u deze tekst leest en de probleemstelling niet begrijpt, laat me het dan uitleggen. Stel dat uw product uit 10 microservices bestaat. Laten we nu aannemen dat er voor elke microservice 1 nieuwe versie uitkomt. Slechts 1 versie \u2013 ik hoop dat we het er allemaal over eens kunnen zijn dat dit een zeer triviaal en onbeduidend feit is. Maar laten we nogmaals naar ons product kijken. Met slechts 1 nieuwe versie van elke component hebben we nu 2^10 \u2013 ofwel 1024 permutaties van hoe we ons product kunnen samenstellen.<\/p>\n<p>Als er nog onduidelijkheden zijn, laat me de wiskunde uitleggen. We hebben 10 microservices, en elke krijgt een update. Dit betekent dat we 2 mogelijke versies voor elke microservice hebben (of de oude of de nieuwe). Nu kunnen we voor elke component van het product een van deze twee versies gebruiken. Wiskundig gezien is dit hetzelfde als wanneer we een binaire getal van 10 cijfers hebben. Stel bijvoorbeeld dat 1 de nieuwe versie is en 0 de oude versie \u2013 dan kan een mogelijke permutatie worden aangeduid als 1001000000 \u2013 waar de 1e en 4e componenten zijn bijgewerkt, en de rest niet. Uit de wiskunde weten we dat een binaire getal van 10 cijfers 2^10 of 1024 waarden kan hebben. Dus we hebben de schaal van het aantal dat we onder ogen zien bevestigd.<\/p>\n<p>Laten we verder discussi\u00ebren \u2014 wat gebeurt er als we 100 microservices hebben en elke service 10 mogelijke versies? De situatie wordt behoorlijk onplezierig \u2014 we hebben nu 10^100 permutaties \u2014 dat is een enorm getal. Toch geef ik de voorkeur aan deze formulering, omdat we ons nu niet verstoppen achter woorden als 'kubernetes', maar de uitdaging recht in de ogen kijken.<\/p>\n<p>Waarom vindt ik dit probleem zo fascinerend? Gedeeltelijk omdat ik eerder in de wereld van NLP en AI werkte en we 5-6 jaar geleden veel hebben gesproken over het probleem van combinatorische explosie. Alleen hadden we in plaats van versies afzonderlijke woorden, en in plaats van producten hadden we zinnen en alinea's. En hoewel de problemen van NLP en AI nog steeds grotendeels onopgelost zijn, moeten we toegeven dat er de afgelopen jaren aanzienlijke vooruitgang is geboekt. <i>(naar mijn mening zou de vooruitgang groter kunnen zijn,<b>groter publiek.<\/b>als mensen in de sector iets minder aandacht aan machine learning besteedden en iets meer aan andere technieken \u2014 maar dat is al off-topic).<\/i><\/p>\n<p>Ik keer terug naar de wereld van DevOps en microservices. We staan voor een enorm probleem, dat zich als een olifant in de porseleinkast verhult \u2014 wat ik vaak hoor is: 'Neem gewoon kubernetes en helm, en alles komt goed!' Maar nee, alles komt niet goed als we alles laten zoals het is. Bovendien lijkt een analytische oplossing voor dit probleem onacceptabel vanwege de complexiteit. Net als in NLP moeten we eerst deze uitdaging aanpakken door het zoekgebied te verkleinen \u2014 in dit geval door verouderde permutaties uit te sluiten.<\/p>\n<p>Een van de dingen die kunnen helpen \u2014 ik schreef vorig jaar <noindex><a rel=\"nofollow\" href=\"https:\/\/worklifenotes.com\/2019\/03\/21\/devops-kpis-measuring-distance-between-latest-and-greatest-and-oldest-production-version\/\">over de noodzaak om de variatie tussen versies die aan klanten worden aangeboden tot een minimum te beperken.<\/a><\/noindex>Daarnaast is het belangrijk op te merken dat een goed doordacht CI\/CD-proces sterk helpt om variaties te verminderen. Echter, de huidige staat van CI\/CD is niet voldoende goed om het probleem van permutaties op te lossen zonder extra hulpmiddelen voor het bijhouden en traceren van componenten.<\/p>\n<p>Wat we nodig hebben, is een experimentele systeem in de integratiefase, waar we het risicofactor per component kunnen bepalen, evenals een geautomatiseerd proces voor het bijwerken van verschillende componenten en testen zonder tussenkomst van de operator \u2014 zodat we kunnen zien wat werkt en wat niet.<\/p>\n<p>Zo'n experimentensysteem zou er als volgt uitzien:<\/p>\n<ol>\n<li>Ontwikkelaars schrijven tests (dit is een kritieke stap \u2014 want zonder deze hebben we geen beoordelingscriteria \u2014 dit is vergelijkbaar met datamarkering in machine learning).<\/li>\n<li>Elke component (project) krijgt zijn eigen CI-systeem \u2014 dit proces is tegenwoordig goed uitgewerkt, en de vraag naar het cre\u00ebren van een CI-systeem voor een enkele component is grotendeels opgelost.<\/li>\n<li>Het \"Slimme integratiesysteem\" verzamelt de resultaten van verschillende CI-systemen en voegt componentprojecten samen in een eindproduct, start het testen en berekent uiteindelijk de kortste weg om de gewenste functionaliteit van het product te verkrijgen, rekening houdend met de bestaande componenten en risicofactoren. Als een upgrade niet mogelijk is, waarschuwt dit systeem ontwikkelaars over de beschikbare componenten en waar de fout optreedt. Nogmaals, ik herhaal dat het testsysteem hier van cruciaal belang is \u2014 omdat het integratiesysteem tests als beoordelingscriteria gebruikt.<\/li>\n<li>Het CD-systeem, dat vervolgens gegevens ontvangt van het \"Slimme integratiesysteem\" en de daadwerkelijke update uitvoert. Deze fase sluit de cyclus af.<\/li>\n<\/ol>\n<p>\nSamenvattend, voor mij is een van de grootste problemen momenteel het gebrek aan zo'n \"Slim integratiesysteem\" dat verschillende componenten tot een product verbindt en zo in staat stelt om te volgen hoe het product als geheel is samengesteld. Ik ben benieuwd naar de gedachten van de gemeenschap hierover (spoiler \u2014 ik werk momenteel aan een project <noindex><a rel=\"nofollow\" href=\"https:\/\/relizahub.com\">Reliza<\/a><\/noindex>, dat zo'n slim integratiesysteem kan worden).<\/p>\n<p>Een laatste ding dat ik wil vermelden \u2014 voor mij is een monoliet niet acceptabel voor elk project, zelfs niet voor een gemiddeld formaat. Ik ben zeer sceptisch over pogingen om de tijd van implementatie en de kwaliteit van ontwikkeling te versnellen door terug te keren naar een monoliet. Ten eerste heeft de monoliet vergelijkbare problemen met componentbeheer \u2014 tussen de verschillende bibliotheken waaruit hij bestaat, maar dit is minder merkbaar en komt vooral tot uiting in de tijd die ontwikkelaars besteden. Een gevolg van het probleem van de monoliet is de feitelijke onmogelijkheid om wijzigingen in de code aan te brengen \u2014 en de extreem trage ontwikkeling.<\/p>\n<p>Microservices verbeteren de situatie, maar vervolgens ondervindt de microservicesarchitectuur het probleem van combinatorische explosie tijdens de integratiefase. Ja, in het algemeen hebben we hetzelfde probleem verplaatst \u2014 van de ontwikkelingsfase naar de integratiefase. Echter, naar mijn mening leidt de aanpak van microservices tot betere resultaten, en teams behalen sneller resultaten (waarschijnlijk vooral vanwege de verkleining van de ontwikkelingsgrootte \u2014 of <i>batchgrootte<\/i>). De overstap van monolithisch naar microservices heeft echter nog niet geleid tot voldoende verbetering van het proces \u2014 de combinatorische explosie van versies van microservices is een enorm probleem, en we hebben groot potentieel voor verbetering naarmate we dit probleem oplossen.<br \/>\n<br \/>Bron: <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\/nl\/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=\"nl_NL\" \/>\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\/nl\/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\udd47Microservices \u2014 combinatorische explosie van versies | ProHoster","description":"Hallo, Habr!","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/mikroservisy-kombinatornyj-vzryv-versij","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","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\/nl\/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\/nl\/wp-json\/wp\/v2\/posts\/75892","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=75892"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/75892\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media\/75893"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=75892"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=75892"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=75892"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}