Back

Adiós a la fiebre de los Microservicios: El renacer del Monolito Modular en 2025

Seamos honestos. Durante los últimos diez años, si en una entrevista de System Design no decías "Microservicios", estabas fuera.

Hemos visto startups con tres desarrolladores montando clusters de Kubernetes antes de tener un solo usuario real. Tomaban una lógica de negocio de 500 líneas y la partían en seis servicios distintos. Era la época dorada del "Resume Driven Development" (Desarrollo Orientado al Currículum).

Pero en 2025, la fiesta se ha acabado. Amazon Prime Video ahorró un 90% de costes migrando de vuelta al monolito. DHH y la comunidad de Rails vuelven a sacar pecho con la "Majestuosidad del Monolito".

La industria se está dando cuenta de una verdad incómoda:
"Los microservicios son deuda técnica con intereses de usura, y la mayoría de equipos no pueden pagarlos."

Ojo, no digo que los microservicios sean el diablo. Pero sí digo que nos hemos pasado de frenada. En este artículo vamos a ver por qué el péndulo está volviendo y cómo el "Monolito Modular" es la arquitectura sensata que deberías estar construyendo.

La gran mentira del "Desacoplamiento"

Nos vendieron la moto muy bien: "¡Divide y vencerás! ¡Si el Servicio A cae, el B sigue vivo!".

La teoría es preciosa. La realidad es que la mayoría ha construido un Monolito Distribuido. Y créeme, eso es lo peor de los dos mundos.

1. No has desacoplado, solo has puesto latencia en medio

Si para pintar la home necesitas llamar al Servicio de Usuarios, que llama al de Permisos, que llama al de Base de Datos... amigo, eso está acoplado.

La diferencia es que antes, en un monolito, si cambiabas una función, tu IDE te chivaba los errores de compilación al instante. Ahora, un cambio en el esquema JSON de un servicio rompe la producción en otro servicio que ni sabías que existía. El refactor que antes te llevaba 10 segundos, ahora requiere reuniones entre tres equipos y una coordinación de despliegue digna de la NASA.

2. El impuesto revolucionario de la red

En un monolito, llamar a una función es gratis (nanosegundos).
En microservicios, esa misma llamada paga peaje:

  1. Serializar JSON (CPU)
  2. Viaje por la red (Latencia)
  3. Load Balancer (Más latencia)
  4. Deserializar (CPU)
  5. Ejecutar
  6. ...y vuelta a empezar.

He visto sistemas haciendo 50 peticiones HTTP internas para un simple login. Eso no es escalar, eso es quemar dinero en AWS para calentar el planeta.

La pesadilla de Operaciones

"En mi local funciona". Ya, pero ahora tu "local" necesita 15 contenedores de Docker y tu portátil parece un avión despegando.

  • ¿Dónde está el error?: Antes hacías un grep al log. Ahora necesitas montar Jaeger, Zipkin o pagar una millonada a Datadog solo para seguir el rastro de una petición que murió en algún lugar entre el servicio de Pagos y el de Notificaciones.
  • Adiós a las transacciones: Olvídate del maravilloso BEGIN... COMMIT. Bienvenido al infierno de la Consistencia Eventual y las Sagas. Te vas a pasar más tiempo programando "qué pasa si esto falla a medias" que programando la feature en sí.

La solución: El Monolito Modular

¿Volvemos al código espagueti de 2012? ¿Al server.js de 5GB? Ni hablar.

La respuesta es el Monolito Modular.
Físicamente es un solo artefacto (un repo, un deploy). Lógicamente es un sistema de microservicios.

Las reglas de oro

  1. Un solo deploy: CI/CD trivial. Un solo binario/contenedor.
  2. Comunicación en memoria: Nada de HTTP. Llamadas a métodos tipados. Rápido y seguro.
  3. Murallas chinas: El módulo de Pedidos NO puede importar modelos del módulo de Usuarios. Prohibido.

Cómo se ve en código

En Node.js o TypeScript, puedes forzar esto con herramientas como Nx o reglas de ESLint no-restricted-imports.

src/ modules/ users/ index.ts # (PÚBLICO) Solo exporta interfaces y servicios fachada core/ # (PRIVADO) Toda la lógica sucia aquí db/ # (PRIVADO) Nadie de fuera toca esto orders/ ... shared/ # Lo mínimo indispensable (logs, date utils) app.ts # El pegamento

Si intentas hacer import User from '../users/db/User', el linter te debería dar un guantazo en la mano. Así se mantiene la arquitectura, no con diagramas en Confluence que nadie lee.

¿Cuando usar Microservicios entonces?

No están muertos, solo que no deberían ser el default. Úsalos cuando:

  1. Escalas personas, no tráfico: Tienes 150 ingenieros backend. Coordinar PRs en un solo repo es un infierno. Ahí sí, pagas el peaje técnico para ganar agilidad organizacional.
  2. Políglota por necesidad: Un módulo necesita GPUs y Python para IA, el resto es una API REST en Node. Sepáralos.
  3. El "vecino ruidoso": Una feature específica tiene picos de tráfico bestiales que tumban todo el servidor. Aísla esa feature.

Conclusión: Menos hype y más foco

El diseño de sistemas va de elegir qué problemas quieres tener.
Microservicios cambia problemas de código por problemas de red y sistemas distribuidos. Para el 99% de los proyectos, es un mal cambio.

En 2025, ser un ingeniero Senior de verdad significa tener el valor de decir "No, vamos a hacerlo simple".
Monta un Monolito Modular bien estructurado. Duerme tranquilo por las noches. Y si algún día tienes el "bendito problema" de tener 100 millones de usuarios, ya lo partirás.

Lo aburrido, a veces, es lo más rentable.

System DesignArchitectureMicroservicesBackendDevOps