¿Qué es la tenencia múltiple y cómo afecta a las aplicaciones SaaS? – CloudSavvy IT

Tecnología junio 4, 2021
grupo de personas hablando
Shutterstock / Peshkova

La tenencia múltiple describe una arquitectura de software en la que una sola instalación física puede proporcionar varias instalaciones lógicas. Cada instalación lógica sirve a una base de usuarios dedicada denominada “inquilino”.

La tenencia múltiple se ve con mayor frecuencia en el contexto de los servicios SaaS en la nube. Las organizaciones que se suscriben a un servicio se convierten en “inquilinos”. El inquilino encapsula la configuración a nivel de la organización y, por lo general, admite varias cuentas de usuario final. Cuando un usuario inicia sesión, ve la vista personalizada del servicio de su organización.

¿Por qué utilizar la tenencia múltiple?

La principal alternativa a la tenencia múltiple es la tenencia única. En este modelo, cada inquilino recibe su propia instalación independiente del sistema. En la práctica, esto significa que la infraestructura de servidores dedicados debe configurarse para cada inquilino.

La tenencia múltiple existe únicamente dentro de su aplicación. Cada inquilino comparte la misma infraestructura de servidor. Esto simplifica la configuración de nuevos inquilinos, ya que no necesita aprovisionar recursos adicionales. Por lo tanto, los costos de ejecutar un servicio de inquilinos múltiples pueden ser más bajos que los de una implementación de inquilino único comparable.

La infraestructura compartida también significa una mayor eficiencia operativa. Es posible que tenga un inquilino que utilice el servicio con poca frecuencia. Con una plataforma de un solo inquilino, aún estaría aprovisionando una instalación dedicada, aunque estaría inactiva la mayor parte del tiempo.

Con una arquitectura de múltiples inquilinos, mantiene un conjunto de sistemas. Puede anticipar la carga agregada general y no necesita mantener los sistemas estacionados en caso de que un inquilino inicie sesión. Los recursos se distribuyen entre los usuarios activos. La otra cara es que un inquilino particularmente ocupado podría afectar negativamente a los demás, causando problemas de desempeño.

La tenencia múltiple puede ser mucho más fácil de mantener con el tiempo. Tiene una instalación de su servicio, lo que significa un conjunto de migraciones. La tenencia múltiple se alinea bien con los flujos de trabajo de desarrollo de software modernos impulsados ​​por la integración continua y las implementaciones rápidas. La iteración en un sistema de inquilino único significa que necesita crear scripts de orquestación para actualizar todos sus entornos de inquilino individualmente.

Una vez más, esto tiene dos lados: el arrendamiento único tiene una ventaja significativa cuando se desea una implementación gradual. El aislamiento por inquilino simplifica las versiones incrementales donde solo una minoría de su base de usuarios ve una nueva característica el primer día.

La tenencia única también le ayuda a adaptarse a las solicitudes individuales de los clientes. Es posible que un inquilino desee permanecer en una versión de plataforma anterior durante un poco más de tiempo, lo que da a sus usuarios más tiempo para prepararse para el cambio. No es necesario que todos se muevan juntos cuando los inquilinos se pueden migrar individualmente.

La tenencia múltiple funciona mejor cuando todas las organizaciones tienen los mismos requisitos generales. En este escenario, todos los inquilinos se benefician de cada cambio que se realiza. El proveedor se beneficia de un tiempo de lanzamiento reducido y una eficiencia operativa mejorada, pero pierde cierto grado de aislamiento de los inquilinos.

Inconvenientes de la tenencia múltiple

Además de los problemas descritos anteriormente, la tenencia múltiple introduce algunas consideraciones importantes en cada aplicación. La primera de la lista es la seguridad, que podría verse comprometida más fácilmente en un servicio de múltiples inquilinos.

La tenencia única le permite poner fuertes salvaguardias en torno a los datos de cada inquilino. En un entorno de múltiples inquilinos, los datos de todos existirán dentro de la misma infraestructura. Eso significa que hay una ubicación centralizada para que un atacante apunte.

La tenencia múltiple puede ser más exigente para los desarrolladores. Cada operación dentro de su servicio debe ajustarse manualmente al inquilino activo. Las tablas de la base de datos que almacenan los recursos arrendatarios deberán incluir un tenant_id campo o similar, permitiendo que cada registro se vincule a su inquilino.

En una aplicación de un solo inquilino, donde cada inquilino obtiene su propia instalación independiente, la siguiente consulta de base de datos podría ser aceptable:

SELECT * FROM orders;

En un entorno de múltiples inquilinos, deberá ajustar eso:

SELECT * FROM orders WHERE tenant_id = 1;

Una sola consulta de base de datos defectuosa podría revelar la información confidencial de sus otros inquilinos.

Hacer una copia de seguridad de un servicio de varios inquilinos suele ser sencillo. Solo tiene que encargarse de la instalación de una aplicación. Sin embargo, surgen desafíos en la restauración. Es más difícil restaurar datos de forma selectiva para un inquilino, ya que todos los datos existen en un solo volcado. Proporcionar a un inquilino su archivo de datos genera preocupaciones similares: necesitará un mecanismo personalizado para extraer sus registros de la infraestructura compartida.

¿Arrendamiento híbrido?

Algunas aplicaciones se están moviendo hacia la “tenencia híbrida”. Este concepto combina lo mejor de ambos modelos. La tenencia híbrida se alinea bien con los sistemas creados con microservicios. Algunos servicios serán de un solo inquilino, mientras que otros utilizarán una forma de inquilino múltiple.

Esto puede ayudarlo a mejorar aún más la eficiencia de su arquitectura. Es posible que desees un enfoque de múltiples inquilinos para las funciones globales, como la autenticación y las integraciones de terceros. Los datos generados por los usuarios de su servicio podrían almacenarse por separado, utilizando varias instancias de un servicio de un solo inquilino.

El uso de una combinación de servicios para un solo inquilino y para múltiples inquilinos le brinda más flexibilidad. Puede acelerar el lanzamiento de nuevas funciones utilizando el enfoque que mejor funcione para cada una. La tenencia híbrida puede ofrecer un mayor valor general al proporcionar un equilibrio más óptimo entre facilidad de desarrollo, seguridad, costo y mantenimiento.

Hay puntos conflictivos, particularmente en torno a la complejidad y la distribución. Separar artificialmente su aplicación en servicios independientes de un solo inquilino y de múltiples inquilinos no es la forma correcta de abordar la tenencia híbrida. Tiende a funcionar mejor en sistemas que ya poseen componentes de cara al usuario claramente diferenciados.

Acceso inquilino

Su servicio probablemente necesitará almacenar algunos datos globales que no pertenecen a ningún inquilino en particular. La lista de inquilinos registrados es un ejemplo.

En un sistema de un solo inquilino, es posible que tenga una instalación de “superusuario” dedicada de su servicio. Con un enfoque de múltiples inquilinos, simplemente puede tener un tenants tabla en su base de datos.

Cuando un usuario accede a su servicio, necesita saber a qué inquilino pertenece. Una forma común de identificar a los inquilinos es mediante la detección de subdominios:

tenant1.example.com

tenant2.example.com

Algunos sitios utilizan rutas de URL (example.com/tenant1) o puede permitir que los inquilinos traigan su propio nombre de dominio. Otros expondrán un solo punto de entrada (example.com) pero luego establece cookies de identificación de inquilinos o encabezados HTTP después de que un usuario inicia sesión.

También debe manejar usuarios que pertenecen a varios inquilinos. Muchos servicios ahora le permiten iniciar sesión con credenciales compartidas. Los registros de usuarios se almacenan globalmente, fuera del sistema de inquilinos, y se vinculan a los inquilinos mediante relaciones de base de datos. Esto no siempre será apropiado para su sistema: si proporciona subdominios dedicados o admite dominios proporcionados por inquilinos, puede que no sea conveniente permitir que el usuario “cambie de organización”.

Resumen

La “tenencia” se refiere a cómo una aplicación maneja los datos de múltiples bases de usuarios distintas. Cada inquilino tiene su propio entorno operativo; cómo se aprovisiona depende del modelo de arrendamiento.

Los servicios de un solo inquilino son simples pero ineficientes. Los servicios de múltiples inquilinos minimizan los requisitos de mantenimiento, pero requieren más atención en el diseño. La tenencia híbrida es un patrón emergente que utiliza microservicios para combinar los dos enfoques.

No existe una regla general que lo ayude a determinar el enfoque que debe usar. Evalúe el rendimiento de cada modelo en los atributos que más le importan. Si está buscando un aislamiento sólido y personalizará significativamente su servicio por inquilino, lo mejor es la tenencia única. Por el contrario, si sabe que tendrá una gran cantidad de inquilinos, busque la tenencia múltiple pero mantenga la seguridad en la vanguardia de su mente.