Mandantenmuster für mehrinstanzenfähige SaaS-DatenbankenMulti-tenant SaaS database tenancy patterns

In diesem Artikel werden die verschiedenen Mandantenmodelle beschrieben, die für eine mehrinstanzenfähige SaaS-Anwendung verfügbar sind.This article describes the various tenancy models available for a multi-tenant SaaS application.

Wenn Sie eine mehrinstanzenfähige SaaS-Anwendung entwerfen, wählen Sie nach sorgfältiger Überlegung das Mandantenmodell aus, das den Anforderungen Ihrer Anwendung am besten gerecht wird.When designing a multi-tenant SaaS application, you must carefully choose the tenancy model that best fits the needs of your application. Ein Mandantenmodell legt fest, wie die Daten eines jeden Mandanten dem Speicher zugeordnet werden.A tenancy model determines how each tenant’s data is mapped to storage. Die Wahl des Mandantenmodells wirkt sich auf den Entwurf und die Verwaltung der Anwendung aus.Your choice of tenancy model impacts application design and management. Ein späterer Wechsel zu einem anderen Modell kann sich mitunter als kostspielig erweisen.Switching to a different model later is sometimes costly.

A.A. SaaS-Konzepte und -TerminologieSaaS concepts and terminology

Im Software-as-a-Service-Modell (SaaS) verkauft Ihr Unternehmen keine Lizenzen für Ihre Software.In the Software as a Service (SaaS) model, your company does not sell licenses to your software. Stattdessen zahlt jeder Kunde eine Leihgebühr an Ihr Unternehmen, sodass jeder Kunde ein Mandant Ihres Unternehmens wird.Instead, each customer makes rent payments to your company, making each customer a tenant of your company.

Als Gegenleistung für die Leihgebühr erhält jeder Mandant Zugriff auf Ihre SaaS-Anwendungskomponenten, und seine Daten werden im SaaS-System gespeichert.In return for paying rent, each tenant receives access to your SaaS application components, and has its data stored in the SaaS system.

Der Begriff Mandantenmodell bezieht sich auf die Art und Weise, in der die gespeicherten Daten des Mandanten organisiert sind:The term tenancy model refers to how tenants' stored data is organized:

  • Einzelinstanzenfähigkeit:   Jede Datenbank speichert Daten eines einzelnen Mandanten.Single-tenancy:  Each database stores data from only one tenant.
  • Mehrinstanzenfähigkeit:   Jede Datenbank speichert Daten mehrerer Mandanten (mit Mechanismen zum Datenschutz).Multi-tenancy:  Each database stores data from multiple separate tenants (with mechanisms to protect data privacy).
  • Hybride Mandantenmodelle sind ebenfalls verfügbar.Hybrid tenancy models are also available.

B:B. Vorgehensweise zum Auswählen des geeigneten MandantenmodellsHow to choose the appropriate tenancy model

Das Mandantenmodell wirkt sich in der Regel nicht auf die Funktionsweise einer Anwendung aus, hat jedoch sehr wahrscheinlich Auswirkungen auf andere Aspekte der gesamten Lösung.In general, the tenancy model does not impact the function of an application, but it likely impacts other aspects of the overall solution. Für die Bewertung der einzelnen Modelle werden folgende Kriterien herangezogen:The following criteria are used to assess each of the models:

  • Skalierbarkeit:Scalability:

    • Anzahl der MandantenNumber of tenants.
    • Speicher pro MandantStorage per-tenant.
    • Aggregierter SpeicherStorage in aggregate.
    • WorkloadWorkload.
  • Mandantenisolation:   Datenisolation und Leistung (Auswirkungen der Workload eines Mandanten auf andere Workloads)Tenant isolation:  Data isolation and performance (whether one tenant’s workload impacts others).

  • Kosten pro Mandant:   Kosten für DatenbankPer-tenant cost:  Database costs.

  • Komplexität der Entwicklung:Development complexity:

    • Änderungen am SchemaChanges to schema.
    • Änderungen an Abfragen (für das Muster erforderlich)Changes to queries (required by the pattern).
  • Komplexität des Betriebs:Operational complexity:

    • Überwachen und Verwalten der LeistungMonitoring and managing performance.
    • SchemaverwaltungSchema management.
    • Wiederherstellen eines MandantenRestoring a tenant.
    • NotfallwiederherstellungDisaster recovery.
  • Anpassbarkeit:   Einfache Durchführung von speziell für Mandanten oder Mandantenklassen geltenden SchemaanpassungenCustomizability:  Ease of supporting schema customizations that are either tenant-specific or tenant class-specific.

Die Informationen zu Mandanten beziehen sich hauptsächlich auf die Datenschicht.The tenancy discussion is focused on the data layer. Im Folgenden sollten wir jedoch einen kurzen Blick auf die Anwendungsschicht werfen.But consider for a moment the application layer. Die Anwendungsschicht ist als monolithische Einheit zu betrachten.The application layer is treated as a monolithic entity. Wenn Sie die Anwendung in viele kleine Komponenten unterteilen, kann dies die Wahl Ihres Mandantenmodells ändern.If you divide the application into many small components, your choice of tenancy model might change. Einige Komponenten können je nach Mandant sowie verwendeter Speichertechnologie oder Plattform unterschiedlich behandelt werden.You could treat some components differently than others regarding both tenancy and the storage technology or platform used.

C.C. Eigenständige Einzelinstanz-App mit einer EinzelinstanzdatenbankStandalone single-tenant app with single-tenant database

Isolation der AnwendungsebeneApplication level isolation

In diesem Modell wird die gesamte Anwendung mehrmals installiert, nämlich einmal pro Mandant.In this model, the whole application is installed repeatedly, once for each tenant. Da jede Instanz der App eine eigenständige Instanz darstellt, interagiert sie nie mit einer anderen eigenständigen Instanz.Each instance of the app is a standalone instance, so it never interacts with any other standalone instance. Jede App-Instanz umfasst nur einen Mandanten und erfordert daher nur eine Datenbank.Each instance of the app has only one tenant, and therefore needs only one database. Die gesamte Datenbank ist somit ausschließlich für den jeweiligen Mandanten bestimmt.The tenant has the database all to itself.

Entwurf einer eigenständigen App mit einer EinzelinstanzdatenbankDesign of standalone app with exactly one single-tenant database.

Jede App-Instanz wird in einer separaten Azure-Ressourcengruppe installiert.Each app instance is installed in a separate Azure resource group. Die Ressourcengruppe kann einem Abonnement zugeordnet sein, das dem Softwarehersteller oder Mandanten gehört.The resource group can belong to a subscription that is owned by either the software vendor or the tenant. In beiden Fällen kann der Hersteller die Software für den Mandanten verwalten.In either case, the vendor can manage the software for the tenant. Jede Anwendungsinstanz ist so konfiguriert, dass sie eine Verbindung mit der entsprechenden Datenbank herstellt.Each application instance is configured to connect to its corresponding database.

Jede Mandantendatenbank wird als Einzeldatenbank bereitgestellt.Each tenant database is deployed as a single database. Dieses Modell ermöglicht die umfangreichste Datenbankisolation.This model provides the greatest database isolation. Für die Isolation müssen jeder Datenbank jedoch genügend Ressourcen zugewiesen werden, damit Spitzenlasten verarbeitet werden können.But the isolation requires that sufficient resources be allocated to each database to handle its peak loads. Hier ist entscheidend, dass Pools für elastische Datenbanken nicht für Datenbanken verwendet werden können, die in verschiedenen Ressourcengruppen oder für verschiedene Abonnements bereitgestellt werden.Here it matters that elastic pools cannot be used for databases deployed in different resource groups or to different subscriptions. Aufgrund dieser Beschränkung zählt dieses Modell einer eigenständigen Einzelinstanz-App hinsichtlich der gesamten Datenbankkosten zur teuersten Lösung.This limitation makes this standalone single-tenant app model the most expensive solution from an overall database cost perspective.

Herstellerseitige VerwaltungVendor management

Der Hersteller kann auf alle Datenbanken in sämtlichen eigenständigen App-Instanzen zugreifen, auch wenn die App-Instanzen in unterschiedlichen Mandantenabonnements installiert sind.The vendor can access all the databases in all the standalone app instances, even if the app instances are installed in different tenant subscriptions. Der Zugriff erfolgt über SQL-Verbindungen.The access is achieved via SQL connections. Mit einem solchen instanzübergreifenden Zugriff kann der Hersteller die Schemaverwaltung und die datenbankübergreifende Abfrage für Berichterstellungs- oder Analysezwecke zentralisieren.This cross-instance access can enable the vendor to centralize schema management and cross-database query for reporting or analytics purposes. Falls diese Art der zentralen Verwaltung erforderlich ist, muss ein Katalog für die Zuordnung zwischen Mandanten-IDs und Datenbank-URIs bereitgestellt werden.If this kind of centralized management is desired, a catalog must be deployed that maps tenant identifiers to database URIs. Für die Bereitstellung eines Katalogs wird eine Shardingbibliothek, die von Azure SQL-Datenbank bereitgestellt wird, zusammen mit einer SQL-Datenbank verwendet.Azure SQL Database provides a sharding library that is used together with a SQL database to provide a catalog. Die Shardingbibliothek wird offiziell als Clientbibliothek für elastische Datenbanken bezeichnet.The sharding library is formally named the Elastic Database Client Library.

D:D. Mehrinstanzenfähige App mit einer Datenbank pro MandantMulti-tenant app with database-per-tenant

Beim nächsten Muster kommt eine mehrinstanzenfähige Anwendung mit vielen Einzelinstanzdatenbanken zum Einsatz.This next pattern uses a multi-tenant application with many databases, all being single-tenant databases. Für jeden neuen Mandanten wird eine neue Datenbank bereitgestellt.A new database is provisioned for each new tenant. Die Logikschicht wird vertikal zentral hochskaliert, indem weitere Ressourcen pro Knoten hinzugefügt werden.The application tier is scaled up vertically by adding more resources per node. Alternativ wird die App durch Hinzufügen weiterer Knoten horizontal erweitert.Or the app is scaled out horizontally by adding more nodes. Die Skalierung basiert auf der Workload und hängt von der Anzahl oder dem Umfang der einzelnen Datenbanken ab.The scaling is based on workload, and is independent of the number or scale of the individual databases.

Entwurf einer mehrinstanzenfähigen App mit einer Datenbank pro MandantDesign of multi-tenant app with database-per-tenant.

Durchführen von Anpassungen für einen MandantenCustomize for a tenant

Wie beim Muster einer eigenständigen App ermöglicht auch die Verwendung von Einzelinstanzdatenbanken eine umfassende Mandantenisolation.Like the standalone app pattern, the use of single-tenant databases gives strong tenant isolation. In jeder App, deren Modell ausschließlich Einzelinstanzdatenbanken angibt, kann das Schema für eine bestimmte Datenbank an den jeweiligen Mandanten angepasst und entsprechend optimiert werden.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. Diese Anpassung wirkt sich nicht auf andere Mandanten in der App aus.This customization does not affect other tenants in the app. Eventuell benötigt ein Mandant Daten, die über die standardmäßigen Datenfelder, die alle Mandanten benötigen, hinausgehen.Perhaps a tenant might need data beyond the basic data fields that all tenants need. Des Weiteren kann es sein, dass für das zusätzliche Datenfeld ein Index erforderlich ist.Further, the extra data field might need an index.

Bei einer Datenbank pro Mandant lässt sich das Schema für einen oder mehrere einzelne Mandanten problemlos realisieren.With database-per-tenant, customizing the schema for one or more individual tenants is straightforward to achieve. Der Hersteller der Anwendung muss Verfahren entwerfen, um sorgfältig Schemaanpassungen im großen Maßstab zu verwalten.The application vendor must design procedures to carefully manage schema customizations at scale.

Pools für elastische DatenbankenElastic pools

Wenn Datenbanken in derselben Ressourcengruppe bereitgestellt werden, können sie in Pools für elastische Datenbanken gruppiert werden.When databases are deployed in the same resource group, they can be grouped into elastic pools. Die Pools bieten eine kosteneffiziente Methode, um Ressourcen auf eine Vielzahl von Datenbanken aufzuteilen.The pools provide a cost-effective way of sharing resources across many databases. Eine solche Pooloption ist günstiger, als die einzelnen Datenbanken so groß anzulegen, dass auftretende Verbrauchsspitzen verarbeitet werden können.This pool option is cheaper than requiring each database to be large enough to accommodate the usage peaks that it experiences. Auch wenn Pooldatenbanken gemeinsam auf Ressourcen zugreifen, können sie dennoch einen hohen Grad an Leistungsisolation erzielen.Even though pooled databases share access to resources they can still achieve a high degree of performance isolation.

Entwurf einer mehrinstanzenfähigen App mit einer Datenbank pro Mandant unter Verwendung eines Pools für elastische DatenbankenDesign of multi-tenant app with database-per-tenant, using elastic pool.

Azure SQL-Datenbank stellt die Tools zur Verfügung, die erforderlich sind, um die Freigabe zu konfigurieren, zu überwachen und zu verwalten.Azure SQL Database provides the tools necessary to configure, monitor, and manage the sharing. Sowohl Leistungsmetriken auf Pool- als auch auf Datenbankebene werden über das Azure-Portal und über Azure Monitor-Protokolle zur Verfügung gestellt.Both pool-level and database-level performance metrics are available in the Azure portal, and through Azure Monitor logs. Die Metriken können umfassenden Einblick in die aggregierte und mandantenspezifische Leistung bieten.The metrics can give great insights into both aggregate and tenant-specific performance. Einzelne Datenbanken können zwischen Pools verschoben werden, um einem bestimmten Mandanten reservierte Ressourcen zur Verfügung zu stellen.Individual databases can be moved between pools to provide reserved resources to a specific tenant. Durch diese Tools können Sie auf kosteneffiziente Weise eine hohe Leistung sicherstellen.These tools enable you to ensure good performance in a cost effective manner.

Skalierung des Betriebs für das Modell mit einer Datenbank pro MandantOperations scale for database-per-tenant

Die Azure SQL-Datenbank-Plattform verfügt über viele Verwaltungsfeatures, die für die Verwaltung einer großen Anzahl von Datenbanken ausgelegt sind (z.B. weit über 100.000 Datenbanken).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. Aufgrund dieser Eigenschaften erweist sich das Muster mit einer Datenbank pro Mandant als sinnvolle Option.These features make the database-per-tenant pattern plausible.

Nehmen wir beispielsweise an, dass ein System ausschließlich auf einer Datenbank mit 1000 Mandanten basiert.For example, suppose a system has a 1000-tenant database as its only one database. Die Datenbank kann 20 Indizes enthalten.The database might have 20 indexes. Wenn das System nun auf 1000 Einzelinstanzdatenbanken umgestellt wird, steigt die Zahl der Indizes folglich auf 20.000.If the system converts to having 1000 single-tenant databases, the quantity of indexes rises to 20,000. Standardmäßig sind die automatischen Indizierungsfunktionen in SQL-Datenbank im Rahmen der automatischen Optimierung aktiviert.In SQL Database as part of Automatic tuning, the automatic indexing features are enabled by default. Bei der automatischen Indizierung werden alle 20.000 Indizes sowie die entsprechenden laufenden Optimierungen im Hinblick auf Erstellungs- und Reduzierungsvorgänge für Sie verwaltet.Automatic indexing manages for you all 20,000 indexes and their ongoing create and drop optimizations. Diese automatisierten Aktionen finden in einer einzelnen Datenbank statt und werden nicht durch ähnliche Aktionen in anderen Datenbanken koordiniert oder eingeschränkt.These automated actions occur within an individual database, and they are not coordinated or restricted by similar actions in other databases. Die automatische Indizierung behandelt Indizes in einer ausgelasteten Datenbank anders als in einer weniger stark ausgelasteten Datenbank.Automatic indexing treats indexes differently in a busy database than in a less busy database. Diese Art der Indexverwaltungsanpassung wäre bei manueller Ausführung einer derart umfangreichen Verwaltungsaufgabe im Hinblick auf eine Datenbank pro Mandant nicht praktikabel.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.

Zu anderen Verwaltungsfunktionen, die sich gute skalieren lassen, zählen Folgende:Other management features that scale well include the following:

  • Integrierte SicherungenBuilt-in backups.
  • Hochverfügbarkeit.High availability.
  • DatenträgerverschlüsselungOn-disk encryption.
  • LeistungstelemetriedatenPerformance telemetry.

AutomationAutomation

Für die Verwaltungsvorgänge können Skripts erstellt werden, und sie können über ein DevOps-Modell zur Verfügung gestellt werden.The management operations can be scripted and offered through a devops model. Die Vorgänge können sogar automatisiert und in der Anwendung sichtbar gemacht werden.The operations can even be automated and exposed in the application.

Beispielsweise könnten Sie die Wiederherstellung eines einzelnen Mandanten zu einem früheren Zeitpunkt automatisieren.For example, you could automate the recovery of a single tenant to an earlier point in time. Bei der Wiederherstellung muss lediglich eine Einzelinstanzdatenbank wiederhergestellt werden, in der der Mandant gespeichert wird.The recovery only needs to restore the one single-tenant database that stores the tenant. Diese Wiederherstellung hat keine Auswirkungen auf andere Mandanten, was wiederum zeigt, dass Verwaltungsvorgänge in den einzelnen Mandanten auf hochgradig granularer Ebene stattfinden.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. Mehrinstanzenfähige App mit mehrinstanzenfähigen DatenbankenMulti-tenant app with multi-tenant databases

Ein weiteres verfügbares Muster besteht darin, viele Mandanten in einer mehrinstanzenfähigen Datenbank zu speichern.Another available pattern is to store many tenants in a multi-tenant database. Die Anwendungsinstanz kann beliebig viele mehrinstanzenfähige Datenbanken umfassen.The application instance can have any number of multi-tenant databases. Das Schema einer mehrinstanzenfähigen Datenbank muss eine oder mehrere Spalten für die Mandanten-ID enthalten, damit die Daten eines beliebigen Mandanten selektiv abgerufen werden können.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. Zudem sind für das Schema eventuell einige Tabellen oder Spalten erforderlich, die nur von einer Teilmenge von Mandanten verwendet werden.Further, the schema might require a few tables or columns that are used by only a subset of tenants. Statische Codes und Referenzdaten werden jedoch nur einmal gespeichert und von allen Mandanten gemeinsam genutzt.However, static code and reference data is stored only once and is shared by all tenants.

Eingeschränkte MandantenisolationTenant isolation is sacrificed

Daten:   Eine mehrinstanzenfähige Datenbank schränkt zwangsläufig die Mandantenisolation ein.Data:  A multi-tenant database necessarily sacrifices tenant isolation. Die Daten mehrerer Mandanten werden zusammen in einer Datenbank gespeichert.The data of multiple tenants is stored together in one database. Achten Sie bei der Entwicklung darauf, dass bei Abfragen niemals Daten von mehr als einem Mandanten offengelegt werden.During development, ensure that queries never expose data from more than one tenant. SQL-Datenbank unterstützt die Sicherheit auf Zeilenebene, wodurch erzwungen werden kann, dass die von einer Abfrage zurückgegebenen Daten auf einen einzelnen Mandanten beschränkt werden.SQL Database supports row-level security, which can enforce that data returned from a query be scoped to a single tenant.

Verarbeitung:   Eine mehrinstanzenfähige Datenbank teilt Compute- und Speicherressourcen auf alle seine Mandanten auf.Processing:  A multi-tenant database shares compute and storage resources across all its tenants. Um einen ordnungsgemäßen Betrieb sicherzustellen, kann die gesamte Datenbank überwacht werden.The database as a whole can be monitored to ensure it is performing acceptably. Allerdings weist das Azure-System keine integrierte Option auf, um die Nutzung dieser Ressourcen durch einen einzelnen Mandanten zu überwachen oder zu verwalten.However, the Azure system has no built-in way to monitor or manage the use of these resources by an individual tenant. Daher besteht bei einer mehrinstanzenfähigen Datenbank ein höheres Risiko eines sogenannten „Noisy Neighbor“-Effekts, bei dem die Workload eines übermäßig aktiven Mandanten die Leistung anderer Mandanten in derselben Datenbank beeinträchtigt.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. Durch zusätzliche Überwachung auf Anwendungsebene kann die Leistung auf Mandantenebene überwacht werden.Additional application-level monitoring could monitor tenant-level performance.

KostensenkungLower cost

Im Allgemeinen weisen mehrinstanzenfähige Datenbanken die niedrigsten Kosten pro Mandant auf.In general, multi-tenant databases have the lowest per-tenant cost. Die Ressourcenkosten für eine Einzeldatenbank sind niedriger als die für einen gleichwertig großen Pool für elastische Datenbanken.Resource costs for a single database are lower than for an equivalently sized elastic pool. Darüber hinaus können Millionen von Mandanten in Szenarien, in denen Mandanten nur einen begrenzten Speicher benötigen, eventuell in einer einzigen Datenbank gespeichert werden.In addition, for scenarios where tenants need only limited storage, potentially millions of tenants could be stored in a single database. Es gibt keine Pools für elastische Datenbanken, die Millionen von Datenbanken enthalten können.No elastic pool can contain millions of databases. Eine Lösung mit 1000 Pools – wobei ein Pool 1000 Datenbanken enthält – kann jedoch eine Größenordnung in Millionenhöhe erreichen und damit eine umständliche Verwaltung nach sich ziehen.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.

Im Folgenden werden zwei Varianten eines mehrinstanzenfähigen Datenbankmodells erläutert, wobei das mehrinstanzenfähige Modell mit Sharding das flexibelste Modell mit der höchsten Skalierbarkeit darstellt.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. Mehrinstanzenfähige App mit einer EinzelinstanzdatenbankMulti-tenant app with a single multi-tenant database

Das einfachste Muster einer mehrinstanzenfähigen Datenbank verwendet eine einzelne Datenbank, um Daten für alle Mandanten zu hosten.The simplest multi-tenant database pattern uses a single database to host data for all tenants. Bei einer steigenden Anzahl von Mandanten muss die Datenbank mit weiteren Speicher- und Computeressourcen zentral hochskaliert werden.As more tenants are added, the database is scaled up with more storage and compute resources. Eine solche zentrale Hochskalierung könnte Abhilfe leisten, wobei es jedoch immer eine finale Begrenzung für die Skalierung gibt.This scale up might be all that is needed, although there is always an ultimate scale limit. Allerdings wird die Datenbankverwaltung lange vor Erreichen dieser Begrenzung zunehmend umständlicher.However, long before that limit is reached the database becomes unwieldy to manage.

Bei mehrinstanzenfähigen Datenbanken ist die Implementierung von Verwaltungsvorgängen, die sich auf einzelne Mandanten konzentrieren, komplexer.Management operations that are focused on individual tenants are more complex to implement in a multi-tenant database. Mit steigender Größenordnung könnte dies dazu führen, dass diese Vorgänge unzumutbar langsam werden.And at scale these operations might become unacceptably slow. Ein Beispiel ist die Point-in-Time-Wiederherstellung von Daten für nur einen Mandanten.One example is a point-in-time restore of the data for just one tenant.

G.G. Mehrinstanzenfähige App mit mehrinstanzenfähigen Datenbanken mit ShardingMulti-tenant app with sharded multi-tenant databases

Die meisten SaaS-Anwendungen greifen auf die Daten von jeweils nur einem Mandanten zu.Most SaaS applications access the data of only one tenant at a time. Bei diesem Zugriffsmuster können Mandantendaten auf mehrere Datenbanken oder Shards aufgeteilt werden, wobei alle Daten eines beliebigen Mandanten in einem Shard enthalten sind.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 Kombination mit einem Muster einer mehrinstanzenfähigen Datenbank ermöglicht ein Modell in Shards eine nahezu unbegrenzte Skalierbarkeit.Combined with a multi-tenant database pattern, a sharded model allows almost limitless scale.

Entwurf einer mehrinstanzenfähigen App mit mehrinstanzenfähigen Datenbanken mit ShardingDesign of multi-tenant app with sharded multi-tenant databases.

Verwalten von ShardsManage shards

Sharding erhöht die Komplexität sowohl im Hinblick auf den Entwurf als auch auf den Betrieb.Sharding adds complexity both to the design and operational management. Für die Verwaltung der Zuordnung zwischen Mandanten und Datenbanken ist ein Katalog erforderlich.A catalog is required in which to maintain the mapping between tenants and databases. Darüber hinaus sind Verwaltungsverfahren erforderlich, um die Anzahl der Shards und Mandanten zu verwalten.In addition, management procedures are required to manage the shards and the tenant population. Beispielsweise müssen Verfahren entworfen werden, um Shards hinzuzufügen und zu entfernen und Mandantendaten zwischen Shards zu verschieben.For example, procedures must be designed to add and remove shards, and to move tenant data between shards. Eine Möglichkeit zur Skalierung besteht darin, einen neuen Shard hinzuzufügen und ihn mit neuen Mandanten zu befüllen.One way to scale is to by adding a new shard and populating it with new tenants. In anderen Fällen kann ein dicht befüllter Shard in zwei weniger dicht befüllte Shards aufgeteilt werden.At other times you might split a densely populated shard into two less-densely populated shards. Nachdem mehrere Mandanten verschoben oder außer Kraft gesetzt wurden, können Sie wenig befüllte Shards zusammenführen.After several tenants have been moved or discontinued, you might merge sparsely populated shards together. Die Zusammenführung würde zu einer kosteneffizienteren Ressourcenverwendung führen.The merge would result in more cost-efficient resource utilization. Mandanten können auch zwischen den Shards verschoben werden, um für ausgeglichene Workloads zu sorgen.Tenants might also be moved between shards to balance workloads.

Die SQL-Datenbank bietet ein Tool zum Aufteilen bzw. Zusammenführen, das in Verbindung mit der Shardingbibliothek und der Katalogdatenbank verwendet werden kann.SQL Database provides a split/merge tool that works in conjunction with the sharding library and the catalog database. Die bereitgestellte App kann Shards aufteilen bzw. zusammenführen und Mandantendaten zwischen Shards verschieben.The provided app can split and merge shards, and it can move tenant data between shards. Die App verwaltet während dieser Vorgänge auch den Katalog, wobei die betroffenen Mandanten vor der Verschiebung als offline gekennzeichnet werden.The app also maintains the catalog during these operations, marking affected tenants as offline prior to moving them. Nach der Verschiebung aktualisiert die App den Katalog wieder mit der neuen Zuordnung und markiert den Mandanten wieder als online.After the move, the app updates the catalog again with the new mapping, and marking the tenant as back online.

Einfachere Verwaltung kleinerer DatenbankenSmaller databases more easily managed

Durch die Verteilung der Mandanten auf mehrere Datenbanken führt der Einsatz der mehrinstanzenfähigen Lösung mit Shards zu kleineren Datenbanken, die sich einfacher verwalten lassen.By distributing tenants across multiple databases, the sharded multi-tenant solution results in smaller databases that are more easily managed. Wenn Sie beispielsweise einen bestimmten Mandanten zu einem früheren Zeitpunkt wiederherstellen möchten, müssen Sie nun nicht mehr eine größere Datenbank mit allen Mandanten wiederherstellen, sondern nur noch eine einzelne kleinere Datenbank aus einer Sicherung.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. Die Datenbankgröße und die Anzahl der Mandanten pro Datenbank können so gewählt werden, das ein ausgewogenes Verhältnis zwischen Workload und Verwaltungsaufwand besteht.The database size, and number of tenants per database, can be chosen to balance the workload and the management efforts.

Mandanten-ID im SchemaTenant identifier in the schema

Abhängig von der verwendeten Shardingmethode können in Bezug auf das Datenbankschema zusätzliche Einschränkungen vorgenommen werden.Depending on the sharding approach used, additional constraints may be imposed on the database schema. Die SQL-Datenbankanwendung zum Aufteilen bzw. Zusammenführen erfordert, dass das Schema den Shardingschlüssel – üblicherweise die Mandanten-ID – enthält.The SQL Database split/merge application requires that the schema includes the sharding key, which typically is the tenant identifier. Die Mandanten-ID ist das führende Element des Primärschlüssels aller Shardingtabellen.The tenant identifier is the leading element in the primary key of all sharded tables. Mit der Mandanten-ID kann die Anwendung zum Aufteilen bzw. Zusammenführen, die einem bestimmten Mandanten zugeordneten Daten schnell lokalisieren und verschieben.The tenant identifier enables the split/merge application to quickly locate and move data associated with a specific tenant.

Pool für elastische Datenbanken für ShardsElastic pool for shards

Mehrinstanzenfähige Datenbanken mit Shards können in Pools für elastische Datenbanken platziert werden.Sharded multi-tenant databases can be placed in elastic pools. Die Verwaltung von vielen Einzelinstanzdatenbanken in einem Pool ist in der Regel genauso kosteneffizient wie die Verwaltung vieler Mandanten in mehreren mehrinstanzenfähigen Datenbanken.In general, having many single-tenant databases in a pool is as cost efficient as having many tenants in a few multi-tenant databases. Mehrinstanzenfähige Datenbanken erweisen sich vor allem dann als nützlich, wenn eine große Anzahl von relativ inaktiven Mandanten vorliegt.Multi-tenant databases are advantageous when there are a large number of relatively inactive tenants.

H.H. Hybrides mehrinstanzenfähiges Datenbankmodell mit ShardingHybrid sharded multi-tenant database model

Im hybriden Modell enthalten alle Datenbanken im Schema die Mandanten-ID.In the hybrid model, all databases have the tenant identifier in their schema. Alle Datenbanken können mehr als einen Mandanten speichern und in Shards aufgeteilt werden.The databases are all capable of storing more than one tenant, and the databases can be sharded. Hinsichtlich des Schemas handelt es sich also bei allen Datenbanken um mehrinstanzenfähige Datenbanken.So in the schema sense, they are all multi-tenant databases. In der Praxis enthalten einige dieser Datenbanken jedoch nur einen Mandanten.Yet in practice some of these databases contain only one tenant. Nichtsdestotrotz hat die Anzahl der in einer Datenbank gespeicherten Mandanten keinen Einfluss auf das Datenbankschema.Regardless, the quantity of tenants stored in a given database has no effect on the database schema.

Wechseln von MandantenMove tenants around

Sie können einen bestimmten Mandanten jederzeit in eine eigene mehrinstanzenfähige Datenbank verschieben.At any time, you can move a particular tenant to its own multi-tenant database. Sie können dies jederzeit rückgängig machen und den Mandanten wieder zu einer Datenbank mit mehreren Mandanten wechseln.And at any time, you can change your mind and move the tenant back to a database that contains multiple tenants. Sie können einem Mandanten bei der Bereitstellung einer neuen Datenbank auch eine neue Einzelinstanzdatenbank zuordnen.You can also assign a tenant to new single-tenant database when you provision the new database.

Das hybride Modell erweist sich vor allem dann als hilfreich, wenn große Unterschiede zwischen den Ressourcenanforderungen der identifizierbarer Mandantengruppen herrschen.The hybrid model shines when there are large differences between the resource needs of identifiable groups of tenants. Nehmen wir zum Beispiel an, dass Mandanten mit einer kostenlosen Testversion nicht dieselbe hohe Leistungsebene garantiert wird wie Mandanten mit einem Abonnement.For example, suppose that tenants participating in a free trial are not guaranteed the same high level of performance that subscribing tenants are. Die Richtlinie könnte vorschreiben, dass Mandanten im kostenlosen Testzeitraum in einer mehrinstanzenfähigen Datenbank, die von allen Mandanten mit der kostenlosen Testversion gemeinsam genutzt wird, gespeichert werden sollen.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. Wenn ein Mandant mit der kostenlosen Testversion ein Abonnement für die Dienstebene „Basic“ erwirbt, kann der Mandant in eine andere mehrinstanzenfähige Datenbank verschoben werden, die möglicherweise weniger Mandanten aufweist.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. Ein Abonnent, der für die Dienstebene „Premium“ bezahlt, kann in seine eigene neue Datenbank mit nur einem Mandanten verschoben werden.A subscriber that pays for the premium service tier could be moved to its own new single-tenant database.

PoolsPools

In diesem hybriden Modell können Einzelinstanzdatenbanken für Mandanten mit Abonnement in Ressourcenpools platziert werden, um die Datenbankkosten pro Mandant zu senken.In this hybrid model, the single-tenant databases for subscriber tenants can be placed in resource pools to reduce database costs per tenant. Dies wird über das Modell mit einer Datenbank pro Mandant erreicht.This is also done in the database-per-tenant model.

I.I. Vergleich von MandantenmodellenTenancy models compared

In der folgenden Tabelle werden die Unterschiede zwischen den wichtigsten Mandantenmodellen erläutert:The following table summarizes the differences between the main tenancy models.

MessungMeasurement Eigenständige AppStandalone app Eine Datenbank pro MandantDatabase-per-tenant Mehrinstanzenfähige Datenbank mit ShardsSharded multi-tenant
SkalierenScale MittelMedium
1 – mehrere 1001-100s
Sehr hochVery high
1 – mehrere 100.0001-100,000s
UnbegrenztUnlimited
1 – mehrere 1.000.0001-1,000,000s
MandantenisolationTenant isolation Sehr hochVery high HochHigh Niedrig, ausgenommen für einen (in einer MT-Datenbank einzelnen) Einzelmandanten.Low; except for any single tenant (that is alone in an MT db).
Datenbankkosten pro MandantDatabase cost per tenant Hoch, für Spitzen dimensioniertHigh; is sized for peaks. Niedrig, unter Verwendung von PoolsLow; pools used. Am niedrigsten, für kleine Mandanten in MT-DatenbankenLowest, for small tenants in MT DBs.
Leistungsüberwachung und -verwaltungPerformance monitoring and management Nur pro MandantPer-tenant only Aggregiert und pro MandantAggregate + per-tenant Aggregiert, jedoch nur für das Modell pro Mandant für Einzeldatenbanken.Aggregate; although is per-tenant only for singles.
Komplexität der EntwicklungDevelopment complexity NiedrigLow NiedrigLow Mittel, aufgrund von ShardingMedium; due to sharding.
Komplexität des BetriebsOperational complexity Niedrig bis hochLow-High. Einzeln einfach, aber im großen Maßstab komplexIndividually simple, complex at scale. Niedrig bis mittelLow-Medium. Muster als Abhilfemaßnahme für die Komplexität bei SkalierungenPatterns address complexity at scale. Niedrig bis hochLow-High. Die Verwaltung einzelner Mandanten ist komplex.Individual tenant management is complex.
 

Nächste SchritteNext steps