Microservicios
Construir una aplicación como muchos servicios chicos que hacen una sola cosa cada uno.
Los microservicios son una forma de organizar el software en la que una aplicación se divide en muchos servicios chicos e independientes. Una tienda online puede tener un servicio para usuarios, otro para el catálogo, otro para pedidos y otro para pagos. Cada uno corre por su cuenta, normalmente en su propio contenedor, muchas veces tiene su propia base de datos, y se comunica con los demás solo a través de APIs o de mensajes en una cola.
La alternativa es un monolito: un solo programa que tiene todo adentro y se despliega como una sola pieza. Los monolitos son más simples de construir, probar y entender, y por eso la mayoría de los productos arranca así. El problema aparece cuando el código y el equipo crecen: un cambio chico obliga a desplegar todo de nuevo, una parte lenta frena al resto y decenas de personas se pisan entre sí.
Los microservicios responden a eso dejando que cada equipo sea dueño de un servicio, lo cambie y lo despliegue a su ritmo, y que se escalen solo las partes con más carga. El precio es la complejidad. Una llamada a una función dentro de un programa se vuelve una llamada por la red que puede tardar o fallar; una transacción en una sola base de datos se vuelve coordinación entre varios servicios; y encontrar un bug implica seguir un pedido a través de muchos logs. Si se hace sin necesidad, sale un "monolito distribuido" con los problemas de los dos. Herramientas como Kubernetes, los balanceadores de carga y el tracing existen en buena parte para manejar esto.
Para quedarse
- Cada servicio hace una cosa, se despliega solo y suele tener sus propios datos.
- Los servicios se hablan por la red, con APIs o colas de mensajes.
- A favor: equipos, deploys y escalado independientes. En contra: fallas de red y más complejidad operativa.
- Muchos equipos arrancan con un monolito y lo dividen recién cuando duele.
Para seguir leyendo
- Microservices, de Martin Fowler y James Lewis (en inglés)
- ¿Qué son los microservicios? (AWS)
- Arquitectura de microservicios en Wikipedia