Criteri di tenancy di database delle applicazioni SaaS multi-tenantMulti-tenant SaaS database tenancy patterns

Questo articolo descrive i vari modelli di affitto disponibili per un'applicazione SaaS multi-tenant.This article describes the various tenancy models available for a multi-tenant SaaS application.

Quando si progetta un'applicazione SaaS multi-tenant, è necessario scegliere con attenzione il modello di tenancy più adatto alle esigenze dell'applicazione.When designing a multi-tenant SaaS application, you must carefully choose the tenancy model that best fits the needs of your application. Un modello di tenancy determina la modalità di mapping dei dati di ogni tenant alla risorsa di archiviazione.A tenancy model determines how each tenant’s data is mapped to storage. La scelta del modello di tenancy influisce sulla progettazione e sulla gestione dell'applicazione.Your choice of tenancy model impacts application design and management. In alcuni casi il passaggio a un modello diverso in un secondo momento è dispendioso.Switching to a different model later is sometimes costly.

R.A. Concetti e terminologia relativi a SaaSSaaS concepts and terminology

Nel modello software come un servizio (SaaS), l'azienda non vende licenze del proprio software,In the Software as a Service (SaaS) model, your company does not sell licenses to your software. ma il cliente paga un noleggio all'azienda e diventa tenant dell'azienda stessa.Instead, each customer makes rent payments to your company, making each customer a tenant of your company.

In cambio della tariffa di noleggio, ogni tenant ottiene l'accesso ai componenti dell'applicazione SaaS e l'archiviazione dei propri dati nel sistema SaaS.In return for paying rent, each tenant receives access to your SaaS application components, and has its data stored in the SaaS system.

Il termine modello di tenancy indica il modo in cui sono organizzati i dati dei tenant che vengono archiviati:The term tenancy model refers to how tenants' stored data is organized:

  • Singola tenancy:   in ogni database sono archiviati i dati di un solo tenant.Single-tenancy:  Each database stores data from only one tenant.
  • Multi-tenancy:   in ogni database sono archiviati i dati di più tenant diversi, con meccanismi per proteggere la privacy dei dati.Multi-tenancy:  Each database stores data from multiple separate tenants (with mechanisms to protect data privacy).
  • Sono disponibili anche modelli di tenancy ibridi.Hybrid tenancy models are also available.

B.B. Come scegliere il modello di tenancy appropriatoHow to choose the appropriate tenancy model

In generale, il modello di tenancy non influisce sul funzionamento di un'applicazione, ma è probabile che influisca su altri aspetti della soluzione globale.In general, the tenancy model does not impact the function of an application, but it likely impacts other aspects of the overall solution. Per valutare ogni modello vengono usati i criteri seguenti:The following criteria are used to assess each of the models:

  • Scalabilità:Scalability:

    • Numero di tenant.Number of tenants.
    • Archiviazione per tenant.Storage per-tenant.
    • Archiviazione in modo aggregato.Storage in aggregate.
    • Carico di lavoro.Workload.
  • Isolamento dei tenant:   isolamento dei dati e prestazioni (se il carico di lavoro di un tenant influisce su altri).Tenant isolation:  Data isolation and performance (whether one tenant’s workload impacts others).

  • Costo per singolo tenant:   Costi del database.Per-tenant cost:  Database costs.

  • Complessità di sviluppo:Development complexity:

    • Modifiche allo schema.Changes to schema.
    • Modifiche alle query (richieste dal modello).Changes to queries (required by the pattern).
  • Complessità operativa:Operational complexity:

    • Prestazioni di monitoraggio e gestione.Monitoring and managing performance.
    • Gestione degli schemi.Schema management.
    • Ripristino di un tenant.Restoring a tenant.
    • Ripristino di emergenza.Disaster recovery.
  • Personalizzabilità:   facilità di supporto delle personalizzazioni degli schemi specifiche del tenant o della classe del tenant.Customizability:  Ease of supporting schema customizations that are either tenant-specific or tenant class-specific.

La discussione sui tenancy è incentrata sul livello dei dati.The tenancy discussion is focused on the data layer. Consideriamo tuttavia per un momento il livello dell'applicazione.But consider for a moment the application layer. Il livello dell'applicazione viene considerato come un'entità monolitica.The application layer is treated as a monolithic entity. Se si divide l'applicazione in vari componenti di dimensioni inferiori, la scelta del modello di tenancy potrebbe cambiare.If you divide the application into many small components, your choice of tenancy model might change. È possibile trattare alcuni componenti in modo diverso rispetto ad altri in merito alla tenancy e alla tecnologia di archiviazione o alla piattaforma usata.You could treat some components differently than others regarding both tenancy and the storage technology or platform used.

C.C. App autonoma a tenant singolo con database a tenant singoloStandalone single-tenant app with single-tenant database

Isolamento del livello dell'applicazioneApplication level isolation

In questo modello, l'intera applicazione viene installata più volte, una per ogni tenant.In this model, the whole application is installed repeatedly, once for each tenant. Ogni istanza dell'app è un'istanza autonoma, in modo che non interagisca mai con altre istanze autonome.Each instance of the app is a standalone instance, so it never interacts with any other standalone instance. Ogni istanza dell'app ha un solo tenant e pertanto necessita di un solo database.Each instance of the app has only one tenant, and therefore needs only one database. Il database è specifico del tenant.The tenant has the database all to itself.

Progettazione di un'app autonoma con un solo database a tenant singolo.Design of standalone app with exactly one single-tenant database.

Ogni istanza dell'app viene installata in un gruppo di risorse di Azure distinto.Each app instance is installed in a separate Azure resource group. Il gruppo di risorse può appartenere a una sottoscrizione di proprietà del fornitore del software o del tenant.The resource group can belong to a subscription that is owned by either the software vendor or the tenant. In entrambi i casi, il fornitore può gestire il software per il tenant.In either case, the vendor can manage the software for the tenant. Ogni istanza dell'applicazione è configurata per connettersi al database corrispondente.Each application instance is configured to connect to its corresponding database.

Ogni database tenant viene distribuito come database singolo.Each tenant database is deployed as a single database. Questo modello fornisce il livello maggiore di isolamento del database.This model provides the greatest database isolation. Tuttavia, l'isolamento richiede l'allocazione di risorse sufficienti in ogni database per gestire i carichi di picco.But the isolation requires that sufficient resources be allocated to each database to handle its peak loads. In questo caso è importante sottolineare che i pool elastici non possono essere usati per i database distribuiti in gruppi di risorse o in sottoscrizioni diverse.Here it matters that elastic pools cannot be used for databases deployed in different resource groups or to different subscriptions. Questa limitazione rende questo modello di app autonoma a tenant singolo la soluzione più costosa dal punto di vista dei costi generali del database.This limitation makes this standalone single-tenant app model the most expensive solution from an overall database cost perspective.

Gestione del fornitoreVendor management

Il fornitore può accedere a tutti i database in tutte le istanze di app autonome, anche se sono installate in sottoscrizioni tenant diverse.The vendor can access all the databases in all the standalone app instances, even if the app instances are installed in different tenant subscriptions. L'accesso avviene tramite connessioni SQL.The access is achieved via SQL connections. Questo accesso tra istanze consente al fornitore di centralizzare la gestione degli schemi e le query tra database per scopi di report o analisi.This cross-instance access can enable the vendor to centralize schema management and cross-database query for reporting or analytics purposes. Per ottenere questo tipo di gestione centralizzata, è necessario distribuire un catalogo che esegua il mapping degli identificatori dei tenant agli URI del database.If this kind of centralized management is desired, a catalog must be deployed that maps tenant identifiers to database URIs. Il database SQL di Azure fornisce una libreria di partizionamento orizzontale usata insieme a un database SQL per fornire un catalogo.Azure SQL Database provides a sharding library that is used together with a SQL database to provide a catalog. La libreria di partizionamento orizzontale è denominata formalmente la libreria client dei database elastici.The sharding library is formally named the Elastic Database Client Library.

D.D. App multi-tenant con database per tenantMulti-tenant app with database-per-tenant

Questo criterio successivo usa un'applicazione multi-tenant con vari database, tutti a tenant singolo.This next pattern uses a multi-tenant application with many databases, all being single-tenant databases. Viene eseguito il provisioning di un nuovo database per ogni nuovo tenant.A new database is provisioned for each new tenant. Il livello applicazione viene aumentato verticalmente mediante l'aggiunta di altre risorse per ogni nodo.The application tier is scaled up vertically by adding more resources per node. In alternativa, l'app viene scalata orizzontalmente aggiungendo altri nodi.Or the app is scaled out horizontally by adding more nodes. Il ridimensionamento è basato sul carico di lavoro ed è indipendente dal numero o dalla scalabilità dei singoli database.The scaling is based on workload, and is independent of the number or scale of the individual databases.

Progettazione di app multi-tenant con database per tenant.Design of multi-tenant app with database-per-tenant.

Personalizzazione per un tenantCustomize for a tenant

Come per il criterio delle app autonome, l'uso di database a tenant singolo conferisce un livello elevato di isolamento dei tenant.Like the standalone app pattern, the use of single-tenant databases gives strong tenant isolation. In qualsiasi app il cui modello specifichi solo database a tenant singolo, lo schema per ogni singolo database specificato può essere personalizzato e ottimizzato per il relativo tenant.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. Questa personalizzazione non influisce sugli altri tenant nell'app.This customization does not affect other tenants in the app. Un tenant potrebbe necessitare di altri dati rispetto ai campi dati di base richiesti da tutti i tenant.Perhaps a tenant might need data beyond the basic data fields that all tenants need. Il campo dati aggiuntivo potrebbe a sua volta richiedere un indice.Further, the extra data field might need an index.

Grazie alla funzione di database per tenant, è semplice personalizzare lo schema per uno o più tenant singoli.With database-per-tenant, customizing the schema for one or more individual tenants is straightforward to achieve. Il fornitore dell'applicazione deve definire procedure per gestire con attenzione le personalizzazioni dello schema su larga scala.The application vendor must design procedures to carefully manage schema customizations at scale.

Pool elasticiElastic pools

Quando vengono distribuiti nello stesso gruppo di risorse, i database possono essere raggruppati in pool elastici.When databases are deployed in the same resource group, they can be grouped into elastic pools. I pool forniscono un modo economico per condividere le risorse tra più database.The pools provide a cost-effective way of sharing resources across many databases. Questa opzione di pool è più economica rispetto alla necessità per ogni database di contenere i picchi di utilizzo che si trova a gestire.This pool option is cheaper than requiring each database to be large enough to accommodate the usage peaks that it experiences. Anche se i database in pool condividono l'accesso alle risorse, possono comunque conseguire un elevato livello di isolamento delle prestazioni.Even though pooled databases share access to resources they can still achieve a high degree of performance isolation.

Progettazione di app multi-tenant con database per tenant mediante pool elastico.Design of multi-tenant app with database-per-tenant, using elastic pool.

Il database SQL di Azure fornisce gli strumenti necessari per configurare, monitorare e gestire la condivisione.Azure SQL Database provides the tools necessary to configure, monitor, and manage the sharing. Le metriche delle prestazioni a livello di pool e di database sono disponibili nella portale di Azure e nei log di monitoraggio di Azure.Both pool-level and database-level performance metrics are available in the Azure portal, and through Azure Monitor logs. Le metriche possono fornire dettagli sulle prestazioni aggregate e specifiche del tenant.The metrics can give great insights into both aggregate and tenant-specific performance. I singoli database possono essere spostati tra i pool per fornire risorse riservate a un tenant specifico.Individual databases can be moved between pools to provide reserved resources to a specific tenant. Questi strumenti garantiscono prestazioni ottimali in modo conveniente.These tools enable you to ensure good performance in a cost effective manner.

Scalabilità delle operazioni per la funzione di database per tenantOperations scale for database-per-tenant

La piattaforma di database SQL di Azure offre numerose funzionalità di gestione progettate per gestire un numero elevato di database su larga scala, ad esempio ben più di 100.000 database.The Azure SQL Database platform has many management features designed to manage large numbers of databases at scale, such as well over 100,000 databases. Queste funzionalità rendono plausibile il criterio di database per tenant.These features make the database-per-tenant pattern plausible.

Si supponga ad esempio un sistema con un database di 1.000 tenant come unico database.For example, suppose a system has a 1000-tenant database as its only one database. Il database potrebbe avere 20 indici.The database might have 20 indexes. Se il sistema esegue una conversione per ottenere 1000 database a tenant singolo, la quantità degli indici aumenta a 20.000.If the system converts to having 1000 single-tenant databases, the quantity of indexes rises to 20,000. Nel database SQL come parte dell' ottimizzazione automatica, le funzionalità di indicizzazione automatica sono abilitate per impostazione predefinita.In SQL Database as part of Automatic tuning, the automatic indexing features are enabled by default. L'indicizzazione automatica gestisce tutti i 20.000 indici e le ottimizzazioni costanti di creazione ed eliminazione.Automatic indexing manages for you all 20,000 indexes and their ongoing create and drop optimizations. Queste azioni automatizzate si verificano all'interno di un singolo database e non vengono coordinate o limitate da azioni simili in altri database.These automated actions occur within an individual database, and they are not coordinated or restricted by similar actions in other databases. L'indicizzazione automatica considera gli indici in modo diverso in un database occupato rispetto a un database meno occupato.Automatic indexing treats indexes differently in a busy database than in a less busy database. Questo tipo di personalizzazione della gestione degli indici potrebbe risultare poco pratico a livello di database per tenant se questa significativa attività di gestione deve essere eseguita 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.

Altre funzionalità di gestione facilmente scalabili includono quanto segue:Other management features that scale well include the following:

  • Backup predefiniti.Built-in backups.
  • Disponibilità elevata.High availability.
  • Crittografia su disco.On-disk encryption.
  • Dati di telemetria relativi alle prestazioni.Performance telemetry.

AutomazioneAutomation

È possibile creare script per le operazioni di gestione e offrirle tramite un modello DevOps .The management operations can be scripted and offered through a devops model. Le operazioni possono anche essere automatizzate ed esposte nell'applicazione.The operations can even be automated and exposed in the application.

Ad esempio, è possibile automatizzare un ripristino temporizzato di un tenant singolo.For example, you could automate the recovery of a single tenant to an earlier point in time. Il ripristino prevede soltanto il recupero del database a tenant singolo che archivia il tenant.The recovery only needs to restore the one single-tenant database that stores the tenant. Questo ripristino non ha alcun impatto su altri tenant, a conferma del fatto che le operazioni di gestione si verificano a livello di granularità di ogni singolo tenant.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. App multi-tenant con database multi-tenantMulti-tenant app with multi-tenant databases

Un altro criterio disponibile permette di archiviare diversi tenant in un database multi-tenant.Another available pattern is to store many tenants in a multi-tenant database. L'istanza dell'applicazione può avere un numero qualsiasi di database multi-tenant.The application instance can have any number of multi-tenant databases. Lo schema di un database multi-tenant deve contenere una o più colonne di identificatori dei tenant, in modo che i dati di un determinato tenant possano essere recuperati in modo selettivo.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. Lo schema potrebbe anche richiedere alcune tabelle o colonne utilizzate solo da un subset di tenant.Further, the schema might require a few tables or columns that are used by only a subset of tenants. Tuttavia, codice statico e dati di riferimento vengono archiviati una sola volta e condivisi da tutti i tenant.However, static code and reference data is stored only once and is shared by all tenants.

L'isolamento dei tenant viene ignoratoTenant isolation is sacrificed

Dati:   un database multi-tenant comporta necessariamente che venga ignorato l'isolamento dei tenant.Data:  A multi-tenant database necessarily sacrifices tenant isolation. I dati di più tenant vengono archiviati insieme in un database.The data of multiple tenants is stored together in one database. Durante lo sviluppo, verificare che le query non espongano mai i dati di più tenant.During development, ensure that queries never expose data from more than one tenant. Il database SQL supporta la sicurezza a livello di riga, che può imporre che i dati restituiti da una query abbiano come ambito un singolo tenant.SQL Database supports row-level security, which can enforce that data returned from a query be scoped to a single tenant.

Elaborazione:   un database multi-tenant condivide le risorse di calcolo e archiviazione tra tutti i relativi tenant.Processing:  A multi-tenant database shares compute and storage resources across all its tenants. È possibile monitorare l'intero database per verificare che le prestazioni siano accettabili.The database as a whole can be monitored to ensure it is performing acceptably. Tuttavia, il sistema Azure non è in grado di monitorare o gestire l'uso di queste risorse da un singolo tenant per impostazione predefinita.However, the Azure system has no built-in way to monitor or manage the use of these resources by an individual tenant. Il database multi-tenant rischia quindi maggiormente di incontrare elementi che potrebbero influire negativamente sulle prestazioni, in cui il carico di lavoro di un tenant iperattivo influisce sulle prestazioni di altri tenant nello stesso database.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. Un livello aggiuntivo di monitoraggio a livello di applicazione potrebbe monitorare le prestazioni a livello di tenant.Additional application-level monitoring could monitor tenant-level performance.

Costi ridottiLower cost

In generale, i database multi-tenant sono caratterizzati dal costo minimo per tenant.In general, multi-tenant databases have the lowest per-tenant cost. I costi delle risorse per un database singolo sono inferiori rispetto a quelli per un pool elastico di dimensioni equivalenti.Resource costs for a single database are lower than for an equivalently sized elastic pool. Inoltre, per i casi in cui i tenant necessitano di risorse di archiviazione limitate, è possibile archiviare milioni di tenant in un singolo database.In addition, for scenarios where tenants need only limited storage, potentially millions of tenants could be stored in a single database. Nessun pool elastico può contenere milioni di database.No elastic pool can contain millions of databases. Tuttavia, una soluzione contenente 1.000 database per pool, con 1.000 pool, può raggiungere una scala di milioni, al rischio di comprometterne la gestibilità.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.

Di seguito vengono discusse due varianti di un modello di database multi-tenant, in cui il modello multi-tenant partizionato rappresenta la soluzione più flessibile e scalabile.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. App multi-tenant con un singolo database multi-tenantMulti-tenant app with a single multi-tenant database

Il criterio di database multi-tenant più semplice usa un database singolo per ospitare i dati di tutti i tenant.The simplest multi-tenant database pattern uses a single database to host data for all tenants. Con l'aggiunta di più tenant, il database viene aumentato con maggiori risorse di archiviazione e calcolo.As more tenants are added, the database is scaled up with more storage and compute resources. Questo aumento potrebbe essere sufficiente, sebbene esista sempre un limite di scalabilità.This scale up might be all that is needed, although there is always an ultimate scale limit. Tuttavia, molto prima che venga raggiunto questo limite, il database diventa complesso da gestire.However, long before that limit is reached the database becomes unwieldy to manage.

Le operazioni di gestione incentrate sui singoli tenant sono più complesse da implementare in un database multi-tenant.Management operations that are focused on individual tenants are more complex to implement in a multi-tenant database. Su larga scala, queste operazioni potrebbero diventare inaccettabilmente lente.And at scale these operations might become unacceptably slow. Un esempio è rappresentato da un ripristino temporizzato dei dati per un solo tenant.One example is a point-in-time restore of the data for just one tenant.

G.G. App multi-tenant con database multi-tenant partizionatiMulti-tenant app with sharded multi-tenant databases

La maggior parte delle applicazioni SaaS accede ai dati di un solo tenant alla volta.Most SaaS applications access the data of only one tenant at a time. Questo criterio di accesso consente di distribuire i dati in più database o partizioni, in cui tutti i dati di ogni tenant sono contenuti in una sola partizione.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. In combinazione con un criterio di database multi-tenant, un modello partizionato consente un livello quasi illimitato di scalabilità.Combined with a multi-tenant database pattern, a sharded model allows almost limitless scale.

Progettazione di app multi-tenant con database multi-tenant partizionati.Design of multi-tenant app with sharded multi-tenant databases.

Gestire le partizioniManage shards

Il partizionamento orizzontale aggiunge complessità a livello di progettazione e di gestione operativa.Sharding adds complexity both to the design and operational management. È necessario un catalogo in cui gestire il mapping tra i tenant e i database.A catalog is required in which to maintain the mapping between tenants and databases. Sono anche necessarie procedure di gestione per gestire le partizioni e il popolamento dei tenant.In addition, management procedures are required to manage the shards and the tenant population. Ad esempio, è necessario progettare procedure per aggiungere e rimuovere le partizioni e per spostare i dati dei tenant tra le partizioni.For example, procedures must be designed to add and remove shards, and to move tenant data between shards. Una procedura di scalabilità consiste nell'aggiungere una nuova partizione e popolarla con nuovi tenant.One way to scale is to by adding a new shard and populating it with new tenants. In altri casi si potrebbe suddividere una partizione densamente popolata in due partizioni con minore densità.At other times you might split a densely populated shard into two less-densely populated shards. Dopo aver spostato o sospeso diversi tenant, si potrebbero unire le partizioni meno densamente popolate.After several tenants have been moved or discontinued, you might merge sparsely populated shards together. L'unione comporterebbe un uso delle risorse più economico.The merge would result in more cost-efficient resource utilization. Per bilanciare i carichi di lavoro, è possibile spostare anche i tenant tra le partizioni.Tenants might also be moved between shards to balance workloads.

Il database SQL offre uno strumento di divisione/unione che opera unitamente alla libreria di partizionamento orizzontale e al database del catalogo.SQL Database provides a split/merge tool that works in conjunction with the sharding library and the catalog database. L'app fornita consente di dividere e unire le partizioni e di spostare i dati dei tenant tra le partizioni.The provided app can split and merge shards, and it can move tenant data between shards. L'app gestisce anche il catalogo durante queste operazioni, contrassegnando i tenant interessati come offline prima di spostarli.The app also maintains the catalog during these operations, marking affected tenants as offline prior to moving them. Dopo lo spostamento, l'app aggiornerà di nuovo il catalogo con il nuovo mapping, contrassegnando il tenant come online.After the move, the app updates the catalog again with the new mapping, and marking the tenant as back online.

Database di dimensioni ridotte più facili da gestireSmaller databases more easily managed

Distribuendo i tenant tra più database, la soluzione multi-tenant partizionata determina una maggiore facilità di gestione dei database di dimensioni ridotte.By distributing tenants across multiple databases, the sharded multi-tenant solution results in smaller databases that are more easily managed. Ad esempio, il ripristino temporizzato di un tenant specifico prevede ora il ripristino di un singolo database di dimensioni ridotte da un backup anziché da un database di dimensioni maggiori che contiene tutti i tenant.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. È possibile scegliere la dimensione del database e il numero di tenant per database per bilanciare il carico di lavoro e gli impegni di gestione.The database size, and number of tenants per database, can be chosen to balance the workload and the management efforts.

Identificatore di tenant nello schemaTenant identifier in the schema

In base all'approccio di partizionamento orizzontale usato, potrebbero essere imposti vincoli aggiuntivi sullo schema di database.Depending on the sharding approach used, additional constraints may be imposed on the database schema. L'applicazione di divisione/unione del database SQL richiede che lo schema includa la chiave di partizionamento orizzontale, che in genere corrisponde all'identificatore del tenant.The SQL Database split/merge application requires that the schema includes the sharding key, which typically is the tenant identifier. L'identificatore del tenant è l'elemento iniziale nella chiave primaria di tutte le tabelle partizionate.The tenant identifier is the leading element in the primary key of all sharded tables. L'identificatore del tenant consente all'applicazione di divisione/unione di individuare e spostare rapidamente i dati associati a un tenant specifico.The tenant identifier enables the split/merge application to quickly locate and move data associated with a specific tenant.

Pool elastico per partizioniElastic pool for shards

I database multi-tenant partizionati possono essere inseriti in pool elastici.Sharded multi-tenant databases can be placed in elastic pools. In generale, includere molti database a tenant singolo in un pool è vantaggioso tanto quanto includere più tenant in alcuni database multi-tenant.In general, having many single-tenant databases in a pool is as cost efficient as having many tenants in a few multi-tenant databases. I database multi-tenant risultano vantaggiosi in presenza di un numero elevato di tenant relativamente inattivi.Multi-tenant databases are advantageous when there are a large number of relatively inactive tenants.

H.H. Modello di database multi-tenant partizionato ibridoHybrid sharded multi-tenant database model

Nel modello ibrido tutti i database presentano l'identificatore del tenant nello schema.In the hybrid model, all databases have the tenant identifier in their schema. I database sono tutti in grado di archiviare più tenant e possono essere partizionati.The databases are all capable of storing more than one tenant, and the databases can be sharded. A livello di schema sono quindi tutti database multi-tenant.So in the schema sense, they are all multi-tenant databases. In pratica, però, alcuni database contengono un solo tenant.Yet in practice some of these databases contain only one tenant. Indipendentemente da ciò, la quantità di tenant archiviati in un determinato database non ha effetto sullo schema del database.Regardless, the quantity of tenants stored in a given database has no effect on the database schema.

Spostamento dei tenantMove tenants around

È possibile spostare in qualsiasi momento un tenant specifico nel relativo database multi-tenant.At any time, you can move a particular tenant to its own multi-tenant database. E sempre in qualsiasi momento è possibile cambiare idea e ripristinare il tenant in un database contenente più tenant.And at any time, you can change your mind and move the tenant back to a database that contains multiple tenants. È anche possibile assegnare un tenant a un nuovo database a tenant singolo quando si esegue il provisioning del nuovo database.You can also assign a tenant to new single-tenant database when you provision the new database.

Il modello ibrido risulta particolarmente indicato se sussistono grandi differenze tra le esigenze di risorse dei gruppi identificabili di tenant.The hybrid model shines when there are large differences between the resource needs of identifiable groups of tenants. Si supponga ad esempio che ai tenant che fanno parte di una versione di valutazione gratuita non venga garantito lo stesso livello di prestazioni elevate dei tenant che fanno parte di una sottoscrizione.For example, suppose that tenants participating in a free trial are not guaranteed the same high level of performance that subscribing tenants are. I criteri per i tenant nella fase della versione di valutazione gratuita potrebbero prevedere l'archiviazione in un database multi-tenant condiviso tra tutti i tenant della versione di valutazione gratuita.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. Quando un tenant di una versione di valutazione gratuita esegue la sottoscrizione al livello di servizio di base, può essere spostato in un altro database multi-tenant che potrebbe avere un numero inferiore di tenant.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 sottoscrittore che ha acquistato il livello di servizio premium potrebbe essere spostato nel nuovo database a tenant singolo corrispondente.A subscriber that pays for the premium service tier could be moved to its own new single-tenant database.

PoolPools

In questo modello ibrido i database a tenant singolo per i tenant con sottoscrizione possono essere posizionati in pool di risorse per ridurre i costi di database per ogni tenant.In this hybrid model, the single-tenant databases for subscriber tenants can be placed in resource pools to reduce database costs per tenant. Questa situazione si verifica anche nel modello di database per tenant.This is also done in the database-per-tenant model.

I.I. Modelli di tenancy a confrontoTenancy models compared

La tabella seguente riepiloga le differenze tra i modelli di tenancy principali.The following table summarizes the differences between the main tenancy models.

MisurazioneMeasurement App autonomaStandalone app Database per tenantDatabase-per-tenant Multi-tenant partizionatoSharded multi-tenant
ScalabilitàScale MediMedium
1-centinaia1-100s
Molto altaVery high
1-centinaia di migliaia1-100,000s
Senza limitazioniUnlimited
1-milioni1-1,000,000s
Isolamento dei tenantTenant isolation Molto altaVery high HighHigh Basso, ad eccezione di eventuali tenant singoli (soli in un database multi-tenant).Low; except for any single tenant (that is alone in an MT db).
Costo di database per tenantDatabase cost per tenant Alto; dimensionato per i picchi.High; is sized for peaks. Basso; vengono usati i pool.Low; pools used. Minimo, per tenant di piccole dimensioni nei database multi-tenant.Lowest, for small tenants in MT DBs.
Monitoraggio e gestione delle prestazioniPerformance monitoring and management Solo per singolo tenantPer-tenant only Aggregati + per singolo tenantAggregate + per-tenant Aggregati, ma per singolo tenant solo per i database singoli.Aggregate; although is per-tenant only for singles.
Complessità di sviluppoDevelopment complexity BassoLow BassoLow Media, a causa del partizionamento orizzontale.Medium; due to sharding.
Complessità operativaOperational complexity Bassa-alta.Low-High. Semplice a livello individuale, complessa su larga scala.Individually simple, complex at scale. Bassa-media.Low-Medium. I criteri gestiscono la complessità su larga scala.Patterns address complexity at scale. Bassa-alta.Low-High. La gestione dei singoli tenant è complessa.Individual tenant management is complex.
 

Passaggi successiviNext steps