Microservicios

Conjunto de servicios pequeños y autónomos, cada uno con su propio deploy y su propia base de datos, comunicados por red.

Contexto

Una organización con muchos equipos, bounded contexts claros y madurez operativa (CI/CD, observabilidad, on-call), que quiere desplegar de forma independiente y escalar partes específicas.

Problema

Un monolito acopla equipos, ciclos de release y escalado.

Solución

Servicios pequeños, alineados a un bounded context, con su propia BD, comunicándose por mensajes o HTTP.

#Ejemplo

CSHARP
                ┌──────────┐  ┌──────────┐  ┌──────────┐
                │  Orders  │  │ Payments │  │ Shipping │
                │  + DB    │  │   + DB   │  │  + DB    │
                └────┬─────┘  └────┬─────┘  └────┬─────┘
                     └─────── Message Bus ───────┘

#Ventajas

  • Equipos autónomos.
  • Escalado por servicio.
  • Aislamiento de fallos.
  • Stacks heterogéneos.

#Coste real

  • DevOps significativo: orquestación (K8s), service mesh, tracing, schema registry.
  • Eventual consistency y compensaciones (Saga, Outbox).
  • Latencia de red entre componentes que antes eran llamadas a función.
  • Versionado de contratos.

#Cuándo sí tienen sentido

Los microservicios son una solución a problemas de escala organizacional y operativa (decenas de equipos, partes del sistema con carga muy distinta). No son un nivel superior de madurez: para la mayoría de los productos, un Modulith da el 80% del beneficio con una fracción del costo. Equipos como Amazon Prime Video han publicado que volvieron de servicios distribuidos a un monolito para una parte de su sistema por costo y complejidad.

Antes de partir en servicios, tenés que poder responder sí a casi todo esto:

  1. ¿Tenemos equipos que se pisan en el deploy y no pueden coordinarse?
  2. ¿Hay un cuello de botella medido que solo se resuelve escalando un componente por separado?
  3. ¿Los bounded contexts están estables (los límites no cambian cada sprint)?
  4. ¿Tenemos CI/CD, observabilidad y on-call maduros?
  5. ¿El presupuesto cubre infraestructura y gente de plataforma?

Si la respuesta es no, empezá con el Modulith. Ver la comparativa.

Cuándo NO aplicarlo
  • Equipo pequeño (menos de 20 personas) o producto todavía buscando product-market fit: el coste operativo te aplasta.
  • Sin observabilidad madura ni equipo de plataforma: vas a sufrir.
  • Si los servicios necesitan compartir mucha data en transacciones: estás dividiendo el dominio mal.
Tradeoffs
Pro Contra
Equipos autónomos, deploy independiente Operativa compleja y cara (orquestación, observabilidad)
Escalado granular Latencia y fallos de red por todas partes
Aísla fallos Eventual consistency
Stacks heterogéneos posibles Sistemas distribuidos: más bugs y más superficie a defender

#architecture #microservices #distributed