Command Palette

Search for a command to run...

ES·EN

Nivel 1 · 20 min

Monolito vs Microservicios

La decisión entre monolito y microservicios es una de las más impactantes en arquitectura de software. Ambos son válidos —la elección correcta depende del tamaño del equipo, la madurez del dominio y los requisitos operacionales.

Trade-offs del Monolito

El monolito es simple de desarrollar, testear y desplegar inicialmente. Todo el código en un proceso: llamadas de función en lugar de red, una sola base de datos, deployment atómico. Las desventajas emergen con el crecimiento: ciclos de build largos, escalado solo es posible replicar todo el servicio, un bug puede tumbar todo, el coupling escondido dificulta entender impactos de cambios.

Trade-offs de Microservicios

Los microservicios permiten despliegue independiente, escalado selectivo y equipos autónomos. Pero introducen complejidad operacional masiva: service discovery, distributed tracing, eventual consistency, latencia de red en cada llamada, y la dificultad de debugging distribuido. La regla de oro: empezás con monolito, dividís cuando el dolor es real.

Strangler Fig Pattern

El patrón Strangler Fig permite migrar de monolito a microservicios incrementalmente. Un API Gateway enruta requests al monolito o a nuevos microservicios. Se extrae funcionalidad de a poco, mientras el monolito sigue funcionando. El nombre viene de la higuera estranguladora que crece alrededor del árbol huésped hasta reemplazarlo.

Puntos clave

  • Empezá con monolito —los microservicios prematuros añaden complejidad sin beneficio cuando el dominio no está maduro.
  • Los microservicios transfieren complejidad del código a la operación —el equipo debe estar preparado para eso.
  • Strangler Fig permite migración incremental sin big bang rewrite —la estrategia más segura.

Code example

// Strangler Fig: API Gateway decide dónde enrutar
// nginx.conf o API Gateway
location /api/orders {
  // Ruta al nuevo microservicio de órdenes
  proxy_pass http://order-service:8080;
}
location /api/users {
  // Todavía en el monolito mientras se extrae
  proxy_pass http://monolith:3000;
}
location /api/legacy {
  // Todo lo demás todavía en el monolito
  proxy_pass http://monolith:3000;
}