La multitenencia de software es una arquitectura de software en la que una única instancia de software se ejecuta en un servidor y presta servicio a varios inquilinos. Los sistemas diseñados de esta manera son "compartidos" (en lugar de "dedicados" o "aislados"). Un inquilino es un grupo de usuarios que comparten un acceso común con privilegios específicos a la instancia de software. Con una arquitectura multitenencia, una aplicación de software está diseñada para proporcionar a cada inquilino una parte dedicada de la instancia, incluidos sus datos, configuración, gestión de usuarios, funcionalidad individual del inquilino y propiedades no funcionales . La multitenencia contrasta con las arquitecturas de múltiples instancias, donde instancias de software independientes operan en nombre de diferentes inquilinos. [1]
Algunos comentaristas consideran que la multitenencia es una característica importante de la computación en la nube . [2] [3]
Las aplicaciones multiinquilino han evolucionado a partir de tres tipos de servicios y combinan algunas características de ellos:
En un entorno multiusuario, varios clientes comparten la misma aplicación, que se ejecuta en el mismo sistema operativo, en el mismo hardware y con el mismo mecanismo de almacenamiento de datos. La distinción entre los clientes se logra durante el diseño de la aplicación, por lo que los clientes no comparten ni ven los datos de los demás. Comparemos esto con la virtualización, donde los componentes se transforman, lo que permite que cada aplicación del cliente parezca ejecutarse en una máquina virtual independiente. [5]
Algunas empresas promueven activamente el principio de multiarrendamiento y lo utilizan como fuente de diferenciación competitiva. El uso de multiarrendamiento aumenta día a día. [6]
La multitenencia permite ahorros de costos más allá de las economías de escala básicas que se pueden lograr al consolidar los recursos de TI en una sola operación. [7] Una instancia de aplicación generalmente incurre en una cierta cantidad de sobrecarga de memoria y procesamiento que puede ser sustancial cuando se multiplica por muchos clientes, especialmente si los clientes son pequeños. La multitenencia reduce esta sobrecarga al distribuirla entre muchos clientes. Se pueden obtener ahorros de costos adicionales de los costos de licencia del software subyacente (como sistemas operativos y sistemas de administración de bases de datos). En términos simples, si puede ejecutar todo en una sola instancia de software, solo tiene que comprar una licencia de software . Los ahorros de costos pueden verse eclipsados por la dificultad de escalar la instancia única a medida que aumenta la demanda: aumentar el rendimiento de la instancia en un solo servidor solo se puede hacer comprando hardware más rápido, como CPU rápidas, más memoria y sistemas de disco más rápidos, y generalmente estos costos aumentan más rápido que si la carga se dividiera entre varios servidores con aproximadamente la misma capacidad agregada. [ cita requerida ] Además, el desarrollo de sistemas multiinquilino [8] es más complejo y las pruebas de seguridad son más estrictas porque se mezclan los datos de múltiples clientes.
Una de las razones más convincentes para que los proveedores/ ISV utilicen la multitenencia es por los beneficios inherentes de la agregación de datos . En lugar de recopilar datos de múltiples fuentes de datos, con esquemas de base de datos potencialmente diferentes , todos los datos de todos los clientes se almacenan en un único esquema de base de datos. Por lo tanto, ejecutar consultas entre clientes, extraer datos y buscar tendencias es mucho más simple. Esta razón probablemente esté sobrevalorada, ya que uno de los requisitos básicos de la multitenencia es la necesidad de evitar que el proveedor de servicios acceda a la información del cliente (inquilino). Además, es común separar la base de datos operativa de la base de datos de extracción (generalmente debido a las diferentes características de la carga de trabajo), lo que debilita aún más el argumento.
Debido a la complejidad adicional de personalización y la necesidad de mantener metadatos por inquilino , las aplicaciones multiinquilino requieren un mayor esfuerzo de desarrollo. Deben tenerse en cuenta consideraciones como la secuenciación de datos basada en vectores, la infraestructura de algoritmos encriptables y las interfaces de control virtualizadas. [9]
La multiusuaria simplifica el proceso de gestión de versiones. En un proceso de gestión de versiones tradicional, los paquetes que contienen cambios en el código y la base de datos se distribuyen a los equipos de escritorio y/o servidores de los clientes; en el caso de una sola instancia, esto sería una máquina servidor por cliente. Estos paquetes deben instalarse en cada máquina individual. Con el modelo multiusuario, el paquete normalmente solo necesita instalarse en un solo servidor. Esto simplifica enormemente el proceso de gestión de versiones y la escala ya no depende de la cantidad de clientes.
Al mismo tiempo, la multipropiedad aumenta los riesgos e impactos inherentes a la aplicación de una nueva versión de lanzamiento. Como hay una única instancia de software que presta servicio a varios inquilinos, una actualización en esta instancia puede provocar un tiempo de inactividad para todos los inquilinos, incluso si la actualización se solicita y es útil solo para un inquilino. Además, algunos errores y problemas resultantes de la aplicación de la nueva versión podrían manifestarse en la vista personalizada de la aplicación de otros inquilinos. Debido al posible tiempo de inactividad , el momento de la aplicación de la versión puede estar restringido según el cronograma de uso del tiempo de más de un inquilino.
Según Marc Brooker, en una arquitectura multiusuario, las cargas de trabajo no relacionadas y no correlacionadas se deben agrupar. Esto se debe a que la mezcla de diferentes cargas de trabajo, con diferentes necesidades y patrones, oculta los patrones de cada carga de trabajo. La agrupación de cargas de trabajo reduce la relación pico-promedio del sistema general; las cargas de trabajo individuales pueden utilizar más recursos durante las horas pico sin aumentar significativamente la estructura de costos general del sistema y, en consecuencia, lo ayuda a lograr una mayor eficiencia de costos. Tenga en cuenta que varias cargas de trabajo de la misma aplicación, cliente o industria tienden a comportarse como una sola carga de trabajo. [10]
Por lo general, se requiere que las aplicaciones multiusuario proporcionen un alto grado de personalización para satisfacer las necesidades de cada organización de destino. La personalización generalmente incluye los siguientes aspectos:
Se espera que las aplicaciones multiinquilino proporcionen seguridad , solidez y rendimiento adecuados [11] entre múltiples inquilinos, lo cual es proporcionado por las capas debajo de la aplicación en el caso de aplicaciones de múltiples instancias.
Los costos de rediseñar aplicaciones para la multiusuaria pueden ser significativos, especialmente para los proveedores de software que siguen ofreciendo una versión de su producto para un solo inquilino en las instalaciones. Terminan viéndose obligados a ofrecer soporte para dos productos distintos, con todos los costos resultantes.
Una alternativa cada vez más viable para la multipropiedad que elimina la necesidad de un cambio arquitectónico significativo es utilizar tecnología de virtualización para alojar varias instancias aisladas de una aplicación en uno o más servidores. De hecho, cuando las aplicaciones se vuelven a empaquetar como dispositivos virtuales, la misma imagen del dispositivo se puede implementar en ubicaciones alojadas por ISV, locales o de terceros de confianza e incluso migrar de un sitio de implementación a otro con el tiempo.
Multiusuario. Compartir una única instancia operativa agrupada de toda la infraestructura de arriba a abajo es más que una simple conveniencia del proveedor; es la única manera de lograr realmente la escala de la nube.
, los servicios multiinquilino son estándar: servicios de datos, servicios DNS, hardware para máquinas virtuales, balanceadores de carga, gestión de identidad, etc.