¿Qué son los microservicios? Una pequeña introducción

¿Qué son los microservicios? Una pequeña introducción

Después de mucho tiempo sin escribir en el blog, volvemos al ruedo! En estos casi 3 años sin escribir pasé por algunos cambios y desafíos profesionales, que hacen que a día de hoy el enfoque de los nuevos posts varíe con respecto a lo que escribía anteriormente.

El primer tema con el que voy a retomar es algo que actualmente forma parte de mi realidad laboral diaria: microservicios.

Lo primero con lo que vamos a comenzar a modo introductorio es con la definición de microservicios. Como obviamente hay mucha gente que sabe más que yo sobre este tema, voy a tomar algunas definiciones de ellos aunque si voy a agregar algunos comentarios sobre puntos que considero claves.

La primera definición es de Martin Fowler en su sitio (traducido por mi):

El término “Arquitectura de Microservicios” ha surgido en estos últimos años para describir una forma particular de diseñar aplicaciones de software como servicios que se despliegan (deployan) de forma independiente.

https://martinfowler.com/articles/microservices.html

Aunque sea una definición de un párrafo, deja algunos conceptos interesantes como para comenzar a analizar:

Forma de diseñar aplicaciones: Estamos hablando de una arquitectura y de un estilo a usar en el diseño y posterior desarrollo de nuestras aplicaciones.

Servicios: Aunque son aplicaciones, el foco se basa en ofrecer servicios o funcionalidades de negocio a otras aplicaciones para que, en conjunto, se logre dar solución a una problemática en particular.

Independientes: Más allá de que se plantea dentro del contexto de despliegues independientes, que es un punto muy importante, no es sólo eso. Hablamos de aplicaciones 100% independientes desde todo punto de vista (arquitectura interna, lenguaje de programación, estrategia de almacenamiento de información), aunque deben tener algún acuerdo en el protocolo de comunicación a usar y los mensajes a enviar/recibir.


Otra definición interesante y un poco más completa para mi gusto es la de Chris Richardson (nuevamente traducida por mi):

Los microservicios (también conocidos como la arquitectura de microservicios) es un estilo de arquitectura que estructura la aplicación en un conjunto de servicios que:

– Son altamente mantenibles y testeables
– Con bajo acoplamiento
– Con despliegue independiente entre sí
– Organizados alrededor de funcionalidades de negocio
– Tienen como dueño un equipo chico

La arquitectura de microservicios permite el rápido, frecuente y cofiable delivery de grandes y complejas aplicaciones. Además permite a las organizaciones evolucionar su stack tecnológico.

https://microservices.io/

Esta definición es mucho más completa que la anterior y también nos deja algunos puntos interesantes para reflexionar y debatir:

Mantenimiento: Al hacer aplicaciones mucho más chicas y con un objetivo de negocio claro, logramos que sea más fácil integrar nuevos cambios sin caer en el pánico de “cambio algo y deja de andar todo”

Testeabilidad: Por los mismos argumentos expuestos en el punto anterior nos beneficiamos en poder testear de forma más eficiente y certera nuestra app enfocándonos en la parte del negocio que resuelve

Bajo acoplamiento: Esto es algo que al ser aplicaciones separadas puede ser más simple de lograr, pero tampoco es que es algo que ya vamos a tener solucionado por usar microservicios. Debemos ser conscientes de cómo va a ser la solución global que vamos a plantear y qué responsabilidad del negocio va a cumplir cada uno de los microservicios que la compongan para que no haya superposición de responsabilidades ni acoples por no haber hecho una buena distribución.

Centrados en el negocio: Un microservicio (como cualquier aplicación) tiene que nacer con el objetivo de solucionar un problema de negocio (después de todo es lo que nos paga el sueldo, no hacer cosas lindas técnicamente porque si). Pero a diferencia de una arquitectura SOA o monolítica donde la responsabilidad es muy grande (puede ser todo un negocio completo), cada microservicio tiene una responsabilidad puntual y específica. Eso tiene una gran ventaja: si a futuro esa parte del negocio cambia, o incluso deja de tener sentido, tenemos bien definido dónde va a estar ese impacto y qué equipo va a tomarlo.

Equipos como dueños: Esto es uno de los puntos que más se disfrutan creo yo en el día a día como equipos IT: sos 100% el dueño y responsable de todo lo bueno y malo que tiene ese microservicio. Y acá hablamos de todo, desde el lenguaje de programación usado para solucionar el problema de negocio que tiene como responsabilidad, arquitectura, performance, métricas, etc. Eso ayuda (no digo que no pase en otros casos) a que el equipo trabaje mucho más enfocado en la porción del negocio que tiene que resolver, siendo experto en eso y en su microservicio aunque sin descuidar u olvidar los flujos completos del negocio.

Despliegue rápido, frecuente y confiable: Al ser aplicaciones mucho más chicas es más simple realizar las tareas de despliegue de estas aplicaciones, sin afectar todo el sistema completo.

Evolución del stack tecnológico: Es una ventaja muy importante de usar microservicios, ya que son aplicaciones chicas y con un propósito bien definido. Eso implica que la cantidad de dependencias sea reducida y aplicar actualizaciones de stack sea de un impacto relativamente bajo, incluso migrarlas 100% de un lenguaje a otro (siempre con un argumento válido y no “porque sí”). Me ha pasado que en otro tipo de aplicaciones clásicas de tipo SOA actualizar la versión de una librería ya era todo un desafío y temor por el impacto que podía tener en todo el sistema.


Igualmente aunque parecen muchos los beneficios, es algo que deberíamos usar siempre? Mi respuesta es “depende” (aunque muchos chicos/as del equipo se pongan nerviosos cuando les doy esa respuesta ante una consulta). El motivo de esa respuesta, en el próximo post..

5 comentarios sobre “¿Qué son los microservicios? Una pequeña introducción

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s