Patrones de inquilinato de base de datos SaaS multiinquilinoMulti-tenant SaaS database tenancy patterns

SE APLICA A: Azure SQL Database

En este artículo se describen los distintos modelos de arrendamiento disponibles para una aplicación SaaS multiinquilino.This article describes the various tenancy models available for a multi-tenant SaaS application.

Al diseñar una aplicación SaaS multiinquilino, debe elegir cuidadosamente el modelo de inquilinato que mejor se adapte a las necesidades de su aplicación.When designing a multi-tenant SaaS application, you must carefully choose the tenancy model that best fits the needs of your application. Un modelo de inquilinato determina cómo se asignan los datos de cada inquilino al almacenamiento.A tenancy model determines how each tenant's data is mapped to storage. La elección del modelo de inquilinato afecta a la administración y el diseño de la aplicación.Your choice of tenancy model impacts application design and management. A veces es costoso cambiar más adelante a un modelo diferente.Switching to a different model later is sometimes costly.

A.A. Conceptos y terminología de SaaSSaaS concepts and terminology

En el modelo de software como servicio (SaaS), su compañía no vende licencias para su software.In the Software as a Service (SaaS) model, your company does not sell licenses to your software. En su lugar, cada cliente paga un "alquiler" a la empresa, lo que hace que se convierta en un inquilino de ella.Instead, each customer makes rent payments to your company, making each customer a tenant of your company.

A cambio de ese alquiler, cada inquilino recibe acceso a los componentes de su aplicación de SaaS y sus datos se almacenan en el sistema de SaaS.In return for paying rent, each tenant receives access to your SaaS application components, and has its data stored in the SaaS system.

El término modelo de arrendamiento hace referencia a la forma en que organizan los datos almacenados de los inquilinos:The term tenancy model refers to how tenants' stored data is organized:

  • Inquilino único:   cada base de datos almacena los datos de un solo inquilino.Single-tenancy:  Each database stores data from only one tenant.
  • Multiinquilino:   cada base de datos almacena los datos de varios inquilinos independientes (con mecanismos para proteger la privacidad de los datos).Multi-tenancy:  Each database stores data from multiple separate tenants (with mechanisms to protect data privacy).
  • También hay disponibles modelos de arrendamiento híbrido.Hybrid tenancy models are also available.

B.B. Cómo elegir el modelo adecuado de inquilinatoHow to choose the appropriate tenancy model

En general, el modelo de inquilinato no afecta a la función de una aplicación, pero es probable que afecte a otros aspectos de la solución en general.In general, the tenancy model does not impact the function of an application, but it likely impacts other aspects of the overall solution. Los siguientes criterios se utilizan para evaluar cada uno de los modelos:The following criteria are used to assess each of the models:

  • Escalabilidad:Scalability:

    • Número de inquilinos.Number of tenants.
    • Almacenamiento por inquilino.Storage per-tenant.
    • Almacenamiento de forma agregada.Storage in aggregate.
    • Carga de trabajo.Workload.
  • Aislamiento de inquilinos:   aislamiento de los datos y rendimiento (si la carga de trabajo de un inquilino afecta a otros).Tenant isolation:  Data isolation and performance (whether one tenant's workload impacts others).

  • Costo por inquilino:   costos de la base de datos.Per-tenant cost:  Database costs.

  • Complejidad de desarrollo:Development complexity:

    • Cambios en el esquema.Changes to schema.
    • Cambios en las consultas (requeridos por el patrón).Changes to queries (required by the pattern).
  • Complejidad operativa:Operational complexity:

    • Supervisión y administración del rendimientoMonitoring and managing performance.
    • Administración de esquemasSchema management.
    • Restauración de un inquilino.Restoring a tenant.
    • Recuperación ante desastresDisaster recovery.
  • Capacidad de personalización:   facilidad para admitir las personalizaciones del esquema que son específicas del inquilino o específicas de la clase de inquilino.Customizability:  Ease of supporting schema customizations that are either tenant-specific or tenant class-specific.

El análisis de inquilinos se centra en la capa de datos .The tenancy discussion is focused on the data layer. Pero tenga en cuenta durante un momento la capa de aplicación .But consider for a moment the application layer. La capa de aplicación se trata como una entidad monolítica.The application layer is treated as a monolithic entity. Si se divide la aplicación en muchos componentes pequeños, podría cambiar su elección de modelo de inquilinato.If you divide the application into many small components, your choice of tenancy model might change. Puede tratar algunos componentes de forma diferente a otros tanto con respecto al inquilinato como a la tecnología de almacenamiento o plataforma utilizada.You could treat some components differently than others regarding both tenancy and the storage technology or platform used.

C.C. Aplicación de inquilino único independiente con base de datos de un solo inquilinoStandalone single-tenant app with single-tenant database

Aislamiento en el nivel de aplicaciónApplication level isolation

En este modelo, la aplicación entera se instala varias veces, una vez para cada inquilino.In this model, the whole application is installed repeatedly, once for each tenant. Cada instancia de la aplicación es una instancia independiente, por lo que nunca interactúa con cualquier otra instancia independiente.Each instance of the app is a standalone instance, so it never interacts with any other standalone instance. Cada instancia de la aplicación tiene un solo inquilino y, por tanto, necesita solo una base de datos.Each instance of the app has only one tenant, and therefore needs only one database. El inquilino tiene la base de datos entera para él.The tenant has the database all to itself.

Diseño de aplicación independiente con base de datos de un único inquilino.Design of standalone app with exactly one single-tenant database.

Cada instancia de la aplicación se instala en un grupo de recursos de Azure independiente.Each app instance is installed in a separate Azure resource group. El grupo de recursos puede pertenecer a una suscripción que a su vez pertenezca al proveedor de software o al inquilino.The resource group can belong to a subscription that is owned by either the software vendor or the tenant. En cualquier caso, el proveedor puede administrar el software para el inquilino.In either case, the vendor can manage the software for the tenant. Cada instancia de la aplicación se configura para conectarse a su base de datos correspondiente.Each application instance is configured to connect to its corresponding database.

Cada base de datos de inquilino se implementa como una base de datos única.Each tenant database is deployed as a single database. Este modelo proporciona el mayor aislamiento de base de datos.This model provides the greatest database isolation. Pero el aislamiento requiere que se hayan asignado suficientes recursos para cada base de datos para controlar sus cargas máximas.But the isolation requires that sufficient resources be allocated to each database to handle its peak loads. Aquí es importante saber que no se pueden usar grupos elásticos para bases de datos implementadas en distintos grupos de recursos o en suscripciones diferentes.Here it matters that elastic pools cannot be used for databases deployed in different resource groups or to different subscriptions. Esta limitación hace que este modelo de aplicación de inquilino único independiente sea la solución más costosa desde una perspectiva de costos de base de datos generales.This limitation makes this standalone single-tenant app model the most expensive solution from an overall database cost perspective.

Administración por el proveedorVendor management

El proveedor puede tener acceso a todas las bases de datos en todas las instancias de aplicación independientes, incluso si las instancias de la aplicación se instalan en suscripciones de inquilinos diferentes.The vendor can access all the databases in all the standalone app instances, even if the app instances are installed in different tenant subscriptions. El acceso se consigue a través de conexiones SQL.The access is achieved via SQL connections. Este acceso entre instancias puede permitir al proveedor centralizar la administración de esquemas y las consultas entre bases de datos con fines de elaboración de informes o análisis.This cross-instance access can enable the vendor to centralize schema management and cross-database query for reporting or analytics purposes. Si se desea este tipo de administración centralizada, se debe implementar un catálogo que asigne identificadores de inquilino a los identificadores URI de la base de datos.If this kind of centralized management is desired, a catalog must be deployed that maps tenant identifiers to database URIs. Azure SQL Database proporciona una biblioteca de particionamiento que se usan juntos para proporcionar un catálogo.Azure SQL Database provides a sharding library that is used together to provide a catalog. La biblioteca de particionamiento se llama formalmente biblioteca cliente Elastic Database.The sharding library is formally named the Elastic Database Client Library.

D.D. Aplicación multiinquilino con una base de datos por inquilinoMulti-tenant app with database-per-tenant

El patrón siguiente utiliza una aplicación multiinquilino con muchas bases de datos, cada una de ellas de un único inquilino.This next pattern uses a multi-tenant application with many databases, all being single-tenant databases. Se aprovisiona una nueva base de datos para cada nuevo inquilino.A new database is provisioned for each new tenant. La capa de aplicación se escala verticalmente mediante la adición de más recursos por nodo.The application tier is scaled up vertically by adding more resources per node. O la aplicación se escala horizontalmente agregando más nodos.Or the app is scaled out horizontally by adding more nodes. El escalado se basa en la carga de trabajo y es independiente del número o la escala de las bases de datos individuales.The scaling is based on workload, and is independent of the number or scale of the individual databases.

Diseño de una aplicación multiinquilino con una base de datos por inquilinoDesign of multi-tenant app with database-per-tenant.

Personalización para un inquilinoCustomize for a tenant

Al igual que el patrón de aplicación independiente, el uso de bases de datos de un único inquilino ofrece un aislamiento de inquilinos seguro.Like the standalone app pattern, the use of single-tenant databases gives strong tenant isolation. En cualquier aplicación cuyo modelo especifique solo bases de datos de un único inquilino, el esquema para una base de datos determinada se puede personalizar y optimizar para su inquilino.In any app whose model specifies only single-tenant databases, the schema for any one given database can be customized and optimized for its tenant. Esta personalización no afecta a otros inquilinos en la aplicación.This customization does not affect other tenants in the app. Quizás un inquilino podría necesitar datos más allá de los campos de datos básicos que necesitan todos los inquilinos.Perhaps a tenant might need data beyond the basic data fields that all tenants need. Además, el campo de datos adicionales podría necesitar un índice.Further, the extra data field might need an index.

Con una base de datos por inquilino, la personalización del esquema para uno o varios inquilinos individuales es fácil de lograr.With database-per-tenant, customizing the schema for one or more individual tenants is straightforward to achieve. El proveedor de la aplicación debe diseñar procedimientos para administrar cuidadosamente las personalizaciones de esquema a escala.The application vendor must design procedures to carefully manage schema customizations at scale.

Grupos elásticosElastic pools

Cuando las bases de datos se implementan en el mismo grupo de recursos, se pueden agrupar en grupos elásticos.When databases are deployed in the same resource group, they can be grouped into elastic pools. Los grupos proporcionan una manera rentable de compartir recursos entre varias bases de datos.The pools provide a cost-effective way of sharing resources across many databases. Esta opción de grupo resulta más económica que exigir que cada base de datos sea lo suficientemente grande como para dar cabida a los picos de uso que producen.This pool option is cheaper than requiring each database to be large enough to accommodate the usage peaks that it experiences. Aunque las bases de datos agrupadas comparten el acceso a los recursos, pueden mantener un alto grado de aislamiento del rendimiento.Even though pooled databases share access to resources they can still achieve a high degree of performance isolation.

Diseño de aplicación multiinquilino con una base de datos por inquilino mediante un grupo elástico.Design of multi-tenant app with database-per-tenant, using elastic pool.

Azure SQL Database proporciona las herramientas necesarias para configurar, supervisar y administrar el uso compartido.Azure SQL Database provides the tools necessary to configure, monitor, and manage the sharing. Las métricas de rendimiento en el nivel de grupo y en el nivel de base de datos están disponibles en Azure Portal y a través de los registros de Azure Monitor.Both pool-level and database-level performance metrics are available in the Azure portal, and through Azure Monitor logs. Las métricas pueden dar detalles sobre el rendimiento agregado y específico del inquilino.The metrics can give great insights into both aggregate and tenant-specific performance. Las bases de datos individuales se pueden mover entre grupos para proporcionar recursos reservados para un inquilino específico.Individual databases can be moved between pools to provide reserved resources to a specific tenant. Estas herramientas permiten garantizar un buen rendimiento en forma rentable.These tools enable you to ensure good performance in a cost effective manner.

Escala de operaciones para una base de datos por inquilinoOperations scale for database-per-tenant

Azure SQL Database tiene muchas características de administración diseñadas para administrar grandes cantidades de bases de datos a escala, por encima de 100 000 bases de datos.Azure SQL Database has many management features designed to manage large numbers of databases at scale, such as well over 100,000 databases. Estas características hacen que el patrón de una base de datos por inquilino sea plausible.These features make the database-per-tenant pattern plausible.

Por ejemplo, suponga que un sistema tiene una base de datos de 1000 inquilinos como única base de datos.For example, suppose a system has a 1000-tenant database as its only one database. La base de datos podría tener 20 índices.The database might have 20 indexes. Si el sistema pasa a tener 1000 bases de datos de un único inquilino, el número de índices aumenta hasta 20 000.If the system converts to having 1000 single-tenant databases, the quantity of indexes rises to 20,000. En Azure SQL Database, como parte del ajuste automático, las características de indexación automática están habilitadas de forma predeterminada.In Azure SQL Database as part of Automatic tuning, the automatic indexing features are enabled by default. La indexación automática administra automáticamente los 20.000 índices y sus optimizaciones de creación y eliminación.Automatic indexing manages for you all 20,000 indexes and their ongoing create and drop optimizations. Estas acciones automatizadas se producen dentro de una base de datos individual y no están coordinadas ni restringidas por acciones similares en otras bases de datos.These automated actions occur within an individual database, and they are not coordinated or restricted by similar actions in other databases. La indexación automática trata los índices de manera diferente en una base de datos ocupada que en una base de datos de menos actividad.Automatic indexing treats indexes differently in a busy database than in a less busy database. Este tipo de personalización de la administración de índices no sería práctico en la escala de una base de datos por inquilino si esta enorme tarea de administración tuviera que realizarse manualmente.This type of index management customization would be impractical at the database-per-tenant scale if this huge management task had to be done manually.

Otras características de administración que escalan bien incluyen las siguientes:Other management features that scale well include the following:

  • Copias de seguridad integradas.Built-in backups.
  • Alta disponibilidad.High availability.
  • Cifrado en el disco.On-disk encryption.
  • Telemetría de rendimiento.Performance telemetry.

AutomationAutomation

Las operaciones de administración se pueden incluir en un script y ofrecer con un modelo de devops.The management operations can be scripted and offered through a devops model. Las operaciones incluso pueden ser automatizadas y expuestas en la aplicación.The operations can even be automated and exposed in the application.

Por ejemplo, puede automatizar la recuperación de un solo inquilino a un momento anterior en el tiempo.For example, you could automate the recovery of a single tenant to an earlier point in time. La recuperación solo necesita restaurar la base de datos de un solo inquilino que almacena al inquilino.The recovery only needs to restore the one single-tenant database that stores the tenant. Esta restauración no influye en otros inquilinos, lo que confirma que las operaciones de administración se encuentran en el nivel granular de cada inquilino individual.This restore has no impact on other tenants, which confirms that management operations are at the finely granular level of each individual tenant.

E.E. Aplicación multiinquilino con bases de datos multiinquilinoMulti-tenant app with multi-tenant databases

Otro patrón disponible consiste en almacenar a muchos inquilinos en una base de datos de varios inquilinos.Another available pattern is to store many tenants in a multi-tenant database. La instancia de la aplicación puede tener cualquier número de bases de datos multiinquilino.The application instance can have any number of multi-tenant databases. El esquema de una base de datos multiinquilino debe tener una o varias columnas de identificadores del inquilino para que los datos de cualquier inquilino determinado se puedan recuperar de forma selectiva.The schema of a multi-tenant database must have one or more tenant identifier columns so that the data from any given tenant can be selectively retrieved. Además, el esquema puede requerir algunas tablas o columnas que son utilizadas solo por un subconjunto de los inquilinos.Further, the schema might require a few tables or columns that are used by only a subset of tenants. Sin embargo, el código estático y los datos de referencia se almacenan una sola vez y se comparten entre todos los inquilinos.However, static code and reference data is stored only once and is shared by all tenants.

Se sacrifica el aislamiento de inquilinosTenant isolation is sacrificed

Datos:   una base de datos multiinquilino necesariamente sacrifica el aislamiento de inquilinos.Data:  A multi-tenant database necessarily sacrifices tenant isolation. Los datos de varios inquilinos se almacenan juntos en una base de datos.The data of multiple tenants is stored together in one database. Durante el desarrollo, asegúrese de que las consultas no exponen nunca los datos de más de un inquilino.During development, ensure that queries never expose data from more than one tenant. SQL Database admite seguridad en el nivel de fila, que puede exigir que los datos devueltos por una consulta estén en el ámbito de un solo inquilino.SQL Database supports row-level security, which can enforce that data returned from a query be scoped to a single tenant.

Procesamiento:   una base de datos multiinquilino comparte recursos de proceso y almacenamiento entre todos sus inquilinos.Processing:  A multi-tenant database shares compute and storage resources across all its tenants. La base de datos como un todo puede supervisarse para asegurarse de que está teniendo un rendimiento aceptable.The database as a whole can be monitored to ensure it is performing acceptably. Sin embargo, el sistema de Azure no tiene ningún medio integrado para supervisar o administrar el uso de estos recursos por un inquilino individual.However, the Azure system has no built-in way to monitor or manage the use of these resources by an individual tenant. Por lo tanto, la base de datos multiinquilino implica un mayor riesgo de que se produzcan molestias entre vecinos, donde la carga de trabajo de un inquilino muy activo afecta al rendimiento de los demás inquilinos en la misma base de datos.Therefore, the multi-tenant database carries an increased risk of encountering noisy neighbors, where the workload of one overactive tenant impacts the performance experience of other tenants in the same database. La supervisión adicional en el nivel de aplicación puede supervisar el rendimiento en el nivel del inquilino.Additional application-level monitoring could monitor tenant-level performance.

Menor costoLower cost

En general, las bases de datos multiinquilino tienen el costo por inquilino más bajo.In general, multi-tenant databases have the lowest per-tenant cost. Los costos en recursos para una base de datos única son menores que para un grupo de bases de datos elásticas de tamaño equivalente.Resource costs for a single database are lower than for an equivalently sized elastic pool. Además, para escenarios donde los inquilinos necesitan solo un almacenamiento limitado, se pueden almacenar millones de inquilinos potenciales en una sola base de datos.In addition, for scenarios where tenants need only limited storage, potentially millions of tenants could be stored in a single database. Ningún grupo elástico puede contener millones de bases de datos.No elastic pool can contain millions of databases. Sin embargo, una solución que contenga 1000 bases de datos por grupo, con 1000 grupos, podría llegar a la escala de millones con el riesgo de ser difícil de administrar.However, a solution containing 1000 databases per pool, with 1000 pools, could reach the scale of millions at the risk of becoming unwieldy to manage.

A continuación se describen dos variaciones de un modelo de base de datos multiinquilino, siendo el modelo multiinquilino con particiones el más flexible y escalable.Two variations of a multi-tenant database model are discussed in what follows, with the sharded multi-tenant model being the most flexible and scalable.

F.F. Aplicación multiinquilino con una única base de datos multiinquilinoMulti-tenant app with a single multi-tenant database

El patrón de base de datos multiinquilino más simple usa una base de datos única para hospedar los datos de todos los inquilinos.The simplest multi-tenant database pattern uses a single database to host data for all tenants. Cuando se agregan más inquilinos, la base de datos se escala verticalmente con más recursos de proceso y almacenamiento.As more tenants are added, the database is scaled up with more storage and compute resources. Este escalado vertical puede ser suficiente, aunque siempre hay un límite de escala último.This scale up might be all that is needed, although there is always an ultimate scale limit. Sin embargo, antes de que ese límite se alcance la base de datos pasa a ser difícil de administrar.However, long before that limit is reached the database becomes unwieldy to manage.

Las operaciones de administración que se centran en inquilinos individuales tienen una implementación más compleja en una base de datos multiinquilino.Management operations that are focused on individual tenants are more complex to implement in a multi-tenant database. Y a escala estas operaciones podrían resultar demasiado lentas.And at scale these operations might become unacceptably slow. Un ejemplo es una restauración a un momento determinado en el tiempo de los datos de un solo inquilino.One example is a point-in-time restore of the data for just one tenant.

G.G. Aplicación multiinquilino con bases de datos multiinquilino con particionesMulti-tenant app with sharded multi-tenant databases

La mayoría de las aplicaciones de SaaS acceden a los datos de un solo inquilino a la vez.Most SaaS applications access the data of only one tenant at a time. Este patrón de acceso permite que los datos del inquilino se distribuyan a través de varias bases de datos o particiones, donde todos los datos de cualquier inquilino determinado están contenidos en una partición.This access pattern allows tenant data to be distributed across multiple databases or shards, where all the data for any one tenant is contained in one shard. Combinado con un patrón de base de datos multiinquilino, un modelo con particiones permite una escala casi infinita.Combined with a multi-tenant database pattern, a sharded model allows almost limitless scale.

Diseño de aplicación multiinquilino con bases de datos multiinquilino con particionesDesign of multi-tenant app with sharded multi-tenant databases.

Administración de particionesManage shards

El particionamiento agrega complejidad tanto para el diseño como para la administración operativa.Sharding adds complexity both to the design and operational management. Se requiere un catálogo en el que se va a mantener la asignación entre los inquilinos y las bases de datos.A catalog is required in which to maintain the mapping between tenants and databases. Además, se requieren procedimientos de administración para administrar las particiones y el rellenado de inquilinos.In addition, management procedures are required to manage the shards and the tenant population. Por ejemplo, deben diseñarse procedimientos para agregar y eliminar particiones y para mover datos de inquilinos entre particiones.For example, procedures must be designed to add and remove shards, and to move tenant data between shards. Una forma de escalar es la adición de una nueva partición y rellenarla con los nuevos inquilinos.One way to scale is to by adding a new shard and populating it with new tenants. En otras ocasiones se podría dividir una partición densamente poblada en dos particiones con menor densidad.At other times you might split a densely populated shard into two less-densely populated shards. Después de que se hayan movido o eliminado algunos inquilinos, podría combinar particiones poco pobladas.After several tenants have been moved or discontinued, you might merge sparsely populated shards together. Esta combinación traería consigo una utilización de los recursos más eficiente en costos.The merge would result in more cost-efficient resource utilization. Los inquilinos también se pueden mover entre particiones para equilibrar las cargas de trabajo.Tenants might also be moved between shards to balance workloads.

SQL Database proporciona una herramienta para dividir y combinar que funciona junto con la biblioteca de particionamiento y el catálogo de base de datos.SQL Database provides a split/merge tool that works in conjunction with the sharding library and the catalog database. La aplicación proporcionada puede dividir y combinar particiones y puede mover datos de inquilino entre particiones.The provided app can split and merge shards, and it can move tenant data between shards. La aplicación también mantiene el catálogo durante estas operaciones y marca a los inquilinos afectados como sin conexión antes de moverlos.The app also maintains the catalog during these operations, marking affected tenants as offline prior to moving them. Tras el movimiento, la aplicación actualiza el catálogo de nuevo con la nueva asignación y se vuelve a marcar al inquilino como conectado.After the move, the app updates the catalog again with the new mapping, and marking the tenant as back online.

Bases de datos menores más fácil de administrarSmaller databases more easily managed

Mediante la distribución de los inquilinos en varias bases de datos, la solución multiinquilino con particiones da como resultado bases de datos más pequeñas que se administran con más facilidad.By distributing tenants across multiple databases, the sharded multi-tenant solution results in smaller databases that are more easily managed. Por ejemplo, la restauración de un inquilino específico a un momento anterior en el tiempo ahora implica la restauración de una base de datos más pequeña desde una copia de seguridad, en lugar de una base de datos más grande que contiene a todos los inquilinos.For example, restoring a specific tenant to a prior point in time now involves restoring a single smaller database from a backup, rather than a larger database that contains all tenants. Se puede elegir el tamaño de la base de datos y el número de inquilinos por base de datos para equilibrar la carga de trabajo y los esfuerzos de administración.The database size, and number of tenants per database, can be chosen to balance the workload and the management efforts.

Identificador del inquilino en el esquemaTenant identifier in the schema

Según el enfoque de particionamiento usado, se pueden imponer restricciones adicionales en el esquema de base de datos.Depending on the sharding approach used, additional constraints may be imposed on the database schema. La aplicación de dividir y combinar de SQL Database requiere que el esquema incluya la clave de particionamiento, que suele ser el identificador del inquilino.The SQL Database split/merge application requires that the schema includes the sharding key, which typically is the tenant identifier. El identificador del inquilino es el elemento inicial de la clave principal de todas las tablas con particiones.The tenant identifier is the leading element in the primary key of all sharded tables. El identificador del inquilino permite que la aplicación de dividir y combinar localice rápidamente y mueva los datos asociados a un inquilino específico.The tenant identifier enables the split/merge application to quickly locate and move data associated with a specific tenant.

Grupo elástico para particionesElastic pool for shards

Las bases de datos multiinquilino con particiones pueden colocarse en grupos elásticos.Sharded multi-tenant databases can be placed in elastic pools. En general, tener muchas bases de datos de un solo inquilino en un grupo es tan rentable como tener varios inquilinos en algunas bases de datos multiinquilino.In general, having many single-tenant databases in a pool is as cost efficient as having many tenants in a few multi-tenant databases. Las bases de datos multiinquilino son beneficiosas cuando hay un gran número de inquilinos relativamente inactivos.Multi-tenant databases are advantageous when there are a large number of relatively inactive tenants.

H.H. Modelo híbrido de base de datos multiinquilino con particionesHybrid sharded multi-tenant database model

En el modelo híbrido, todas las bases de datos tienen el identificador del inquilino en su esquema.In the hybrid model, all databases have the tenant identifier in their schema. Las bases de datos son capaces de almacenar a más de un inquilino y las bases de datos pueden tener particiones.The databases are all capable of storing more than one tenant, and the databases can be sharded. Por lo que, en el sentido del esquema, son todas bases de datos multiinquilino.So in the schema sense, they are all multi-tenant databases. Aunque en la práctica algunas de estas bases de datos contengan a un solo inquilino.Yet in practice some of these databases contain only one tenant. En cualquier caso, la cantidad de inquilinos que se almacenan en una base de datos no tiene ningún efecto en el esquema de base de datos.Regardless, the quantity of tenants stored in a given database has no effect on the database schema.

Mover los inquilinosMove tenants around

En cualquier momento, puede mover a un inquilino determinado a su propia base de datos multiinquilino.At any time, you can move a particular tenant to its own multi-tenant database. Y en cualquier momento, puede cambiar de opinión y mover al inquilino de nuevo a una base de datos que contiene a varios inquilinos.And at any time, you can change your mind and move the tenant back to a database that contains multiple tenants. También puede asignar a un inquilino a la nueva base de datos de un solo inquilino al aprovisionar la nueva base de datos.You can also assign a tenant to new single-tenant database when you provision the new database.

El modelo híbrido destaca cuando existen grandes diferencias entre las necesidades de recursos de los grupos identificables de inquilinos.The hybrid model shines when there are large differences between the resource needs of identifiable groups of tenants. Por ejemplo, suponga que los inquilinos que participan en una evaluación gratuita no tienen garantizado el mismo nivel alto de rendimiento que los inquilinos suscriptores.For example, suppose that tenants participating in a free trial are not guaranteed the same high level of performance that subscribing tenants are. La directiva podría ser que los inquilinos en la fase de evaluación gratuita se almacenan en una base de datos multiinquilino que se comparte entre todos los inquilinos de prueba gratuitos.The policy might be for tenants in the free trial phase to be stored in a multi-tenant database that is shared among all the free trial tenants. Cuando un inquilino de evaluación gratuita se suscribe en el nivel de servicio básico, el inquilino se puede mover a otra base de datos multiinquilino que tenga menos inquilinos.When a free trial tenant subscribes to the basic service tier, the tenant can be moved to another multi-tenant database that might have fewer tenants. Un suscriptor que paga por el nivel de servicio premium se podría mover a su propia base de datos de inquilino único nueva.A subscriber that pays for the premium service tier could be moved to its own new single-tenant database.

GruposPools

En este modelo híbrido, las bases de datos de un solo inquilino para inquilinos suscriptores pueden colocarse en grupos de recursos para reducir los costos de base de datos por inquilino.In this hybrid model, the single-tenant databases for subscriber tenants can be placed in resource pools to reduce database costs per tenant. Esto también se realiza en el modelo de una base de datos por inquilino.This is also done in the database-per-tenant model.

I.I. Comparación de los modelos de inquilinatoTenancy models compared

En la tabla siguiente se resumen las diferencias entre los principales modelos de inquilinato.The following table summarizes the differences between the main tenancy models.

MediciónMeasurement Aplicación independienteStandalone app Una base de datos por inquilinoDatabase-per-tenant Multiinquilino con particionesSharded multi-tenant
EscalaScale MediaMedium
1-1001-100s
Muy altoVery high
1-100.0001-100,000s
Sin límiteUnlimited
1-1.000.0001-1,000,000s
Aislamiento de inquilinoTenant isolation Muy altoVery high AltoHigh Bajo; excepto para los inquilinos únicos (que están solos en una base de datos multiinquilino).Low; except for any single tenant (that is alone in an MT db).
Costo de base de datos por inquilinoDatabase cost per tenant Alta; tiene un tamaño adecuado para picos.High; is sized for peaks. Baja; se utilizan grupos.Low; pools used. Más bajo, para inquilinos pequeños en bases de datos multiinquilino.Lowest, for small tenants in MT DBs.
Administración y supervisión del rendimientoPerformance monitoring and management Por inquilino soloPer-tenant only Agregado + por inquilinoAggregate + per-tenant Agregado; aunque es por inquilino solo para los únicos.Aggregate; although is per-tenant only for singles.
Complejidad de desarrolloDevelopment complexity BajoLow BajoLow Media; debido al particionamiento.Medium; due to sharding.
Complejidad operativaOperational complexity Baja-Alta.Low-High. Individualmente simples y complejas a escala.Individually simple, complex at scale. Baja-Media.Low-Medium. Los patrones tienen complejidad a escala.Patterns address complexity at scale. Baja-Alta.Low-High. La administración de inquilinos individuales es compleja.Individual tenant management is complex.
 

Pasos siguientesNext steps