Todos los artículos

Microservicios vs Monolito: ¿Qué arquitectura es la adecuada para tu SaaS?

El debate entre microservicios y monolito tiene una respuesta clara para la mayoría de los productos SaaS — y no es la que la mayoría espera. Analizamos cuándo gana cada arquitectura, cuáles son los costos reales y qué recomendamos a los clientes que construyen plataformas SaaS hoy en día.

2 de septiembre de 2025
Cyberbeak Team
Microservicios vs Monolito: ¿Qué arquitectura es la adecuada para tu SaaS?

Algo que escuchamos regularmente de los fundadores que están construyendo nuevos productos SaaS es: "Queremos empezar con microservicios desde el principio. Así es como se construye bien, ¿verdad?"

Nuestra respuesta, casi siempre, es no.

No porque los microservicios sean malos. Son genuinamente poderosos y los construimos con regularidad. Pero la mayoría de los equipos que tratan los microservicios como el estándar moderno se están preparando para un lanzamiento más lento, una experiencia de depuración más difícil y costos operacionales significativamente más altos — todo antes de tener un solo cliente de pago o un encaje producto-mercado demostrado.

El debate entre microservicios y monolito ha sido ruidoso en la comunidad de ingeniería durante casi una década. Las charlas en conferencias, los blogs de ingeniería y las ofertas de trabajo han creado colectivamente la impresión de que los microservicios son la opción sofisticada, escalable y seria, y que los monolitos son reliquias de una era menos iluminada. Ese enfoque es engañoso, y queremos ponerle fin.

En esta guía vamos a explicar ambas arquitecturas con honestidad, recorrer los costos operacionales reales que rara vez se mencionan en el discurso a favor de los microservicios, definir las condiciones en las que cada enfoque gana genuinamente, y decirte exactamente qué recomendamos a los clientes cuando nos traen un producto SaaS para construir.


¿Qué es un monolito?

Un monolito es una aplicación en la que toda la funcionalidad — gestión de usuarios, facturación, lógica de negocio, notificaciones, reportes — reside en una única unidad desplegable. Lo construyes, lo despliegas como un todo y normalmente comparte una sola base de datos.

Esa descripción por sí sola es suficiente para que la palabra "monolito" suene como una limitación, pero esa reacción es un malentendido que vale la pena abordar directamente. Un monolito no es un enredo caótico de código. No es código heredado sujeto con cinta adhesiva. Es una decisión arquitectónica — la misma con la que GitHub, Shopify, Stack Overflow y Basecamp fueron construidos y escalados a bases de usuarios enormes.

Lo importante que hay que entender es que monolito no significa sin estructura. Un monolito bien construido tiene límites internos de módulos claros, interfaces bien definidas entre componentes y una separación disciplinada de responsabilidades. El código que gestiona los pagos no accede directamente al código que gestiona las sesiones de usuario. Los módulos están lógicamente separados aunque se ejecuten en el mismo proceso.

Un monolito también se beneficia de la simplicidad en varias áreas fundamentales: hay una sola base de código que navegar, una sola pipeline de despliegue que mantener, un solo lugar donde colocar un punto de interrupción cuando algo falla, y transacciones de base de datos que funcionan en toda la aplicación sin ninguna infraestructura de coordinación adicional.


¿Qué son los microservicios?

Una arquitectura de microservicios descompone una aplicación en una colección de servicios pequeños e independientemente desplegables, cada uno responsable de una capacidad de negocio específica. Un SaaS de comercio electrónico podría dividirse en un servicio de pedidos, un servicio de inventario, un servicio de pagos, un servicio de notificaciones y un servicio de usuarios — cada uno ejecutándose como su propio proceso con su propio ciclo de vida de despliegue y su propia base de datos.

Los servicios se comunican a través de una red, típicamente usando APIs REST, gRPC o colas de mensajes como RabbitMQ o Apache Kafka. Una acción de usuario que antes significaba llamar a una función dentro de un monolito ahora significa hacer una solicitud de red entre dos servicios separados — o publicar un evento que uno o más servicios posteriores consumen de forma asíncrona.

El atractivo es real. Los despliegues independientes significan que puedes lanzar un cambio en el servicio de pagos sin tocar el servicio de pedidos. El escalado independiente significa que puedes aprovisionar más capacidad para el único servicio que está bajo carga en lugar de escalar toda la aplicación. El desarrollo políglota significa que diferentes servicios pueden usar diferentes lenguajes o frameworks si el equipo tiene una razón legítima para ello. Y los límites de servicio claramente definidos imponen un tipo de disciplina estructural que puede, en el entorno adecuado, hacer que una base de código grande sea más fácil de gestionar entre múltiples equipos.

Esos beneficios son genuinos. La pregunta es si valen los costos — y los costos son considerablemente más altos de lo que la mayoría del discurso admite.


Los costos reales de los microservicios

Esta es la sección que la mayoría de los defensores de los microservicios omiten rápidamente. Queremos dedicarle tiempo real aquí, porque es donde los proyectos se meten en problemas.

La complejidad operacional no es incremental — es exponencial. Cada servicio necesita su propia pipeline de CI/CD, su propia configuración de contenedorización, sus propias variables de entorno, sus propios chequeos de salud, su propia estrategia de despliegue. Para cinco servicios, eso son cinco de todo. Para quince servicios, se convierte en un trabajo de ingeniería de infraestructura a tiempo completo.

El rastreo distribuido es genuinamente difícil. Cuando un error hace que una solicitud de usuario falle en un monolito, tienes una sola traza de pila que te dice exactamente qué ocurrió. En una arquitectura de microservicios, esa misma solicitud puede haber tocado cuatro servicios. El error puede originarse en el tercer servicio, aparecer en el cuarto y registrarse en un formato que no coincide con los demás. Necesitas herramientas de rastreo distribuido adecuadas — OpenTelemetry, Jaeger, Datadog APM — y el equipo necesita saber cómo usarlas. Esta es una carga que no existe en un monolito.

La latencia de red se acumula. Las llamadas a funciones dentro de un monolito se miden en microsegundos. Las llamadas HTTP entre servicios se miden en milisegundos. En una arquitectura con muchas llamadas entre servicios por solicitud de usuario, esa latencia se multiplica. Puedes mitigarla con caché y patrones asíncronos, pero ambos introducen complejidad adicional.

La consistencia de datos entre límites de servicio es un problema difícil. En un monolito, una transacción de base de datos es atómica — o todo se confirma o nada lo hace. Cuando dos piezas de datos relacionadas viven en dos bases de datos de servicios separados, pierdes esa garantía. Mantener la consistencia de los datos requiere patrones como el patrón saga, transacciones distribuidas o consistencia eventual — todos los cuales requieren un diseño cuidadoso y pruebas exhaustivas.

La depuración es más difícil en todos los niveles. Reproducir un problema de producción que abarca múltiples servicios requiere coordinar registros, trazas y estado entre varios sistemas. Lo que tarda treinta minutos en depurarse en un monolito puede tardar días en una arquitectura de microservicios mal instrumentada.

El costo de coordinación entre equipos es real. Si un equipo es propietario del servicio de pedidos y otro del servicio de inventario, una funcionalidad que toca ambos requiere sincronización entre equipos. Cada cambio en el contrato entre servicios es una negociación. El versionado de la API se convierte en una preocupación permanente.

Ninguno de estos costos es fatal para una organización de ingeniería madura con las herramientas y el tamaño de equipo adecuados. Pero para un equipo SaaS en etapa temprana de tres a ocho ingenieros intentando lanzar rápido e iterar sobre un producto que puede pivotar tres veces antes de encontrar su mercado — a menudo son fatales.


Cuándo ganan los monolitos

Un monolito es la elección correcta en todas las siguientes situaciones, y la mayoría de los productos SaaS en etapa temprana encajan en varias de ellas simultáneamente.

Estás antes del encaje producto-mercado. Si aún no sabes exactamente quiénes son tus usuarios, por qué pagarán o qué funcionalidades impulsan realmente la retención, estarás cambiando tu modelo de datos, tu lógica de negocio y tus flujos de usuario con frecuencia. Los monolitos hacen ese tipo de iteración rápida. Los microservicios la hacen dolorosa.

Tu equipo tiene menos de diez ingenieros. Los beneficios organizacionales de los microservicios — permitir que múltiples equipos grandes trabajen de forma independiente — simplemente no aplican a equipos pequeños. Un equipo de cinco personas trabajando en una base de código bien estructurada es más productivo que un equipo de cinco gestionando cinco servicios con toda la carga que eso conlleva.

Tienes un presupuesto o restricción de capital ajustados. La infraestructura de microservicios cuesta más ejecutarla y más operarla. En AWS, ejecutar diez servicios separados con redundancia adecuada y herramientas de observabilidad costará significativamente más cada mes que ejecutar una sola aplicación bien aprovisionada. Cuando el capital es limitado, esa diferencia importa.

Tus requisitos de escalado no son específicos por servicio. Si tu cuello de botella es la aplicación completa en lugar de un componente aislado, el argumento del escalado independiente a favor de los microservicios no aplica.

El patrón que recomendamos en estos casos es el monolito modular: una aplicación desplegable única con límites internos de módulos rigurosamente aplicados. Obtienes la simplicidad operacional de un monolito y la disciplina estructural que hace posible extraer servicios más adelante, sin la complejidad de sistemas distribuidos que aún no estás listo para gestionar.


Cuándo tienen sentido los microservicios

Los microservicios no son la elección incorrecta de forma universal — son la elección incorrecta cuando se aplican prematuramente. Hay condiciones claras en las que son genuinamente la herramienta adecuada.

Tienes equipos de ingeniería grandes e independientes. Si tienes una organización de ingeniería de veinte personas donde equipos distintos son propietarios de áreas de producto distintas, los microservicios permiten que cada equipo sea propietario de su stack completo: base de código, pipeline de despliegue, rotación de guardia y cadencia de lanzamiento. Esa autonomía es un multiplicador de productividad real a escala.

Tienes requisitos de escalado genuinamente independientes. Si tu pipeline de procesamiento de imágenes necesita escalar a cien instancias durante el horario laboral y tu servicio de facturación necesita dos, ejecutarlos en el mismo proceso es ineficiente. El autoescalado a nivel de servicio resuelve un problema real aquí.

Tienes un producto maduro con contextos delimitados claros. Después de varios años de operación, los límites naturales en tu dominio — donde una parte del sistema rara vez necesita conocer el estado interno de otra — se vuelven evidentes. Extraer servicios a lo largo de esos límites, cuando los entiendes bien, es mucho más seguro que especular sobre ellos en el primer día.

Necesitas tecnología políglota. Si tu producto principal es Node.js pero tu pipeline de procesamiento de datos se sirve genuinamente mejor con Python, y tu capa de comunicación en tiempo real necesita Go por rendimiento, los microservicios te permiten tomar esas decisiones por servicio. Esto es suficientemente raro en la práctica como para que no lo usaríamos como la justificación principal.


El monolito modular: lo mejor de ambos mundos

El monolito modular es el patrón que más frecuentemente nos encontramos recomendando, y merece su propia sección porque a menudo se pasa por alto en el enfoque binario microservicios-vs-monolito.

La idea es sencilla: construir un monolito, pero aplicar límites internos estrictos entre módulos. Cada módulo es propietario de sus propios modelos de datos y lógica de negocio interna. Los módulos se comunican a través de interfaces definidas — no accediendo directamente a las tablas de base de datos o funciones internas de otro módulo. El módulo de facturación no importa los modelos ORM del módulo de autenticación. Si necesita datos de usuario, llama a una interfaz pública que el módulo de autenticación expone.

En la práctica, esto significa usar una estructura de carpetas y reglas de importación que reflejen los límites de servicio que eventualmente podrías querer. En una aplicación Node.js podría significar paquetes separados dentro de un monorepo. En una aplicación Rails podría significar engines separados o convenciones claras de espaciado de nombres aplicadas por reglas de linting.

El resultado es una aplicación que se despliega como una unidad, se depura como una unidad y ejecuta una sola base de datos — pero está organizada internamente de una manera que hace que extraer un servicio más adelante sea un proyecto de ingeniería claramente delimitado en lugar de una reescritura completa. Cuando tu módulo de gestión de usuarios tiene interfaces limpias y sus propias migraciones, extraerlo a un servicio separado significa mover ese código a un nuevo despliegue, no desenredar años de dependencias transversales.

Esto no es un compromiso. Para la mayoría de los productos SaaS en la mayoría de las etapas, es la elección estratégicamente correcta.


Tabla comparativa

DimensiónMonolitoMonolito modularMicroservicios
Tamaño de equipo adecuado1–10 ingenieros1–20 ingenieros10+ ingenieros por servicio
Complejidad de despliegueBajaBajaAlta
Velocidad de desarrollo (etapa temprana)RápidaRápidaLenta
Costo operacionalBajoBajoAlto
Escalabilidad independienteNoNo
Facilidad de depuraciónFácilFácilDifícil
Consistencia de datos entre serviciosTrivial (transacciones)Trivial (transacciones)Difícil (sagas / consistencia eventual)
Extracción futura de serviciosPosible, pero arriesgadaDirectaN/A

Estrategia de base de datos

La forma en que gestionas tu base de datos es inseparable de tu decisión arquitectónica, y vale la pena abordarlo directamente porque los errores aquí son costosos de deshacer.

Monolito y monolito modular: base de datos compartida

Tanto el monolito como el monolito modular utilizan típicamente una base de datos relacional compartida — Postgres, MySQL o similar. Esto es una ventaja, no una limitación. Las transacciones ACID en toda la aplicación hacen triviales las garantías de consistencia. Las claves foráneas funcionan. Los joins funcionan. Un error que modifica parcialmente dos tablas puede revertirse de forma atómica.

En un monolito modular, aunque los módulos comparten la base de datos, cada módulo debe ser propietario de su propio conjunto de tablas y evitar leer directamente las tablas de otros módulos. Esto preserva el límite del módulo aunque el almacenamiento subyacente sea compartido.

Microservicios: base de datos por servicio

El patrón estándar de microservicios es una base de datos por servicio — cada servicio es propietario de su propia base de datos y ningún otro servicio puede conectarse a ella. Esto aplica el límite de servicio a nivel de infraestructura y permite que cada servicio elija su propia tecnología de base de datos.

El costo es la consistencia de datos. El patrón saga es la solución estándar: una secuencia de transacciones locales, cada una publicando un evento que desencadena el siguiente paso. Si un paso falla, se ejecutan transacciones compensatorias para deshacer los pasos anteriores. Implementar sagas correctamente no es trivial. Probarlas es más difícil. Depurarlas cuando algo falla requiere un buen rastreo distribuido y una correlación cuidadosa de registros.

Nuestra recomendación predeterminada

Comienza con Postgres y un esquema bien modelado. Estructura tus migraciones y el espaciado de nombres de tablas por módulo desde el primer día. Puedes escalar una sola instancia de Postgres más de lo que la mayoría de los productos SaaS jamás necesitarán. Cuando genuinamente necesites extraer un servicio, la migración de datos es un proyecto claramente delimitado en lugar de una emergencia arquitectónica.


Qué recomendamos en Cyberbeak

Nuestra recomendación predeterminada para nuevos productos SaaS es el monolito modular — y mantenemos esa posición firmemente hasta que el producto y el equipo alcancen condiciones que justifiquen genuinamente el costo operacional de los microservicios.

En la práctica, eso significa que normalmente construimos en un monorepo bien estructurado, con una estructura clara de módulos de dominio aplicada desde el primer día, límites de API limpios entre módulos y una sola instancia de Postgres. Configuramos CI/CD adecuado, registro estructurado y observabilidad básica desde el inicio — no porque esperemos necesitar rastreo distribuido, sino porque los buenos hábitos de observabilidad son valiosos independientemente de la arquitectura.

Hemos utilizado este enfoque en varios proyectos de clientes donde el instinto inicial era ir con microservicios completos. En todos los casos, el equipo lanzó su MVP más rápido, iteró más rápidamente sobre el producto y — de manera crítica — no gastó su capital temprano en configuración de Kubernetes y depuración de mallas de servicios. Dos de esos productos han alcanzado desde entonces una escala en la que extraer servicios específicos tenía sentido, y dado que los límites internos de módulos eran limpios desde el principio, esas extracciones fueron proyectos de ingeniería planificados en lugar de crisis.

Sí construimos microservicios. Para clientes con productos establecidos, grandes equipos de ingeniería o requisitos de escalado genuinamente a nivel de servicio, los microservicios son absolutamente la respuesta correcta. Pero no recomendamos empezar por ahí, y respondemos claramente cuando los clientes asumen que comenzar con microservicios es la elección ambiciosa o técnicamente rigurosa.

La ambición en arquitectura significa elegir la estructura que le da a tu producto la mejor oportunidad de tener éxito — no la estructura que parece más impresionante en un diagrama de diseño de sistema.


Preguntas frecuentes

¿Podemos migrar de un monolito a microservicios más adelante?

Sí, y este es en realidad el camino preferido para muchos productos exitosos. La clave es construir el monolito con límites internos limpios para que el trabajo de extracción esté claramente delimitado. Shopify, GitHub y Stack Overflow todos comenzaron como monolitos y extrajeron servicios de forma selectiva a medida que la escala y el crecimiento del equipo lo hacían genuinamente valioso. El riesgo de esperar es bajo si construyes el monolito modular correctamente.

¿Qué pasa con serverless? ¿Eso cambia el cálculo?

Las funciones serverless (AWS Lambda, Vercel Edge Functions) añaden otra dimensión pero no cambian fundamentalmente el balance principal. Serverless puede introducir la misma complejidad de sistemas distribuidos que los microservicios — arranques en frío, restricciones sin estado, depuración distribuida — sin los beneficios organizacionales completos. Usamos serverless de forma selectiva para cargas de trabajo específicas (trabajos en segundo plano, webhooks, tareas programadas) junto a una aplicación principal, en lugar de como un reemplazo arquitectónico total.

¿Esta decisión afecta significativamente el costo de infraestructura?

Sí. Un monolito bien aprovisionado en un solo servidor o un pequeño clúster es significativamente más barato de ejecutar que diez microservicios cada uno con sus propios recursos de contenedor, balanceadores de carga y configuración de monitoreo. Para productos bootstrapped o en etapa temprana, la diferencia en el costo de infraestructura puede ascender a cientos o miles de dólares al mes antes de alcanzar una escala donde los beneficios de los microservicios se materialicen.

¿Cómo sé cuándo mi producto está listo para los microservicios?

Házte tres preguntas: ¿Tienes un equipo lo suficientemente grande como para que el despliegue independiente reduzca significativamente la sobrecarga de coordinación? ¿Tienes un servicio específico con requisitos de escalado genuinamente diferentes al resto de la aplicación? ¿Tienes contextos delimitados claros y estables en tu dominio que hayan sido probados contra un uso real? Si la respuesta a las tres es sí, vale la pena evaluar los microservicios. Si alguna respuesta es no, aún no estás ahí.


Si estás construyendo un producto SaaS y quieres una conversación honesta sobre la arquitectura que le da la mejor oportunidad de tener éxito — no solo la que suena más sofisticada — nos alegra hablar. Trabajamos con equipos en cada etapa, desde MVPs pre-seed hasta plataformas establecidas con problemas reales de escalado, y damos el mismo consejo directo independientemente de dónde estés en ese camino. Contáctanos y te diremos exactamente qué construiríamos en tu posición.

¿Listo para construir?

Habla con nuestro equipo sobre tu proyecto

Trabajamos con empresas en el Reino Unido, EE. UU., EAU, Arabia Saudita, Canadá, Australia y Alemania para desarrollar software personalizado, plataformas SaaS y sistemas marketplace.