Microservicios
Estilo arquitectónico donde una aplicación se construye como un conjunto de servicios pequeños e independientes, cada uno ejecutando un proceso propio y comunicándose a través de APIs.
Qué es
Los microservicios son un estilo de arquitectura de software donde una aplicación se divide en servicios pequeños, independientes y especializados. Cada servicio:
- Hace una sola cosa bien (principio de responsabilidad única)
- Tiene su propia base de datos o almacenamiento
- Se comunica con otros servicios via APIs
- Se puede desplegar, escalar y actualizar de forma independiente
Monolito vs Microservicios
Arquitectura Monolítica (tradicional)
┌─────────────────────────────────────────┐
│ APP MONOLÍTICA │
│ ┌──────────┐ ┌──────────┐ ┌─────────┐ │
│ │ Usuarios │ │ Pedidos │ │ Pagos │ │
│ └──────────┘ └──────────┘ └─────────┘ │
│ ┌──────────┐ ┌──────────┐ ┌─────────┐ │
│ │Inventario│ │Reportes │ │Notif. │ │
│ └──────────┘ └──────────┘ └─────────┘ │
│ ↓ Una sola base de datos ↓ │
└─────────────────────────────────────────┘
Problema: si necesitas actualizar el módulo de Pagos, debes redesplegar toda la aplicación.
Arquitectura de Microservicios
[Servicio Usuarios] ←→ [Servicio Pedidos] ←→ [Servicio Pagos]
↓ ↓ ↓
[DB Usuarios] [DB Pedidos] [DB Pagos]
Cada servicio se actualiza, escala y despliega por separado.
Ventajas
| Ventaja | Por qué importa |
|---|---|
| Escalabilidad independiente | Si Pagos tiene mucha carga, se escala solo Pagos — no toda la app |
| Tecnología por servicio | Usuarios en Node.js, Reportes en Python, Pagos en Java |
| Fallos aislados | Si Notificaciones falla, Pedidos sigue funcionando |
| Equipos independientes | Cada equipo dueño de su servicio, deploys sin coordinación masiva |
| Despliegues frecuentes | Cambiar un servicio no afecta a los demás |
Desafíos
Los microservicios no son gratuitos. Introducen complejidad:
- Comunicación entre servicios: ¿Cómo hablan entre sí? ¿Qué pasa si uno falla?
- Datos distribuidos: mantener consistencia entre múltiples bases de datos es difícil
- Observabilidad: trazar un error que pasó por 5 servicios requiere herramientas específicas
- Overhead operacional: cada servicio necesita su propio CI/CD, monitoring, logs
Por eso los microservicios son más adecuados para sistemas complejos con equipos grandes.
Cuándo tiene sentido
✅ Microservicios funcionan bien cuando:
- El sistema es grande y complejo (> 50 endpoints)
- Varios equipos trabajan en paralelo sobre distintas partes
- Partes del sistema tienen requerimientos de escala muy diferentes
- Necesitas alta disponibilidad (fallos parciales son aceptables)
❌ Un monolito bien estructurado es mejor cuando:
- El equipo es pequeño (< 5 desarrolladores)
- El sistema está en etapa temprana o pivotando frecuentemente
- La complejidad de distribuidos superaría los beneficios
Empresas que usan microservicios
- Netflix: más de 1000 microservicios para streaming global
- Amazon: cada función del carrito, checkout, recomendaciones es un servicio
- Uber: separó su monolito en servicios por tipo de transporte y ciudad
Términos relacionados
- [[API]] - El canal de comunicación entre microservicios
- [[Docker]] - Cada microservicio corre típicamente en su propio contenedor
- [[DevOps]] - Las prácticas necesarias para operar microservicios exitosamente
- [[REST]] - El protocolo más común para comunicación entre microservicios
Recursos adicionales:
- Martin Fowler - Microservices - El artículo original que definió el término
- AWS - ¿Qué son los microservicios?