Última actualización: 30/12/2022
¿Te suena el concepto de microservicios? En esta entrada aprenderemos en qué consiste esta arquitectura tan popular y que está cambiando la forma de construir sistemas y aplicaciones.
Los microservicios surgieron como alternativa a las arquitecturas monolíticas aportando la escalabilidad y flexibilidad necesarias en empresas como Uber, Amazon o Netflix entre otras muchas.
Contenidos
¿Qué son los Microservicios?
Los microservicios son una arquitectura de software que consiste en crear las aplicaciones disminuyendo el acoplamiento entre los servicios. La aplicación, por tanto, es el conjunto de pequeños servicios, en la que cada uno representa una característica o funcionalidad concreta.
Cada microservicio se puede desarrollar, mantener y evolucionar de forma independiente e incluso estar escritos con diferentes lenguajes de programación y frameworks.
Para cada uno de ellos, se podría designar un equipo de desarrollo. Este equipo podría aumentar mucho su velocidad de trabajo al no tener que preocuparse de los efectos que sus cambios tendrían en otros servicios.
El 28% de las organizaciones de los encuestados han estado utilizando microservicios durante al menos tres años; más de las tres quintas partes (61%) de los encuestados los han estado utilizando durante un año o más.
Adopción de microservicios en 2020 – O’Reilly
Arquitectura de Microservicios vs Monolítico
Aunque la arquitectura de microservicios tiene muchas ventajas, no debemos olvidarnos de la arquitectura monolítica tradicional.
La arquitectura monolítica consiste en tener una pieza de software que sirve como base para construir todas las funcionalidades alrededor. Frecuentemente, también ejecutan todas juntas sobre la misma infraestructura.


El problema principal de la arquitectura monolítica es que todo el código se encuentra en un repositorio central, por lo que las actualizaciones afectan a la totalidad del código. A medida que el repositorio de código crece, se dificulta añadir nuevas funcionalidades o realizar cambios. También, es más complicado escalar los equipos y disminuye la flexibilidad.
Al contener servicios acoplados entre sí, si ocurre un fallo en un servicio o componente se podría propagar a todo el sistema fácilmente.
Los microservicios, por otro lado, se comunican entre sí a través de APIs. Cada microservicio se puede escalar o desplegar de forma independiente, por lo que es mucho más sencillo aislar los fallos.


Evidentemente, la arquitectura de microservicios también tiene sus desventajas, y es que introduce una complejidad que en ocasiones es innecesaria. En el caso de tener aplicaciones sencillas y homogéneas, una arquitectura monolítica puede ser la opción adecuada.
También, las aplicaciones que no tienen muchas funcionalidades adicionales y que se desean finalizar rápido se beneficiarán más de una arquitectura monolítica que de una arquitectura de microservicios.
Ventajas
Si nos preguntamos cuándo usar microservicios, debemos tener en cuenta las ventajas principales que aportan a nuestros sistemas.
La ventaja más evidente es la escalabilidad que proporcionan. Los microservicios escalan de forma independiente y podemos tener varias instancias en ejecución de los servicios que más nos interesen. Además, la escalabilidad también aplica a los equipos de desarrollo. Estos equipos disminuyen la necesidad de coordinarse entre sí, y se limitan a cubrir sus APIs, aumentando su autonomía.
Los microservicios también proporcionan la capacidad de reusar componentes en otros proyectos. Por ejemplo, un microservicio de gestión de usuarios podría servir a varias aplicaciones diferentes, con la ventaja de que si crece el número de aplicaciones o de clientes se podría escalar fácilmente añadiendo más instancias. Además, es posible reemplazar un microservicio por otra versión, incluso tener en ejecución varias versiones del mismo microservicio (por ejemplo para dar servicio a aplicaciones legacy).
Desventajas
Como hemos visto, las arquitecturas de microservicios también tienen desventajas. A continuación voy a resumir las desventajas más importantes.
Un gran desafío en los sistemas compuestos por microservicios es la monitorización. Controlar la ejecución y el despliegue de tantas entidades independientes no es una tarea sencilla, y por ello han surgido multitud de herramientas que ayudan a monitorizar y gestionar su funcionamiento. Entre estas herramientas se encuentran las populares Datadog o Dynatrace.
Cuando trabajamos con microservicios, también debemos tener muy en cuenta las comunicaciones entre ellos. Cuando el número de servicios empieza a crecer, la gestión de las peticiones y de los mensajes puede ser complicada y se debe analizar cuidadosamente para evitar fallos y situaciones inesperadas. Es común añadir un broker de mensajería como Apache Kafka para actuar de intermediario.
Por su diseño, las aplicaciones compuestas por microservicios se beneficiarán de herramientas de automatización de despliegues, integración continua y de testing. Con la ayuda de estas herramientas podemos minimizar el trabajo manual que suponen sus operaciones y los posibles errores.
Cómo Implementar Microservicios
Los microservicios se despliegan en contenedores. Esta tecnología proporciona el aislamiento y el control necesario para gestionar servicios independientes.
La opción más popular de contenedores es Docker. Cada microservicio puede estar compuesto de varios contenedores Docker, que se comunican a través de su red interna.
Para automatizar el despliegue y la gestión de estos contenedores, la opción más popular es Kubernetes. Nos permite crear clusters de contenedores que desplegar en nuestra infraestructura cloud o híbrida y escalar los servicios independientes fácilmente.
Puedes aprender las diferencias entre Docker y Kubernetes en mi artículo de introducción a Kubernetes.
Los frameworks para implementar el código de cada microservicio dependerán mucho de la aplicación y del equipo. Los más populares son Spring Boot para microservicios de Java o Akka.
Existen numerosos patrones de diseño en una arquitectura de Microservicios, con los que deberás familiarizarte para implementar tus aplicaciones de la forma más adecuada. Dos patrones muy conocidos son Orquestación y Coreografía. En el patrón de orquestación, existe un componente central que actúa de coordinador del resto de componentes. En el caso de la Coreografía, los componentes se comunican entre ellos para completar la tarea. Esto puede generar un menor acoplamiento pero una complejidad adicional.
Siguientes Pasos, Formación y Cursos de Microservicios
A continuación, voy a recomendarte dos cursos que merece la pena hacer para ampliar y asentar tus conocimientos. Los tienes disponibles en la plataforma de formación online Coursera:
Construyendo Microservicios Escalables con Spring Boot y Spring Cloud
Este curso ofrecido por Google te permitirá aprender a construir Microservicios con Spring Boot, y Spring Cloud con sus 13 horas de contenido. Te guiará paso a paso en los conceptos esenciales de microservicios y su implementación en Google Cloud.
Desarrollo de Aplicaciones Serverless usando Microservicios
Este curso ofrecido por IBM contiene 10 horas de contenido en las que aprenderás a construir aplicaciones de Microservicios serverless. En mi opinión un curso recomendado, muy completo y que merece la pena.
También, te van a interesar estos dos libros:
Preguntas Frecuentes Microservicios – FAQ
¿Cuándo debo usar Microservicios?
La arquitectura de Microservicios es una buena opción cuando queremos implementar aplicaciones compuestas de muchas funcionalidades y que necesiten ser escalables.
¿Cómo se comunican los Microservicios?
Los microservicios se comunican entre sí para intercambiar datos y mensajes con APIs, generalmente usando protocolo HTTP/HTTPS. También pueden implementar otros protocolos asíncronos o usar colas de mensajería como Apache Kafka.
A continuación, un breve vídeo-resumen. ¡No te lo pierdas!