Entrada

Multi-tenancy en Arquitecturas SaaS con MACH: Aislamiento, Escalado y Modelo de Datos

Multi-tenancy en Arquitecturas SaaS con MACH: Aislamiento, Escalado y Modelo de Datos

La implementacion de multi-tenancy en plataformas SaaS construidas sobre arquitectura MACH representa uno de los desafios de diseno mas complejos y consequentes que enfrenta un equipo de ingenieria. A diferencia de una aplicacion para un solo cliente, una plataforma SaaS multi-tenant debe aislar los datos y la configuracion de cada cliente (tenant), escalar de forma independiente para tenants con diferentes volumenes de trafico, y cumplir con regulaciones de privacidad y residencia de datos que varian por region geografica.

Las Tres Estrategias de Multi-tenancy

Existen tres patrones arquitectonicos principales para implementar multi-tenancy, cada uno con trade-offs diferentes en terminos de aislamiento, costo y complejidad operacional.

Estrategia 1: Silo (Infraestructura Dedicada por Tenant)

En el modelo Silo, cada tenant tiene su propio stack de infraestructura: bases de datos independientes, instancias separadas de cada microservicio y namespaces de Kubernetes exclusivos. Este enfoque maximiza el aislamiento de datos y el performance predecible, pero tiene el mayor costo de infraestructura y la mayor complejidad operacional.

Es la eleccion correcta cuando los tenants son empresas grandes con requisitos regulatorios estrictos (HIPAA, FedRAMP, GDPR con residencia de datos especifica), estan dispuestos a pagar un precio premium por el aislamiento garantizado, o cuando el incumplimiento de un tenant podria comprometer a otros (por ejemplo, un tenant con trafico viral que impacta a los demas).

Estrategia 2: Bridge (Base de Datos Compartida, Schema por Tenant)

En el modelo Bridge, los microservicios son compartidos entre tenants, pero cada tenant tiene su propio schema de base de datos. En PostgreSQL, esto se implementa usando el concepto de schemas: cada tenant obtiene un schema aislado dentro de la misma instancia de base de datos, pero los datos no pueden cruzarse entre schemas sin permisos explicitos.

Este enfoque ofrece un balance razonable entre aislamiento y costo. Los recursos de computo (pods de Kubernetes) son compartidos, pero los datos estan logicamente separados. El inconveniente principal es que el numero de tenants esta limitado por el numero maximo de schemas que la base de datos puede manejar eficientemente, tipicamente entre 100 y 1,000 tenants por instancia segun el nivel de actividad.

Estrategia 3: Pool (Infraestructura Completamente Compartida)

En el modelo Pool, todos los tenants comparten la misma infraestructura, incluyendo las bases de datos. Los datos se diferencian por un campo tenant_id en cada tabla. Este modelo es el mas economico y el que mejor escala a miles de tenants pequenos, pero tiene el mayor riesgo de “noisy neighbor” (un tenant con queries pesadas impacta el performance de todos).

Para mitigar el riesgo de noisy neighbor en el modelo Pool, las tecnicas clave incluyen rate limiting por tenant en el nivel de API, query timeouts configurados por plan de pricing, e indexes compuestos que siempre incluyen tenant_id como primera columna para garantizar que cada query usa el indice correcto y no hace full table scans que afecten a otros tenants.

Implementacion en MACH: Tenant Context Propagation

En una arquitectura MACH, el context del tenant (que cliente esta haciendo la solicitud) debe propagarse a traves de todos los microservicios de forma transparente. El patron recomendado es usar JWT con claims del tenant mas propagacion mediante headers HTTP.

Cuando el usuario se autentica, el JWT incluye el tenant_id y el plan del tenant (que determina los rate limits y features disponibles). El API Gateway valida el JWT y agrega headers como X-Tenant-ID y X-Tenant-Plan a todas las requests que llegan a los microservicios. Cada microservicio lee estos headers y aplica la logica de aislamiento apropiada.

En Kubernetes, el tenant context tambien se puede usar para el scheduling: tenants de plan Enterprise pueden tener sus pods schedulados en node pools dedicados con mayor CPU y memoria, mientras que tenants de plan Starter comparten node pools comunes.

Onboarding de Nuevos Tenants: El Desafio del Tiempo de Activacion

En una plataforma SaaS multi-tenant bien disenada, el onboarding de un nuevo tenant debe ser completamente automatizado y tomar minutos, no dias. El flujo tipico con MACH incluye: el tenant completa el formulario de registro y pago, el Tenant Management Service crea los registros en la base de datos de tenants, provisiona el schema o base de datos segun la estrategia de aislamiento, configura los rate limits en el API Gateway, y genera las credenciales iniciales. Todo esto debe completarse en menos de 30 segundos.

Para el modelo Silo donde se requiere crear infraestructura dedicada, el proceso se automatiza con Terraform y GitHub Actions: el Tenant Management Service hace una llamada a la API de Terraform Cloud para aplicar un modulo pre-definido con los recursos del tenant, y el nuevo entorno esta listo en 5 a 10 minutos.

Facturacion y Limites por Plan

El multi-tenancy en SaaS esta intrinsecamente ligado al modelo de negocio. Los microservicios deben ser capaces de aplicar limites diferentes segun el plan del tenant (Starter, Growth, Enterprise) en tiempo real. Los limites tipicos incluyen requests por minuto, cantidad de usuarios, espacio de almacenamiento, y acceso a features especificas.

La implementacion mas efectiva usa un servicio centralizado de Feature Flags y Entitlements (como LaunchDarkly o un servicio interno) que los microservicios consultan para determinar si un tenant tiene acceso a una funcionalidad especifica y cuales son sus limites actuales. Este servicio debe tener un SLA de latencia menor a 5ms para no impactar el tiempo de respuesta de las APIs del producto.

Casos de Uso por Estrategia en E-commerce MACH

En una plataforma de e-commerce headless multi-tenant con arquitectura MACH, la eleccion de estrategia suele ser mixta: modelo Silo para clientes enterprise con mas de 1 millon de dolares anuales en facturacion que requieren SLAs garantizados y cumplimiento regulatorio estricto, modelo Bridge para clientes de nivel medio con entre 10,000 y 100,000 dolares anuales que necesitan buen aislamiento pero no justifican infraestructura dedicada, y modelo Pool para clientes pequenos con planes de entrada de hasta 10,000 dolares anuales donde el costo de operacion debe ser minimo para que el margen del negocio sea viable.

Esta arquitectura hibrida es lo que se conoce como Tiered Multi-tenancy y es el patron que usan la mayoria de las plataformas SaaS exitosas de escala global.

Conclusion: Multi-tenancy como Ventaja Competitiva

Implementar multi-tenancy correctamente en una arquitectura MACH no es solo un requisito tecnico: es una ventaja competitiva. Las plataformas que pueden incorporar nuevos tenants en minutos, escalar de forma independiente por tenant, y garantizar aislamiento de datos cumplen las expectativas de los clientes enterprise modernos que esperan el mismo nivel de servicio de una plataforma SaaS compartida que de su propia infraestructura privada.

El diseno de multi-tenancy debe ser una decision arquitectonica temprana, no un refactor tardio. Los equipos que posponen esta decision hasta que la plataforma ya tiene clientes en produccion enfrentan migraciones extremadamente costosas y arriesgadas. Integrar los patrones de multi-tenancy desde el primer microservicio simplifica enormemente el camino hacia la escala.

Lenin Meza
Lenin Meza Senior Solutions Architect

Senior Solutions Architect y Lead Platform Engineer con más de 10 años de experiencia diseñando arquitecturas MACH, microservicios distribuidos, DevOps y plataformas cloud-native escalables.

Esta entrada está licenciada bajo CC BY 4.0 por el autor.