Núcleo multi-tenant
El núcleo multi-tenant es una capa básica de plataforma/producto que sirve a muchos clientes independientes (tenantes) en recursos compartidos con aislamiento garantizado, límites administrados y personalización segura. Un núcleo bien diseñado reduce el TCO, acelera el onboarding, simplifica las liberaciones y proporciona una calidad predecible para cada inquilino.
1) Modelo de inquilino y límites de aislamiento
Definiciones
Tenant (Tenant/Org/Account): organización lógica con sus propios usuarios, datos, políticas y límites.
Aislamiento: capacidad para evitar que un inquilino afecte los datos, el rendimiento y la seguridad de otro.
Niveles de aislamiento
1. Datos: BD/esquemas/tablas individuales, cifrado por «clave de arrendatario», filtros 'tenant _ id'.
2. Cálculos: cuotas de CPU/RAM/IO, grupo de workers por tenant o colas «ponderadas».
3. Red: segmentación, puntos de venta privados/VPN, listas de permisos por inquilino.
4. Operaciones: migraciones, backups, RD e incidentes con límites de impacto «por inquilino».
Patrones de multitenanticidad
Silo (aislamiento rígido): clústeres/DB individuales por tenante. Máxima seguridad, alto precio.
Pool (recursos compartidos): infraestructura compartida con aislamiento lógico; mejor eficiencia, mayor riesgo de «noisy neighbor».
Puente/Hybrid: híbrido - plano de control común + selectivamente «silo» para clientes VIP/ajustables.
2) Identificación y enrutamiento de solicitudes de arrendamiento
Permiso de arrendatario (Tenant Resolution)
Por dominio: 'https ://{ tenant} .example. com`
En el camino: '/t/{ tenant }/... '
Por título: 'X-Tenant-Id', 'X-Org' (verificación de firma)
Por token: los estigmas 'tenant _ id', 'org _ id', 'plan', 'scopes'
En
La puerta de enlace L7 (API gateway/Ingress) recupera 'tenant _ id', enriquece el contexto ('plan', límites, región), escribe en tracks/logs.
Los servicios funcionales aceptan el contexto de «sólo lectura»; decisiones de ruta y límites toma gateway/polisi motor.
3) Datos y esquemas: estrategias
Opciones de almacenamiento
Shared-schema, row-level: un conjunto de tablas, campo 'tenant _ id', RLS estricto (Row-Level Security).
Shared-DB, per-schema: un DBM, un circuito separado por tenante; equilibrio entre manejo y aislamiento.
Per-DB/cluster: DB/clúster separado por tenante; más caro, más fácil para las demandas soberanas.
Prácticas
En todas partes, transmitir explícitamente 'tenant _ id' e incluirlo en claves/índices compuestos.
RLS/directivas de acceso a nivel de DBMS + validación de servicio «doble cerradura».
Cifrado: jerarquía de claves (root KMS → key-envelope por tenant → DEK por objeto).
El archivo/retiro y el «derecho al olvido» son administrados por políticos a nivel de inquilinos.
4) Configuraciones, fichas y versiones
Configuraciones por tenante
Tabla/almacén 'tenant _ config' (plan, cuotas, banderas de fichas, localización, SLA).
Prioridades de configuración: default → plan → tenant → entorno → usuario.
Caché de confecciones con TTL corto y discapacidad por evento.
Banderas y compatibilidad
Habilitar funciones puntualmente (per-tenant/per-cohort), ranuras canarias.
Versionar API: contrato estable + adaptadores en el borde (formatos back/forward-compatible).
5) Límites, cuotas y facturación
Políticas de consumo
Rate limiting: 'requests/sec' per tenant/route, 'token-baket' con prioridades de planes.
Quotas: volumen de almacenamiento, número de objetos, mensajes/min, jobs/hora.
Fairness: «programación ponderada» de colas + aislamiento de workers para VIP.
Fact
Contadores por 'tenant _ id' (métricas de uso) → agregadores → facturas.
Snapshots usage en la frontera (idempotencia y protección contra la pérdida de eventos).
Modelos: plan fijo + ping consumption, post-pei/pre-pei, descuentos «tiered».
6) Seguridad y acceso
Autenticación/autorización
OIDC/SAML con los estigmas 'tenant _ id', 'roles', 'scopes'.
RBAC/ABAC: roles a nivel de inquilino (Owner/Admin/Reader), atributos de proyecto/departamento.
Acceso delegado (servicio a servicio) con mTLS y tokens restringidos.
Directivas de aceptación de solicitudes: verificación de la firma de encabezado, nonce/timestamp, enlace a origen.
Secretos y claves: rotación per-tenant, contextos KMS individuales, auditoría de operaciones clave.
Multi-región y residencia de datos: pinning tenant a la región, control de los flujos cruzados-regionales.
7) Observabilidad «por inquilinos»
Seguimiento y métricas
Etiquetas obligatorias: 'tenant _ id', 'plan', 'región', 'endpoint', 'status'.
SLI/SLO per tenant: `availability`, `p95 latency`, `error budget`.
Dashboards y alertas por segmentos (VIP/ajustable/nuevo).
Registros y auditoría
Registros de actividad (quién/qué/cuándo/dónde) con almacenamiento inmutable y retoque sobre la política del inquilino.
Preagregación de eventos para almacenamiento barato, recuperación de detalles «por clic».
8) Rendimiento y «noisy neighbor»
Medidas contra el ruido
Límites al nivel de colas/workers, CPU-shares e IO-proporciones per tenant.
Separación de cachés: prefijos de clave 'tenant: {id}:...', TTL por planes, protección contra «cache stampede».
Índices y planes de consulta teniendo en cuenta la selectividad por 'tenant _ id'.
Lanzamientos en frío y pools «cálidos»
Precalentamiento para ventanas VIP/pico.
Grupos elásticos de workers a través de las señales métricas (backpressure/auto skaling).
9) Actualizaciones y migraciones sin downtime
Estrategia
Migraciones compatibles con backward (expand → migrate → contract).
Migraciones «por inquilinos»: batches con control de progreso, «pausa/retroceso» para un particular 'tenant _ id'.
Muestreo y migraciones «canarias» en un subconjunto de inquilinos.
DR e incidentes
Plan DR con RTO/RPO per tenant; «modo read-only» parcial sin downtime global.
Aislamiento del incidente: el fusing por 'tenant _ id', la extinción del inquilino 'caliente' no afecta al resto.
10) API y protocolos
NAT/gRPC con el contexto obligatorio del inquilino (en los sellos/encabezados).
Eventos (event-driven): topics con 'tenant. {id} .event', filtros y ACL para suscripciones.
Puntos de entrada globales: la puerta de enlace L7 valida el contexto, aplica límites, cifra la PII por política de tenant.
11) Ciclo de vida del inquilino
1. Providencia: crear un registro de inquilino, generar claves/confecciones, enlazar la región.
2. Activación: liberación del cliente OIDC/SAML, creación de roles/políticas, cuotas primarias.
3. Operación: monitoreo, facturación, actualizaciones de banderas/planes.
4. Suspensión/Trottling: congelación con retención de datos/exportación.
5. Desinstalación/exportación: retén, backups conservados, cifrado-borrado de claves (crypto-shredding).
12) Mini-referencia de arquitectura (esquema verbal)
Edge (puerta de enlace API): TLS/mTLS, extracción de 'tenant _ id', límites, auditoría.
Control Plane: catálogo de inquilinos, confecciones, banderas de fichas, facturación, pólizas.
Planes de datos (servicios): servicios sin estado, colas, workers con cuotas; Redis/kv con prefijos por tenante.
Almacenamiento: RLS-DB/diagramas/DB separados; KMS con las llaves en el inquilino; almacenamiento de objetos con cifrado envelope.
Observabilidad: tracking/métricas/logs con la etiqueta 'tenant _ id', alertas per plan.
Admin: operaciones aisladas (migraciones/backups) en un subconjunto de inquilinos.
13) Lista de comprobación antes de la venta
- Método único para definir 'tenant _ id' en la frontera y en los servicios.
- Las políticas RLS/ACL se validan mediante pruebas y «escenarios negativos».
- Las cuotas/límites/facturación se validan sobre cargas reales; hay protección contra los "drops' de facturación.
- Observabilidad y SLO per tenant; alertas para VIP/ajustables.
- Las migraciones son compatibles, hay retroceso parcial y batches de alquiler.
- Scripts DR con RTO/RPO per tenant y ejercicios regulares.
- Encriptación «clave del inquilino», rotación y auditoría de claves.
- Documentación de los contratos API/eventos y políticas de versionamiento.
14) Errores típicos
Migraciones globales «de un solo golpe» sin poder detenerse en un inquilino problemático.
Dependencia oculta de 'tenant _ id' en la caché/colas → filtración de datos/intersección de colas.
Mezcla de contextos (operación admin por accidente sin 'tenant _ id').
No hay «doble cerradura»: sólo la verificación de servicio sin RLS en el DB.
Un solo límite para todo el clúster → «noisy neighbor» y una violación de SLO.
Facturación opaca sin idempotencia y trail de auditoría.
15) Selección rápida de la estrategia
Aislamiento/regulación estrictos: Silo (BD/cluster individuales), región-lock.
Eficacia equilibrada: Shared-DB per schema + RLS, llaves per tenant.
Tráfico de alto tiempo real: colas compartidas con cuotas «ponderadas» y workers dedicados para VIP.
Muchas personalizaciones: banderas de fichas + adaptadores de API, almacenamiento de configuraciones por prioridades.
la Conclusión
El núcleo multi-tenant es la disciplina de los límites de ingeniería: definición explícita de 'tenant _ id', aislamiento estricto en todas las capas, cuotas controladas y facturación transparente, además de observabilidad y compatibilidad de lanzamientos. Seguir los patrones descritos permite escalar el producto sin sacrificar la seguridad, calidad y velocidad de cambio para cada inquilino.