{"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>una traduzione originale dell'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 sta lentamente passando ai microservizi e strumenti come Kubernetes, un problema emerge sempre pi\u00f9 evidente. 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\">l'esplosione combinatoria<\/a><\/noindex> delle versioni dei microservizi. Tuttavia, la comunit\u00e0 IT ritiene che la situazione odierna sia notevolmente migliore rispetto a <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Dependency_hell\">\u00abl'inferno delle dipendenze\u00bb<\/a><\/noindex> delle tecnologie precedenti. Tuttavia, la gestione delle versioni dei microservizi si presenta come un compito piuttosto difficile. Una delle prove di ci\u00f2 \u00e8 rappresentata da articoli come <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/444130\/\">\u00abRidatemi 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 spiegarlo. Supponiamo che il vostro prodotto sia composto da 10 microservizi. Ora supponiamo che per ognuno di questi microservizi venga rilasciata 1 nuova versione. Solo 1 versione \u2014 spero che tutti possiamo concordare che questo sia un fatto piuttosto banale e insignificante. Tuttavia, guardiamo di nuovo il nostro prodotto. Con solo una nuova versione di ciascun componente, ora abbiamo 2^10 \u2014 o 1024 permutazioni su come possiamo comporre il nostro prodotto.<\/p>\n<p>Se c'\u00e8 ancora qualche confusione, permettetemi di spiegare la matematica. Dunque, abbiamo 10 microservizi, ognuno con un aggiornamento. Quindi, abbiamo 2 possibili versioni per ogni microservizio (o la vecchia o la nuova). Ora, per ciascuno dei componenti del prodotto possiamo utilizzare una di queste due versioni. Matematicamente, questo \u00e8 equivalente a un numero binario di 10 cifre. Ad esempio, supponiamo che 1 sia la nuova versione e 0 la vecchia versione \u2014 allora una possibile permutazione potrebbe essere rappresentata come 1001000000 \u2014 dove il primo e il quarto 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 l'entit\u00e0 del numero con cui stiamo trattando.<\/p>\n<p>Proseguendo nei ragionamenti \u2014 cosa succede se abbiamo 100 microservizi e ognuno con 10 possibili versioni? 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 per quello che \u00e8.<\/p>\n<p>Perch\u00e9 questa problematica mi affascina cos\u00ec tanto? In parte perch\u00e9, avendo lavorato in precedenza nel mondo NLP e AI, abbiamo discusso a lungo 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 i problemi di NLP e AI rimangano in gran parte irrisolti, occorre riconoscere che negli ultimi anni \u00e8 stato fatto un progresso significativo. <i>(a mio avviso, il progresso potrebbe essere stato maggiore<b>un<\/b>se le persone nel settore avessero prestato un po' meno attenzione al machine learning e un po' di pi\u00f9 ad altre tecniche \u2014 ma questo \u00e8 un argomento a parte).<\/i><\/p>\n<p>Tornando al mondo dei DevOps e dei microservizi. Ci troviamo di fronte a un grandissimo problema, camuffato da un elefante nella stanza \u2014 perch\u00e9 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 lasciamo le cose come stanno. Inoltre, una soluzione analitica a questo problema non appare praticabile vista la sua complessit\u00e0. Come nel NLP, dobbiamo prima affrontare questo problema restringendo l'ambito di ricerca \u2014 in questo caso eliminando le permutazioni obsolete.<\/p>\n<p>Una delle cose che pu\u00f2 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\/\">sull'importanza di mantenere un minimo di scostamento tra le versioni rilasciate per i clienti<\/a><\/noindex>. \u00c8 anche importante notare che un processo CI\/CD ben progettato aiuta notevolmente a ridurre le variazioni. Tuttavia, la situazione attuale con CI\/CD non \u00e8 sufficientemente buona per affrontare il problema delle permutazioni senza ulteriori strumenti di monitoraggio e tracciamento dei componenti.<\/p>\n<p>Ci\u00f2 di cui abbiamo bisogno \u00e8 un sistema di esperimenti nella fase di integrazione, dove possiamo definire il fattore di rischio per ciascun componente, oltre ad avere un processo automatizzato per l'aggiornamento di vari componenti e il testing senza l'intervento dell'operatore \u2014 per vedere cosa funziona e cosa no.<\/p>\n<p>Un tale sistema di esperimenti potrebbe apparire come segue:<\/p>\n<ol>\n<li>Gli sviluppatori scrivono test (questo \u00e8 un passaggio critico \u2014 perch\u00e9 altrimenti non abbiamo criterio di valutazione \u2014 proprio come l'annotazione dei dati nel machine learning).<\/li>\n<li>Ogni componente (progetto) ottiene il proprio sistema CI \u2014 questo processo \u00e8 oggi ben sviluppato, e la questione della creazione di un sistema CI per un singolo componente \u00e8 in gran parte risolta.<\/li>\n<li>Il \u00abSistema Intelligente di Integrazione\u00bb raccoglie i risultati di diversi sistemi CI e assembla i progetti-componenti in un prodotto finale, avvia i test e infine calcola il percorso pi\u00f9 breve per ottenere la funzionalit\u00e0 desiderata del prodotto, tenendo conto dei componenti esistenti e dei fattori di rischio. Se non \u00e8 possibile effettuare l'aggiornamento, questo sistema avvisa gli sviluppatori riguardo ai componenti presenti e su quale di essi si verifica un errore. Ripeto, il sistema di test qui \u00e8 di importanza critica, 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 Intelligente di Integrazione\u00bb e esegue direttamente l'aggiornamento. Questa fase conclude il ciclo.<\/li>\n<\/ol>\n<p>\nIn sintesi, per me una delle pi\u00f9 grandi sfide al momento \u00e8 l'assenza di un \u00abSistema Intelligente di Integrazione\u00bb che colleghi i vari componenti in un prodotto, permettendo cos\u00ec di tracciare come il prodotto sia composto nel suo insieme. Sar\u00f2 interessato ai pensieri della comunit\u00e0 a 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 intelligente di integrazione).<\/p>\n<p>Un'ultima cosa che voglio menzionare \u00e8 che per me un monolite non \u00e8 adeguato per alcun progetto di dimensioni medio-grandi. Ho grandi riserve riguardo ai tentativi di accelerare i tempi di implementazione e la qualit\u00e0 dello sviluppo tornando al monolite. In primo luogo, il monolite presenta un problema simile nella gestione dei componenti: tra le varie librerie di cui \u00e8 composto, tuttavia tutto ci\u00f2 non \u00e8 cos\u00ec evidente e si manifesta principalmente nel tempo che gli sviluppatori spendono. La conseguenza del problema del monolite \u00e8 la reale impossibilit\u00e0 di apportare modifiche al codice, portando a una velocit\u00e0 di sviluppo estremamente lenta.<\/p>\n<p>I microservizi migliorano la situazione, ma poi l'architettura a microservizi affronta il problema dell'esplosione combinatoria nella fase di integrazione. S\u00ec, in generale, abbiamo spostato lo stesso problema dalla fase di sviluppo a quella di integrazione. Tuttavia, a mio avviso, l'approccio dei microservizi porta comunque a risultati migliori, e i team raggiungono i risultati pi\u00f9 velocemente (probabilmente soprattutto grazie alla riduzione delle dimensioni dell'unit\u00e0 di sviluppo - o <i>batch size<\/i>). Tuttavia, il passaggio dal monolite ai microservizi non ha ancora portato a un miglioramento sufficiente del processo: l'esplosione combinatoria delle versioni dei microservizi rappresenta un enorme problema, e abbiamo un grande potenziale di miglioramento man mano che affrontiamo questa situazione.<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.0.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.0.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 - 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}]}}