Con la entrada en primer lugar de Docker y posteriormente de Kubernetes y Openshift los microservicios se han convertido en la infraestructura favorita para desarrollar Back Ends. Cada vez menos se usan arquitecturas monolíticas.

¿Qué son los Microservicios?

El primer libro que leí de programación, en Pascal, recuerdo que mencionaba mucho una frase en Latín “divide et impera” o en castellano “divide y vencerás”, pues ese es el resumen de los microservicios, dividir el back-end en distintintos servicios.

Un primer ejemplo de aplicación del concepto de microservicio, podría ser una tienda on-line, que constaría de un conjunto de microservicios.

Los usuarios (/users) y el login se pueden implementar en base a un microservicio. Por otra parte los productos, igualmente se pueden basar en dos contenedores, que al entrar en /items este microservicio nos muestra los productos. La pasarela de pago sería un contenedor y el token para comunicarnos con la pasarela de pago y así para cualquier aplicación.

Como contenedor de estos microservicios podemos contar con NodeJS, y una base de datos no relacional (por ejemplo MongoDB).

1
Cada base de datos solo accede el servicio correspondiente para mostrar las APIs.

Cada base de datos solo accede el servicio correspondiente para mostrar las APIs.

Comunicación entre microservicios

2
Comunicación entre microservicios

Seguramente puedas preguntarte, si en el ejemplo anterior si cada base de datos solo accede un contenedor concreto, ¿como puedo hacer JOINS como en SQL? Pues ahora imaginemos, que cada producto muestra un precio distinto, si no estas logeado el precio final y si estás logeado cada usuario tiene un descuento.

Bien, el front end preguntará a /items que devuelva los 20 primeros productos para mostrarlos en la tienda, nombre del producto, imagen, descripción y precio, el precio depende del usuario, por lo que el microservicio items preguntará a /users por su descuento mezclará la información y la mostrará al front-end.

Microservicios
Los microservicios han supuesto una revolución a la hora de hacer aplicaciones, aunque como todo en esta vida, tiene un precio.

Ventajas y desventajas de los microservicios

Los microservicios han supuesto una revolución a la hora de hacer aplicaciones, como todo en esta vida tiene tiene un precio:

Ventajas

•  Escalabilidad: Tanto horizontal como vertical. Si necesitamos un  nuevo microservicio, no tenemos que tocar el resto del código, en el ejemplo de la tienda imaginemos que queremos crear un blog, /articles, sería un nuevo contenedor con su base de datos, por otro lado si uno de los servicios tiene más peticiones aplicaciones como kubernetes permiten replicarlo con facilidad y de forma automática.

•  Trabajo en equipo: Cada desarrollador puede dedicarse a un microservicio y solo a ese, cuando tenga que consultar a otro a través de API, abstrayéndose de su interior.

•  Independencia de la tecnología: Está incluiría las dos anteriores, cada desarrollador podría programar en una tecnología distinta, por ejemplo un Python para hacer analíticas y machine learning y un NodeJS para el resto de servicios y consultas a base de datos por su rendimiento.

3
Independencia de la tecnología

•  Migraciones más sencillas: Cambiar de tecnología es mucho más fácil, puesto que podemos migrar los microservicios por separado, al final entre ellos se comunican de forma estándar por APIs, podemos pasar de Java a Node o de Node a Go, e ir migrando de uno en uno.

•  Uso de distintas bases de datos: Parecido al anterior, podemos usar distintas bases de datos en nuestra aplicación, por ejemplo la base de datos de productos puede ser un SQL, por estar muy estructurada la información, pero la de usuario es un Mongo, incluso usar otras bases de datos más exóticas como las Gráficas, motores de búsquedas en documentos, colas de mensajería...

•  Más fácil de mantener: Simplifica mantenimientos, puesto que si hay un bug se identifica en que contenedor y te puedes centrar en ese.

4
Bases de datos
Aunque existen desventajas y hay que conocerlas, éstas son muy relativas.

Desventajas

•   Tiempo de preparación: Aunque, en mi opinión, para casi cualquier proyecto el computo total del tiempo es menor, si que requiere una preparación el preparar y pensar cada microservicio.

•   Aumento de consumo de Memoria y CPU: Aunque el demonio de Docker esta muy optimizado, el uso de microservicios requiere algo más de computo y memoria. 

•   Complejidad en el mantenimiento: Aunque se puede buscar mejor problemas, requiere de técnicos que conozcan la tecnología de Docker, Kubernetes, Openshift y similares.