{"id":5817,"date":"2021-01-12T14:27:40","date_gmt":"2021-01-12T14:27:40","guid":{"rendered":"https:\/\/conexion-hr.com\/que-aprendimos-del-2020-y-los-microservicios\/"},"modified":"2022-04-18T16:24:43","modified_gmt":"2022-04-18T16:24:43","slug":"que-aprendimos-del-2020-y-los-microservicios","status":"publish","type":"post","link":"https:\/\/conexion-hr.com\/es\/que-aprendimos-del-2020-y-los-microservicios\/","title":{"rendered":"\u00bfQu\u00e9 aprendimos del 2020 y los microservicios?"},"content":{"rendered":"<p>Sin lugar a dudas el a\u00f1o 2020 es uno que recordaremos por siempre y aparecer\u00e1 en los libros de historia (y Wikipedia). Entre tanto caos, las formas de trabajo se vieron obligadas a cambiar, y empresas que antes rechazaban el trabajo desde casa tuvieron que adaptarse. De esta manera, equipos que antes compart\u00edan una misma sala y sufr\u00edan reuniones innecesarias, empezaron a funcionar como equipos distribuidos (sistemas distribuidos), que manejan una cola de mensajes v\u00eda <em>Correo electr\u00f3nico<\/em> o <em>Slack<\/em> (comunicaci\u00f3n asincr\u00f3nica) y tienen reuniones con menos frecuencia (comunicaci\u00f3n sincr\u00f3nica).<\/p>\n<p>Gran parte de la industria IT est\u00e1 de acuerdo con el trabajo remoto; y mas all\u00e1 de cuestiones como si el empleador debe brindar el equipo de trabajo (monitores, sillas, notebook) y pagar internet; no hay otro tipo de quejas.<\/p>\n<p>Si asumimos entonces que el equipo de trabajo distribuido es mejor, \u00bfpodemos asumir que una empresa que usa microservicios es mejor? La respuesta tiene distintas aristas que hay que analizar.<\/p>\n<p>En los pr\u00f3ximos p\u00e1rrafos encontrar\u00e1n lo bueno, lo malo y lo feo de los microservicios. Si quer\u00e9s adentrarte mas en el tema, te invito a ver estos dos live streams que hicimos en <em>Stream 404<\/em>:<\/p>\n<p>&nbsp;<\/p>\n<div class=\"ast-oembed-container\" style=\"height: 100%;\"><iframe title=\"#02 - Microservicios: lo bueno, lo malo y lo feo | Stream 404\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/huv1c23YEG4?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<div align=\"\\&quot;center\\&quot;\">\n<p>&nbsp;<\/p>\n<div class=\"ast-oembed-container\" style=\"height: 100%;\"><iframe title=\"#03 Microservicios: \u00bfC\u00f3mo no romper todo cuando cambiamos algo? | Stream 404\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/vgx7EsJhKeE?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div>\n<div align=\"\\&quot;center\\&quot;\">\n<p>&nbsp;<\/p>\n<hr>\n<\/div>\n<h2><\/h2>\n<h2><a id=\"\\&quot;user-content-lo-bueno-lo-malo-y-lo-feo\\&quot;\" class=\"\\&quot;anchor\\&quot;\" href=\"\/es\/\\&quot;https:\/\/gist.github.com\/pmorelli92\/68bcd697e6937e0b8cefcf3ffc823711\/#lo-bueno-lo-malo-y-lo-feo\\&quot;\" aria-hidden=\"\\&quot;true\\&quot;\"><\/a>Lo bueno, lo malo y lo feo<\/h2>\n<p>T\u00edtulo de pel\u00edcula y tambi\u00e9n de retrospectiva: consiste en nombrar cosas buenas (que salieron bien y que el equipo deber\u00eda repetir), cosas malas (que nunca deber\u00edan haber pasado y se deben evitar), y cosas feas (que no salieron bien y deber\u00edan mejorar para que sean hermosas).<\/p>\n<p>Aplicado a microservicios podemos nombrar lo bueno de usarlos, lo malo como posibles problemas a evitar y lo feo como esas transiciones que un equipo tiene que atravesar.<\/p>\n<p>&nbsp;<\/p>\n<h2><a id=\"\\&quot;user-content-lo-bueno\\&quot;\" class=\"\\&quot;anchor\\&quot;\" href=\"\/es\/\\&quot;https:\/\/gist.github.com\/pmorelli92\/68bcd697e6937e0b8cefcf3ffc823711\/#lo-bueno\\&quot;\" aria-hidden=\"\\&quot;true\\&quot;\"><\/a>Lo bueno<\/h2>\n<p>SOLID, un conjunto de principios que se aplican a la programaci\u00f3n, establece el <em>\\&#8221;Single Responsibility Principle\\&#8221; (SRP)<\/em>: Una clase, archivo, paquete (dependiendo del lenguaje de programaci\u00f3n) debe tener una \u00fanica raz\u00f3n de cambio. Los microservicios deben aprovechar el SRP para delimitar una funci\u00f3n del sistema y encapsular la misma en el servicio en s\u00ed. De esta forma, detectar cierta funcionalidad se vuelve mas f\u00e1cil.<\/p>\n<p>El ciclo de vida de desarrollo es m\u00e1s corto. Siempre y cuando el alcance del microservicio est\u00e9 bien delimitado, su desarrollo no deber\u00eda tomar mas de dos semanas, lo cual lo hace f\u00e1cilmente reemplazable en caso de que se requiera una implementaci\u00f3n totalmente diferente.<\/p>\n<p>Siguiendo la misma l\u00ednea, un servicio que tiene un alcance acotado es mas f\u00e1cil de testear; una buena base de test unitarios que garanticen que las reglas de negocio sean v\u00e1lidas es fundamental para asegurar el funcionamiento del sistema en s\u00ed.<\/p>\n<p>Por \u00faltimo, en empresas m\u00e1s grandes, donde cada equipo representa una funci\u00f3n, es com\u00fan encontrar no m\u00e1s de 6 personas que est\u00e9n espec\u00edficamente trabajando en uno o dos servicios y tengan total libertad para desarrollarlos, siempre y cuando se cumplan los contratos que el servicio establezca con otros servicios de otros equipos.<\/p>\n<p>&nbsp;<\/p>\n<h2><a id=\"\\&quot;user-content-lo-malo\\&quot;\" class=\"\\&quot;anchor\\&quot;\" href=\"\/es\/\\&quot;https:\/\/gist.github.com\/pmorelli92\/68bcd697e6937e0b8cefcf3ffc823711\/#lo-malo\\&quot;\" aria-hidden=\"\\&quot;true\\&quot;\"><\/a>Lo malo<\/h2>\n<p>Los hashtags. Suena rid\u00edculo, pero para atraer gente a las <em>Start-Ups<\/em> hay muchos equipos que se lanzan a hacer microservicios, sin siquiera considerar las ventajas y las desventajas, dado que los microservicios \\&#8221;est\u00e1n de moda\\&#8221;. El estigma de los monolitos es tal que incluso mencionarlos causa p\u00e1nico. En una empresa nueva o en un proyecto nuevo, donde el negocio no esta muy definido y\/o estable, la mejor alternativa es empezar con un monolito y luego migrar a microservicios.<\/p>\n<p>Tambi\u00e9n, hay un cambio de paradigma en cuanto a c\u00f3mo testear el sistema. Muchos equipos basan todos sus test en un <em>Automation E2E (end to end)<\/em> que cubre todo el sistema: incluido Front y Back end. Si bien esto parece una buena idea, uno de los principios de los microservicios es que los deploy son independientes. Si tenemos que pasar a producci\u00f3n 10 servicios en simult\u00e1neo y cada vez que ejecutamos los E2E tardamos 5 minutos; tendr\u00edamos que esperar 50 minutos para tener todos los cambios en producci\u00f3n. Esto no es escalable en sistemas grandes y por eso se favorecen los test unitarios, para testear el negocio; y los test de integraci\u00f3n, para estar seguros que podemos acceder a la base de datos, o ejecutar un llamado a otro servicio.<\/p>\n<p>El <em>tooling<\/em> (librer\u00edas, soporte de infraestructura, entre otros) puede generar un problema en un equipo no tan maduro. La autonom\u00eda significa que el mismo puede elegir un lenguaje de programaci\u00f3n que no tiene porque ser usado en otro servicio. Sin embargo, hay veces que un lenguaje ya establecido en la empresa tiene un tooling maduro, y elegir otro lenguaje no suele ser una opci\u00f3n razonable. Hay que pensar tambi\u00e9n que si una empresa maneja muchos lenguajes de programaci\u00f3n necesita muchos empleados con diferentes skill sets lo cual puede llegar a ser una complicaci\u00f3n en caso de que integrantes de un equipo se vayan de la empresa, o quieran cambiar a otro equipo. Si bien, en mi opini\u00f3n, uno no sabe programar en un lenguaje y para cambiar a otro tiene que empezar desde \\&#8221;trainee\\&#8221;, siempre hay una curva de aprendizaje en la cual uno se tiene que familiarizar con la sintaxis, frameworks y bondades del mismo.<\/p>\n<p>&nbsp;<\/p>\n<h2><a id=\"\\&quot;user-content-lo-feo\\&quot;\" class=\"\\&quot;anchor\\&quot;\" href=\"\/es\/\\&quot;https:\/\/gist.github.com\/pmorelli92\/68bcd697e6937e0b8cefcf3ffc823711\/#lo-feo\\&quot;\" aria-hidden=\"\\&quot;true\\&quot;\"><\/a>Lo feo<\/h2>\n<p>Los microservicios no son acordes para un negocio nuevo en el cual no haya expertos del dominio o cuando el dominio no sea estable. Esto, tambi\u00e9n mencionado en lo malo, es algo con lo que el equipo tiene que trabajar. Lo m\u00e1s acorde al principio es empezar con un monolito y cuando el dominio se estabilice, empezar a segmentar gradualmente partes que est\u00e9n bien delimitadas y probar qu\u00e9 tan bien funciona la integraci\u00f3n con el monolito. Al cabo de unos meses, o a\u00f1os, el monolito estar\u00e1 totalmente desacoplado en un sistema distribuido.<\/p>\n<p>Todo tiene que ser observable y medible. En un monolito los puntos de error suelen ser m\u00e1s f\u00e1ciles de detectar dado que todo es parte de la misma aplicaci\u00f3n. Igualmente, la respuesta a si el sistema est\u00e1 ca\u00eddo no tiene grises. Es s\u00ed o no. En un sistema distribuido esto cambia. Cada microservicio debe tener sus m\u00e9tricas y alertas configuradas para saber si hubo un problema y si es necesario reducir (downgrade) la funcionalidad mientras esto suceda. Las redes fallan, y en microservicios no se trata de \\&#8221;evitar que algo falle\\&#8221; si no de alertar y responder cuando algo falle.<\/p>\n<p>De comunicaci\u00f3n sincr\u00f3nica a comunicaci\u00f3n as\u00edncrona. Muchas operaciones no necesitan procesarse en \\&#8221;batch\\&#8221;. Esto es un cambio de paradigma muy grande. Si un cliente realiza una compra en un sistema no es necesario que se realice el pago y luego se procese el env\u00edo de un email con el recibo de una forma sincr\u00f3nica. Para esto se implementa un patr\u00f3n llamado <em>\\&#8221;Tell don\\&#8217;t ask\\&#8221; (cont\u00e1, no preguntes)<\/em>, lo cual significa que el servicio va a informar un evento de la \u00edndole de \\&#8221;Compra efectuada\\&#8221;, y el servicio responsable de enviar la factura por mail la va a procesar de una forma as\u00edncrona. Esto permite el re-procesamiento de eventos en caso de fallas, evita una carga intensiva de la red; y nos garantiza que, en caso de que el servicio de env\u00edos de mail falle, la compra igual se procese y no comprometa toda la transacci\u00f3n.<\/p>\n<p>&nbsp;<\/p>\n<h2><a id=\"\\&quot;user-content-entonces\\&quot;\" class=\"\\&quot;anchor\\&quot;\" href=\"\/es\/\\&quot;https:\/\/gist.github.com\/pmorelli92\/68bcd697e6937e0b8cefcf3ffc823711\/#entonces\\&quot;\" aria-hidden=\"\\&quot;true\\&quot;\"><\/a>\u00bfEntonces?<\/h2>\n<p>La decisi\u00f3n de microservicios s\u00ed o microservicios no va a depender de cada empresa, equipo y negocio. Pensar en fr\u00edo y establecer cu\u00e1les son las ventajas y desventajas que traer\u00eda al equipo es la mejor manera de empezar. Las modas son pasajeras y lo que hoy esta de moda, ma\u00f1ana cambia. Una decisi\u00f3n bien pensada y documentada&nbsp;siempre va a tener un buen impacto.<\/p>\n<p>&nbsp;<\/p>\n<hr>\n<p>&nbsp;<\/p>\n<p>Sobre el autor: Soy Pablo Morelli, humano, 28 a\u00f1os, nativo de Argentina y viviendo en Suecia. Trabajo hace 7 a\u00f1os en IT como backend y devops. Me gusta el p\u00e1del y los videojuegos. Si te gust\u00f3 este art\u00edculo, te invito a&nbsp;<a href=\"\/\/www.youtube.com\/c\/stream404\\&quot;\" target=\"\\&quot;_blank\\&quot;\" rel=\"\\&quot;nofollow noopener\" noopener=\"\">suscribirte al podcast&nbsp;Stream404 en Youtube<\/a>&nbsp;y a&nbsp;<a href=\"\/\/twitter.com\/404Stream\\&quot;\" target=\"\\&quot;_blank\\&quot;\" rel=\"\\&quot;nofollow noopener\" noopener=\"\">seguirnos en Twitter.<\/a>&nbsp;Este es un proyecto que estamos llevando a cabo entre amigos con episodios mensuales en vivo. Si me queres agregar en tu feed, tambi\u00e9n pod\u00e9s&nbsp;<a href=\"\/\/devandchill.com\/\\&quot;\" target=\"\\&quot;_blank\\&quot;\" rel=\"\\&quot;nofollow noopener\" noopener=\"\">seguirme en mi blog<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>Sin lugar a dudas el a\u00f1o 2020 es uno que recordaremos por siempre y aparecer\u00e1 en los libros de historia (y Wikipedia). Entre tanto caos, las formas de trabajo se vieron obligadas a cambiar, y empresas que antes rechazaban el trabajo desde casa tuvieron que adaptarse. De esta manera, equipos que antes compart\u00edan una misma [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":7654,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"_joinchat":[],"footnotes":""},"categories":[63],"tags":[],"class_list":["post-5817","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-call-for-papers"],"_links":{"self":[{"href":"https:\/\/conexion-hr.com\/es\/wp-json\/wp\/v2\/posts\/5817","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/conexion-hr.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/conexion-hr.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/conexion-hr.com\/es\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/conexion-hr.com\/es\/wp-json\/wp\/v2\/comments?post=5817"}],"version-history":[{"count":0,"href":"https:\/\/conexion-hr.com\/es\/wp-json\/wp\/v2\/posts\/5817\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/conexion-hr.com\/es\/wp-json\/wp\/v2\/media\/7654"}],"wp:attachment":[{"href":"https:\/\/conexion-hr.com\/es\/wp-json\/wp\/v2\/media?parent=5817"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/conexion-hr.com\/es\/wp-json\/wp\/v2\/categories?post=5817"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/conexion-hr.com\/es\/wp-json\/wp\/v2\/tags?post=5817"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}