{"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\/es\/blog\/administrirovanie\/mikroservisy-kombinatornyj-vzryv-versij","title":{"rendered":"Microservicios: explosi\u00f3n combinatoria de versiones","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>\u00a1Hola, Habr! Les presento <i>una traducci\u00f3n autoral del art\u00edculo <noindex><a rel=\"nofollow\" href=\"https:\/\/worklifenotes.com\/2020\/03\/04\/microservices-combinatorial-explosion-of-versions\/\">Microservicios: Explosi\u00f3n combinatoria de versiones<\/a><\/noindex>.<\/i><br \/>\n<img decoding=\"async\" alt=\"Microservicios: explosi\u00f3n combinatoria de versiones\" src=\"\/wp-content\/uploads\/2020\/03\/595431c434519e41afe45e86c5725b8d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nEn la \u00e9poca en que el mundo de TI est\u00e1 gradualmente transitando hacia microservicios y herramientas como Kubernetes, un problema se vuelve cada vez m\u00e1s evidente. Este problema es <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\">la explosi\u00f3n combinatoria<\/a><\/noindex> de versiones de microservicios. Sin embargo, la comunidad de TI considera que la situaci\u00f3n actual es significativamente mejor que la de <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Dependency_hell\">el 'infierno de dependencias'<\/a><\/noindex> de la generaci\u00f3n anterior de tecnolog\u00edas. Sin embargo, la gesti\u00f3n de versiones de microservicios es un problema bastante complejo. Una de las pruebas de esto puede ser art\u00edculos como <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/444130\/\">\u00abDevu\u00e9lveme mi monolito\u00bb<\/a><\/noindex>.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nSi leyendo este texto a\u00fan no entienden el problema, perm\u00edtanme explicarlo. Supongamos que su producto consiste en 10 microservicios. Ahora supongamos que cada uno de estos microservicios lanza 1 nueva versi\u00f3n. Solo 1 versi\u00f3n: espero que todos estemos de acuerdo en que este es un hecho trivial y poco significativo. Pero ahora miremos nuevamente nuestro producto. Con solo una nueva versi\u00f3n de cada componente, ahora tenemos 2^10 \u2014 o 1024 permutaciones sobre c\u00f3mo se puede componer nuestro producto.<\/p>\n<p>Si a\u00fan queda confusi\u00f3n, perm\u00edtanme desglosar las matem\u00e1ticas. Entonces, tenemos 10 microservicios, cada uno recibe una actualizaci\u00f3n. Es decir, obtenemos 2 versiones posibles para cada microservicio (o la antigua o la nueva). Ahora, para cada uno de los componentes del producto podemos usar cualquiera de estas dos versiones. Matem\u00e1ticamente, esto es lo mismo que tener un n\u00famero binario de 10 d\u00edgitos. Por ejemplo, supongamos que 1 es la nueva versi\u00f3n y 0 es la versi\u00f3n antigua \u2014 entonces una posible permutaci\u00f3n podr\u00eda ser representada como 1001000000 \u2014 donde el primer y el cuarto componente han sido actualizados, mientras que todos los dem\u00e1s no. Desde las matem\u00e1ticas sabemos que un n\u00famero binario de 10 d\u00edgitos puede tener 2^10 o 1024 valores. Es decir, hemos confirmado la magnitud del n\u00famero con el que estamos tratando.<\/p>\n<p>Continuemos con la reflexi\u00f3n \u2014 \u00bfqu\u00e9 pasar\u00eda si tuvi\u00e9ramos 100 microservicios y cada uno tuviera 10 versiones posibles? La situaci\u00f3n se vuelve bastante desagradable \u2014 ahora tenemos 10^100 permutaciones \u2014 y es un n\u00famero enorme. Sin embargo, prefiero describir esta situaci\u00f3n de esta manera, porque ahora no nos escondemos detr\u00e1s de palabras como \u00abkubernetes\u00bb, sino que enfrentamos el problema tal como es.<\/p>\n<p>\u00bfPor qu\u00e9 me fascina tanto este problema? En parte porque, trabajando anteriormente en el mundo de NLP e IA, discutimos mucho sobre el problema de la explosi\u00f3n combinatoria hace unos 5-6 a\u00f1os. Solo que en lugar de versiones, ten\u00edamos palabras individuales y, en lugar de productos, ten\u00edamos oraciones y p\u00e1rrafos. Y aunque los problemas de NLP e IA siguen en gran medida sin resolver, hay que reconocer que en los \u00faltimos a\u00f1os se ha hecho un progreso significativo. <i>(en mi opini\u00f3n, el progreso podr\u00eda haber sido mayor si la gente en la industria prestara un poco menos de atenci\u00f3n al aprendizaje autom\u00e1tico y un poco m\u00e1s a otras t\u00e9cnicas \u2014 pero eso ya es un tema off-topic).<b>mayor audiencia.<\/b>Volviendo al mundo de DevOps y microservicios. Nos enfrentamos a un gran problema, disfrazado como un elefante en una habitaci\u00f3n de curiosidades \u2014 porque lo que a menudo escucho es: \u201c\u00a1solo toma Kubernetes y Helm y todo estar\u00e1 bien!\u201d Pero no, no estar\u00e1 bien si dejamos todo como est\u00e1. M\u00e1s a\u00fan, la soluci\u00f3n anal\u00edtica a este problema no parece aceptable debido a su complejidad. Al igual que en NLP, debemos abordar este problema reduciendo el \u00e1mbito de b\u00fasqueda \u2014 en este caso, excluyendo las permutaciones obsoletas.<\/i><\/p>\n<p>Una de las cosas que puede ayudar \u2014 escrib\u00ed el a\u00f1o pasado<\/p>\n<p>sobre la necesidad de mantener un m\u00ednimo de variaci\u00f3n entre las versiones entregadas a los clientes. <noindex><a rel=\"nofollow\" href=\"https:\/\/worklifenotes.com\/2019\/03\/21\/devops-kpis-measuring-distance-between-latest-and-greatest-and-oldest-production-version\/\">Tambi\u00e9n es importante se\u00f1alar que un proceso CI\/CD bien dise\u00f1ado ayuda significativamente a reducir las variaciones. Sin embargo, la situaci\u00f3n actual con CI\/CD no es lo suficientemente buena para resolver el problema de las permutaciones sin herramientas adicionales para contabilizar y rastrear componentes.<\/a><\/noindex>Lo que necesitamos es un sistema de experimentaci\u00f3n en la etapa de integraci\u00f3n, donde podamos determinar el factor de riesgo por cada componente, as\u00ed como tener un proceso automatizado de actualizaci\u00f3n de diferentes componentes y pruebas sin la intervenci\u00f3n del operador \u2014 para ver qu\u00e9 funciona y qu\u00e9 no.<\/p>\n<p>Un sistema de experimentaci\u00f3n podr\u00eda verse de la siguiente manera:<\/p>\n<p>Los desarrolladores escriben pruebas (este es un paso cr\u00edtico \u2014 porque de lo contrario no tenemos criterios de evaluaci\u00f3n \u2014 es como la anotaci\u00f3n de datos en el aprendizaje autom\u00e1tico).<\/p>\n<ol>\n<li>Cada componente (proyecto) tiene su propio sistema CI \u2014 este proceso est\u00e1 bien desarrollado hoy en d\u00eda, y la cuesti\u00f3n de crear un sistema CI para un solo componente est\u00e1 en gran medida resuelta.<\/li>\n<li>Cada componente (proyecto) recibe su propio sistema CI; este proceso est\u00e1 bien desarrollado en la actualidad, y la cuesti\u00f3n de crear un sistema CI para un \u00fanico componente est\u00e1 en gran medida resuelta.<\/li>\n<li>El \"Sistema de Integraci\u00f3n Inteligente\" recoge los resultados de diversos sistemas de CI y compila los proyectos-componentes en un producto final, realiza pruebas y, finalmente, calcula el camino m\u00e1s corto para obtener la funcionalidad deseada del producto, considerando los componentes existentes y los factores de riesgo. Si una actualizaci\u00f3n no es posible, este sistema notifica a los desarrolladores sobre los componentes disponibles y en cu\u00e1l de ellos ocurre el error. Una vez m\u00e1s, repito que el sistema de pruebas aqu\u00ed es de vital importancia, ya que el sistema de integraci\u00f3n utiliza las pruebas como criterio de evaluaci\u00f3n.<\/li>\n<li>Sistema CD, que luego obtiene datos del \"Sistema de Integraci\u00f3n Inteligente\" y realiza directamente la actualizaci\u00f3n. Esta etapa concluye el ciclo.<\/li>\n<\/ol>\n<p>\nEn resumen, para m\u00ed, uno de los mayores problemas en la actualidad es la ausencia de un \"Sistema de Integraci\u00f3n Inteligente\" que conecte diversos componentes en un producto y, de este modo, permita rastrear c\u00f3mo se compone el producto en su totalidad. Me interesan las opiniones de la comunidad al respecto (spoiler: actualmente estoy trabajando en un proyecto <noindex><a rel=\"nofollow\" href=\"https:\/\/relizahub.com\">Reliza<\/a><\/noindex>, que puede convertirse en tal sistema de integraci\u00f3n inteligente).<\/p>\n<p>Una \u00faltima cosa que quiero mencionar: para m\u00ed, un monolito no es aceptable para ning\u00fan proyecto de tama\u00f1o medio. Soy muy esc\u00e9ptico ante los intentos de acelerar el tiempo de implementaci\u00f3n y la calidad del desarrollo volviendo al monolito. En primer lugar, el monolito presenta un problema de gesti\u00f3n de componentes similar, entre las diversas bibliotecas de las que est\u00e1 compuesto; sin embargo, todo esto no es tan evidente y se manifiesta principalmente en el tiempo que dedican los desarrolladores. Como consecuencia del problema del monolito, est\u00e1 la imposibilidad real de realizar cambios en el c\u00f3digo y la velocidad de desarrollo extremadamente lenta.<\/p>\n<p>Los microservicios mejoran la situaci\u00f3n, aunque luego la arquitectura de microservicios enfrenta el problema de la explosi\u00f3n combinatoria en la etapa de integraci\u00f3n. S\u00ed, en general, hemos trasladado el mismo problema de la etapa de desarrollo a la etapa de integraci\u00f3n. Sin embargo, en mi opini\u00f3n, el enfoque de microservicios sigue dando mejores resultados, y los equipos logran resultados m\u00e1s r\u00e1pido (probablemente, principalmente debido a la reducci\u00f3n del tama\u00f1o de la unidad de desarrollo \u2014 o <i>batch size<\/i>). Sin embargo, la transici\u00f3n de un monolito a microservicios a\u00fan no ha proporcionado una mejora suficiente en el proceso; la explosi\u00f3n combinatoria de versiones de microservicios es un gran problema, y tenemos un gran potencial para mejorar la situaci\u00f3n a medida que se resuelva.<br \/>\n<br \/>Fuente: <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.2 - 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\/es\/blog\/administrirovanie\/mikroservisy-kombinatornyj-vzryv-versij\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\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\/es\/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\udd47Microservicios \u2014 explosi\u00f3n combinatoria de versiones | ProHoster","description":"\u00a1Hola, Habr!","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/mikroservisy-kombinatornyj-vzryv-versij","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","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\/es\/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\/es\/wp-json\/wp\/v2\/posts\/75892","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=75892"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/75892\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/75893"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=75892"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=75892"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=75892"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}