{"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\/it\/blog\/administrirovanie\/mikroservisy-kombinatornyj-vzryv-versij","title":{"rendered":"Microservizi \u2014 esplosione combinatoria delle versioni","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ciao, Habr! Vi presento <i>la traduzione di un articolo <noindex><a rel=\"nofollow\" href=\"https:\/\/worklifenotes.com\/2020\/03\/04\/microservices-combinatorial-explosion-of-versions\/\">Microservizi \u2013 Esplosione combinatoria delle versioni<\/a><\/noindex>.<\/i><br \/>\n<img decoding=\"async\" alt=\"Microservizi \u2014 esplosione combinatoria delle versioni\" src=\"\/wp-content\/uploads\/2020\/03\/595431c434519e41afe45e86c5725b8d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nIn un'epoca in cui il mondo IT si sta lentamente spostando verso i microservizi e strumenti come Kubernetes, emerge sempre pi\u00f9 evidente un solo problema. Questo problema \u00e8 <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\">un'esplosione combinatoria<\/a><\/noindex> delle versioni dei microservizi. Tuttavia, la comunit\u00e0 IT ritiene che la situazione attuale sia notevolmente migliore rispetto a <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Dependency_hell\">\u00abInferno delle dipendenze\u00bb<\/a><\/noindex> della generazione precedente di tecnologie. Tuttavia, la gestione delle versioni dei microservizi \u00e8 un problema molto complesso. Una delle prove di ci\u00f2 pu\u00f2 essere trovata in articoli come <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/444130\/\">\u00abRestituitemi il mio monolite\u00bb<\/a><\/noindex>.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nSe leggendo questo testo non comprendete ancora il problema, permettetemi di spiegare. Supponiamo che il vostro prodotto sia composto da 10 microservizi. Ora supponiamo che per ciascuno di questi microservizi venga rilasciata una nuova versione. Solo una versione \u2014 spero che possiamo tutti concordare che questo \u00e8 un fatto piuttosto triviale e insignificante. Ora, per\u00f2, diamo un'altra occhiata al nostro prodotto. Con solo una nuova versione per ciascun componente, abbiamo ora 2^10 \u2014 ovvero 1024 permutazioni di come possiamo configurare il nostro prodotto.<\/p>\n<p>Se c'\u00e8 ancora confusione, permettetemi di spiegare la matematica. Dunque, abbiamo 10 microservizi, ciascuno con un aggiornamento. Questo significa che abbiamo 2 possibili versioni per ogni microservizio (o la vecchia o la nuova). Ora, per ciascuno dei componenti del prodotto, possiamo utilizzare qualcuna di queste due versioni. Matematicamente, questo \u00e8 lo stesso che avere un numero binario di 10 cifre. Ad esempio, diciamo che 1 \u00e8 la nuova versione, e 0 \u00e8 la vecchia versione \u2014 allora una possibile permutazione pu\u00f2 essere rappresentata come 1001000000 \u2014 dove il 1\u00b0 e il 4\u00b0 componente sono aggiornati, mentre tutti gli altri no. Dalla matematica sappiamo che un numero binario di 10 cifre pu\u00f2 avere 2^10 o 1024 valori. Dunque, abbiamo confermato le dimensioni del numero con cui stiamo trattando.<\/p>\n<p>Proseguiamo ulteriormente il ragionamento \u2014 cosa succederebbe se avessimo 100 microservizi e ciascuno di essi avesse 10 versioni possibili? La situazione diventa piuttosto sgradevole \u2014 ora abbiamo 10^100 permutazioni \u2014 un numero enorme. Tuttavia, preferisco descrivere questa situazione in questo modo, perch\u00e9 ora non ci nascondiamo dietro parole come \u00abkubernetes\u00bb, ma affrontiamo il problema cos\u00ec com'\u00e8.<\/p>\n<p>Perch\u00e9 questa problematica mi affascina cos\u00ec tanto? In parte perch\u00e9, lavorando in passato nel mondo dell'NLP e dell'AI, abbiamo discusso molto del problema dell'esplosione combinatoria circa 5-6 anni fa. Solo che invece di versioni avevamo parole singole, e invece di prodotti avevamo frasi e paragrafi. E sebbene le problematiche di NLP e AI rimangano in larga misura irrisolte, bisogna riconoscere che negli ultimi anni \u00e8 stato fatto un progresso significativo. <i>(a mio avviso, il progresso potrebbe essere stato<b>un<\/b>maggiore, se le persone nel settore prestassero un po' meno attenzione al machine learning e un po' pi\u00f9 ad altre tecniche \u2014 ma questo \u00e8 gi\u00e0 off-topic).<\/i><\/p>\n<p>Tornando al mondo del DevOps e dei microservizi. Ci troviamo di fronte a un enorme problema, mascherato come un elefante in una stanza \u2014 infatti, ci\u00f2 che sento spesso \u00e8: \u00abbasta prendere Kubernetes e Helm, e andr\u00e0 tutto bene!\u00bb Ma no, non andr\u00e0 tutto bene se tutto rimane cos\u00ec com'\u00e8. Inoltre, una soluzione analitica a questo problema non sembra accettabile vista la sua complessit\u00e0. Come nell'NLP, dobbiamo prima avvicinarci a questo problema restringendo l'ambito di ricerca \u2014 in questo caso, escludendo le permutazioni obsolete.<\/p>\n<p>Una delle cose che potrebbero aiutare \u2014 ho scritto l'anno scorso <noindex><a rel=\"nofollow\" href=\"https:\/\/worklifenotes.com\/2019\/03\/21\/devops-kpis-measuring-distance-between-latest-and-greatest-and-oldest-production-version\/\">sulla necessit\u00e0 di mantenere una dispersione minima tra le versioni rilasciate ai clienti.<\/a><\/noindex>\u00c8 anche importante notare che un processo CI\/CD ben sviluppato aiuta notevolmente a ridurre le variazioni. Tuttavia, la situazione attuale con CI\/CD non \u00e8 sufficientemente buona per risolvere il problema delle permutazioni senza strumenti aggiuntivi per la registrazione e il tracciamento dei componenti.<\/p>\n<p>Ci\u00f2 di cui abbiamo bisogno \u00e8 un sistema di esperimenti nella fase di integrazione, dove possiamo determinare il fattore di rischio per ciascun componente e avere anche un processo automatizzato per l'aggiornamento e il testing dei vari componenti senza intervento da parte dell'operatore \u2014 per capire cosa funziona e cosa no.<\/p>\n<p>Un tale sistema di esperimenti potrebbe apparire nel seguente modo:<\/p>\n<ol>\n<li>Gli sviluppatori scrivono test (questo \u00e8 un passaggio critico \u2014 perch\u00e9 altrimenti non abbiamo criteri di valutazione \u2014 \u00e8 come l'annotazione dei dati nel machine learning).<\/li>\n<li>Ogni componente (progetto) riceve il proprio sistema CI \u2014 questo processo \u00e8 attualmente ben consolidato e la creazione di un sistema CI per un singolo componente \u00e8 in gran parte risolta.<\/li>\n<li>Il \u00abSistema di integrazione intelligente\u00bb raccoglie i risultati di diversi sistemi CI e compone i progetti-componenti nel prodotto finale, avvia i test e infine calcola il percorso pi\u00f9 breve per ottenere la funzionalit\u00e0 desiderata del prodotto sulla base dei componenti esistenti e dei fattori di rischio. Se un aggiornamento non \u00e8 possibile, questo sistema avverte gli sviluppatori riguardo ai componenti disponibili e su quale di essi si verifica l'errore. Ripeto che il sistema di test qui \u00e8 di importanza cruciale, poich\u00e9 il sistema di integrazione utilizza i test come criterio di valutazione.<\/li>\n<li>Il sistema CD che poi riceve dati dal \u00abSistema di integrazione intelligente\u00bb e produce direttamente l'aggiornamento. Questa fase conclude il ciclo.<\/li>\n<\/ol>\n<p>\nIn sintesi, per me uno dei problemi principali al momento \u00e8 l'assenza di un \u00abSistema di integrazione intelligente\u00bb che colleghi i diversi componenti nel prodotto, permettendo cos\u00ec di tracciare come sia composto il prodotto nel suo insieme. Sarei interessato ai pensieri della comunit\u00e0 al riguardo (spoiler: sto attualmente lavorando a un progetto <noindex><a rel=\"nofollow\" href=\"https:\/\/relizahub.com\">Reliza<\/a><\/noindex>, che potrebbe diventare un tale sistema di integrazione intelligente).<\/p>\n<p>Un'ultima cosa che voglio menzionare \u00e8 che per me il monolite non \u00e8 accettabile per nessun progetto di medio livello. Ho grande scetticismo riguardo ai tentativi di accelerare i tempi di implementazione e la qualit\u00e0 dello sviluppo tornando al monolite. In primo luogo, il monolite ha un problema simile nella gestione dei componenti, tra le varie librerie di cui \u00e8 composto, ma tutto ci\u00f2 non \u00e8 cos\u00ec evidente e si manifesta prima di tutto nel tempo speso dagli sviluppatori. La conseguenza del problema del monolite \u00e8 l'effettiva impossibilit\u00e0 di apportare modifiche al codice e una velocit\u00e0 di sviluppo estremamente lenta.<\/p>\n<p>I microservizi migliorano la situazione, tuttavia poi l'architettura a microservizi si confronta con il problema dell'esplosione combinatoria nella fase di integrazione. S\u00ec, in generale, abbiamo spostato lo stesso problema dalla fase di sviluppo alla fase di integrazione. Tuttavia, a mio avviso, l'approccio dei microservizi porta comunque a risultati migliori, e i team ottengono risultati pi\u00f9 rapidamente (probabilmente principalmente a causa della riduzione delle dimensioni dell'unit\u00e0 di sviluppo \u2014 o <i>batch size<\/i>). Tuttavia, il passaggio da monoliti a microservizi non ha ancora portato a un miglioramento significativo del processo: l'esplosione combinatoria delle versioni dei microservizi rappresenta un enorme problema, e abbiamo un grande potenziale per migliorare la situazione man mano che la affrontiamo.<br \/>\n<br \/>Fonte: <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.1.1 - 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\/it\/blog\/administrirovanie\/mikroservisy-kombinatornyj-vzryv-versij\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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\/it\/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\udd47Microservizi \u2014 esplosione combinatoria delle versioni | ProHoster","description":"Ciao, Habr!","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/mikroservisy-kombinatornyj-vzryv-versij","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/75892","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=75892"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/75892\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/75893"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=75892"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=75892"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=75892"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}