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 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