Unabhängig von Ihrer Architektur und den Komponenten, die Sie für die Implementierung verwenden, müssen Sie die Komponenten Ihrer Lösung bereitstellen und konfigurieren. In einer mehrinstanzenfähigen Umgebung ist es wichtig zu berücksichtigen, wie Sie Ihre Azure-Ressourcen bereitstellen, insbesondere wenn Sie dedizierte Ressourcen für jeden Mandanten bereitstellen, oder wenn Sie Ressourcen basierend auf der Anzahl der Mandanten in Ihrem System neu konfigurieren. Auf dieser Seite bieten wir Lösungsarchitekten eine Anleitung für die Bereitstellung mehrinstanzenfähiger Lösungen und zeigen einige Ansätze auf, die Sie bei der Planung Ihrer Bereitstellungsstrategie berücksichtigen sollten.
Wesentliche Aspekte und Anforderungen
Es ist wichtig, dass Sie eine klare Vorstellung von Ihren Anforderungen haben, bevor Sie Ihre Bereitstellungsstrategie planen. Zu den besonderen Aspekten gehören die folgenden:
- Erwartete Skalierung: Erwarten Sie, eine kleine Anzahl von Mandanten zu unterstützen (z. B. fünf oder weniger), oder werden Sie auf eine große Anzahl von Mandanten anwachsen?
- Automatisiertes oder unterstütztes Onboarding: Kann ein Mandant, der für das Onboarding bereit ist, den Prozess selbst abschließen, indem er ein automatisiertes Verfahren durchläuft? Oder initiieren neue Mandanten eine Anforderung und Sie führen das Onboarding manuell durch, nachdem Sie die Anforderung erhalten haben? Sind manuelle Genehmigungsschritte von Ihrem Team erforderlich, um z. B. den Missbrauch Ihres Diensts zu verhindern?
- Bereitstellungszeit: Wie schnell muss der Onboardingprozess abgeschlossen werden, wenn ein Mandant für das Onboarding bereit ist? Wenn Sie keine klare Antwort haben, überlegen Sie, ob dies in Sekunden, Minuten, Stunden oder Tagen gemessen werden soll.
- Azure Marketplace: Planen Sie die Verwendung von Azure Marketplace, um die Bereitstellung zu initiieren? In diesem Fall gibt es Anforderungen, die Sie zum Hinzuzufügen neuer Mandanten erfüllen müssen.
Sie sollten auch Onboarding- und Bereitstellungsschritte sowie die Zuständigkeit für Automatisierung und Ressourcenverwaltung berücksichtigen.
Onboarding- und Bereitstellungsschritte
Berücksichtigen Sie alle Faktoren für das Onboarding eines Mandanten, und dokumentieren Sie diese Liste und den Workflow, auch bei einer manuellen Durchführung. Der Onboardingworkflow umfasst in der Regel Folgendes:
- Zustimmung zu kommerziellen Vereinbarungen.
- Sammlung der Informationen, die zum Konfigurieren Ihres Systems für den neuen Mandanten erforderlich sind.
- Manuelle Genehmigungsschritte, um z. B. Betrug oder Missbrauch Ihres Diensts zu verhindern.
- Die Bereitstellung von Ressourcen in Azure.
- Erstellen oder Konfigurieren von Domänennamen.
- Führen Sie Konfigurationsaufgaben nach der Bereitstellung aus, z. B. das Erstellen des ersten Benutzerkontos für den Mandanten und die sichere Übertragung seiner Anmeldeinformationen zum Mandanten.
- Manuelle Konfigurationsänderungen, z. B. Änderungen an DNS-Einträgen.
Dokumentieren Sie den Workflow, der für das Onboarding eines neuen Mandanten erforderlich ist, eindeutig.
Berücksichtigen Sie außerdem die spezifischen Azure-Ressourcen, die Sie für einen Mandanten bereitstellen müssen. Auch wenn Sie nicht für jeden Mandanten dedizierte Ressourcen bereitstellen, sollten Sie überlegen, ob Sie manchmal Ressourcen bereitstellen müssen, wenn das Onboarding für einen neuen Mandanten durchgeführt wird. Dies kann der Fall sein, wenn ein Mandant seine Daten in einer bestimmten Region speichern möchte, oder wenn Sie sich den Grenzen einer Skalierungseinheit oder Komponente in Ihrer Lösung nähern und eine weitere Instanz für den nächsten Batch von Mandanten erstellen müssen.
Überlegen Sie, ob der Onboardingprozess andere Mandanten stören könnte, insbesondere diejenigen Mandanten, die dieselbe Infrastruktur nutzen. Wenn Sie z. B. freigegebene Datenbanken ändern müssen, könnte dieser Vorgang zu Leistungseinbußen führen, die andere Mandanten bemerken könnten? Überlegen Sie, ob Sie diese Auswirkungen vermeiden oder mindern können, indem Sie den Onboardingprozess außerhalb der normalen Betriebszeiten durchführen.
Automation
Automatisierte Bereitstellungen sind für in der Cloud gehostete Lösungen immer ratsam. Bei der Arbeit mit mehrinstanzenfähigen Lösungen gewinnt die Automatisierung der Bereitstellung aus folgenden Gründen noch mehr an Bedeutung:
- Skalieren: Manuelle Bereitstellungsprozesse werden immer komplexer und zeitaufwändiger, wenn die Anzahl Ihrer Mandanten zunimmt. Ein automatisierter Bereitstellungsansatz ist einfacher zu skalieren, wenn die Anzahl der Mandanten zunimmt.
- Wiederholbar: Verwenden Sie in einer mehrinstanzenfähigen Umgebung für alle Mandanten einen konsistenten Prozess für Bereitstellungen. Bei manuellen Prozessen besteht die Gefahr von Fehlern oder dass Schritte für einige Mandanten durchgeführt werden, für andere jedoch nicht. Diese manuellen Prozesse lassen Ihre Umgebung in einem inkonsistenten Zustand, was es für Ihr Team schwieriger macht, die Lösung zu verwalten.
- Auswirkungen von Ausfällen: Manuelle Bereitstellungen sind wesentlich risikoreicher und ausfallanfälliger als automatisierte Bereitstellungen. In einer mehrinstanzenfähigen Umgebung können die Auswirkungen eines systemweiten Ausfalls (aufgrund eines Fehlers bei der Bereitstellung) sehr groß sein, da jeder Mandant betroffen sein könnte.
Bei der Bereitstellung in einer mehrinstanzenfähigen Umgebung sollten Sie Bereitstellungspipelines und IaC-Technologien (Infrastructure as Code) wie Bicep, JSON ARM-Vorlagen, Terraform oder die Azure SDKs verwenden.
Wenn Sie planen, Ihre Lösung über den Azure Marketplace anzubieten, sollten Sie einen vollständig automatisierten Onboardingprozess für neue Mandanten bereitstellen. Dieser Prozess wird in der Dokumentation der SaaS-Fulfillment-APIs beschrieben.
Maximale Ressourcenkapazität
Berücksichtigen Sie beim programmgesteuerten Bereitstellen von Mandantenressourcen auf freigegebenen Ressourcen die Kapazitätsgrenzen für die einzelnen Ressourcen. Wenn Sie sich dieser Grenze nähern, müssen Sie möglicherweise eine weitere Instanz der Ressource erstellen, um eine weitere Skalierung zu unterstützen. Berücksichtigen Sie die Grenzwerte der von Ihnen bereitgestellten, einzelnen Ressourcen und die Bedingungen, unter denen Sie eine weitere Instanz bereitstellen müssen.
Nehmen wir z. B. an, dass Ihre Lösung einen logischen Azure SQL-Server enthält und Ihre Lösung für jeden Mandanten eine dedizierte Datenbank auf diesem Server bereitstellt. Ein einzelner logischer Server verfügt über Grenzwerte, die eine maximale Anzahl von Datenbanken umfassen, die von einem logischen Server unterstützt werden. Wenn Sie sich diesen Grenzen nähern, müssen Sie möglicherweise neue Server bereitstellen, damit Sie das Onboarding von Mandanten fortsetzen können. Überlegen Sie, ob Sie diesen Prozess automatisieren oder das Wachstum manuell überwachen.
Verantwortlichkeit für die Ressourcenverwaltung
In einigen mehrinstanzenfähigen Lösungen stellen Sie dedizierte Azure-Ressourcen für die einzelnen Mandanten bereit, z. B. eine Datenbank für jeden Mandanten. Oder Sie entscheiden sich für eine festgelegte Anzahl von Mandanten, die in einer einzelnen Instanz einer Ressource untergebracht werden sollen, sodass die Anzahl der Mandanten die Menge der Ressourcen bestimmt, die Sie in Azure bereitstellen. Bei anderen Lösungen legen Sie einen einzelnen Satz freigegebener Ressourcen fest, den Sie dann beim Onboarding neuer Mandanten neu konfigurieren.
Jedes dieser Modelle erfordert die Bereitstellung und Verwaltung von Ressourcen auf unterschiedliche Weise, und Sie müssen sich überlegen, wie Sie den Lebenszyklus der von Ihnen bereitgestellten Ressourcen bereitstellen und verwalten möchten. Zwei gängige Ansätze sind die folgenden:
- Behandeln Sie Mandanten als Konfiguration der Ressourcen, die Sie bereitstellen, und verwenden Sie Ihre Bereitstellungspipelines zur Bereitstellung und Konfiguration dieser Ressourcen.
- Behandeln Sie Mandanten als Daten, und lassen Sie eine Steuerungsebene die Infrastruktur für Ihre Mandanten bereitstellen und konfigurieren.
Weitere Informationen zu diesen Ansätzen finden Sie weiter unten.
Test
Planen Sie ein, Ihre Lösung während und nach jeder Bereitstellung gründlich zu testen. Sie können automatisierte Tests verwenden, um das funktionale und nicht funktionale Verhalten Ihrer Lösung zu überprüfen. Stellen Sie sicher, dass Sie Ihr Mandantenisolationsmodell testen, und verwenden Sie Tools wie Azure Chaos Studio, um absichtlich Fehler einzuführen, die reale Ausfälle simulieren, und überprüfen Sie, ob Ihre Lösung auch dann funktioniert, wenn eine Komponente nicht verfügbar ist oder nicht funktioniert.
Zu berücksichtigende Ansätze und Muster
Mehrere Entwurfsmuster aus dem Azure Architecture Center und der breiteren Community sind für die Bereitstellung und Konfiguration mehrinstanzenfähiger Lösungen von Bedeutung.
Muster mit Bereitstellungsstempeln
Das Muster mit Bereitstellungsstempeln umfasst die Bereitstellung einer dedizierten Infrastruktur für einen Einzelmandanten oder eine Mandantengruppe. Eine einzelne Skalierungseinheit kann mehrere Mandanten enthalten oder für einen einzelnen Mandanten reserviert sein. Sie können eine einzelne Skalierungseinheit bereitstellen oder eine Bereitstellung über mehrere Skalierungseinheiten hinweg koordinieren. Wenn Sie dedizierte Skalierungseinheiten für jeden Mandanten bereitstellen, können Sie auch erwägen, ganze Skalierungseinheiten programmgesteuert bereitzustellen.
Bereitstellungsringe
Bereitstellungsringe: Diese ermöglichen es Ihnen, Updates für verschiedene Gruppen von Infrastrukturen zu unterschiedlichen Zeitpunkten bereitzustellen. Dieser Ansatz wird häufig mithilfe des Musters für Bereitstellungsstempel verwendet, und Gruppen von Stempeln können auf der Grundlage von Mandantenpräferenzen, Workloadtypen und anderen Überlegungen verschiedenen Ringen zugewiesen werden. Weitere Informationen finden Sie unter Bereitstellungsringe.
Featureflags
Featureflags ermöglichen es Ihnen, neue Features oder Versionen Ihrer Lösung schrittweise für verschiedene Mandanten verfügbar zu machen, während Sie eine einzelne Codebasis beibehalten. Erwägen Sie die Verwendung von Azure App Configuration, um Ihre Featureflags zu verwalten. Weitere Informationen finden Sie unter Featureflags.
Manchmal müssen Sie bestimmte Features für bestimmte Kunden selektiv aktivieren. Beispielsweise verfügen Sie möglicherweise über unterschiedliche Tarife, die den Zugriff auf bestimmte Funktionen ermöglichen. Featureflags sind in der Regel nicht die richtige Wahl für diese Szenarien. Erstellen Sie stattdessen einen Prozess zur Nachverfolgung und Durchsetzung der Lizenzberechtigungen, die jeder Kunde hat.
Zu vermeide Antimuster
Bei der Bereitstellung und Konfiguration mehrinstanzenfähiger Lösungen ist es wichtig, Situationen zu vermeiden, die Ihre Skalierbarkeit einschränken. Diese umfassen die folgenden Themen:
- Manuelle Bereitstellung und Prüfung. Wie oben beschrieben, stellen manuelle Bereitstellungsprozesse ein zusätzliches Risiko dar und verlangsamen Ihre Bereitstellungsmöglichkeiten. Erwägen Sie den Einsatz von Pipelines für automatisierte Bereitstellungen, die programmgesteuerte Erstellung von Ressourcen aus dem Code Ihrer Lösung oder eine Kombination aus beidem.
- Spezialisierte Anpassungen für Mandanten. Vermeiden Sie die Bereitstellung von Features oder einer Konfiguration, die nur für einen einzelnen Mandanten gilt. Dieser Ansatz erhöht die Komplexität Ihrer Bereitstellungen und Testprozesse. Verwenden Sie stattdessen für jeden Mandanten dieselben Ressourcentypen und dieselbe Codebasis. Verwenden Sie zudem Strategien wie Featureflags für temporäre Änderungen oder für Features, die schrittweise eingeführt werden, oder verwenden Sie verschiedene Tarife mit Lizenzberechtigungen, um Features selektiv für Mandanten zu aktivieren, die sie benötigen. Verwenden Sie einen konsistenten und automatisierten Bereitstellungsprozess, auch für Mandanten, die über isolierte oder dedizierte Ressourcen verfügen.
Mandantenlisten als Konfiguration oder Daten
Bei der Bereitstellung von Ressourcen in einer mehrinstanzenfähigen Lösung können Sie die folgenden beiden Ansätze in Betracht ziehen:
- Verwenden Sie eine automatisierte Bereitstellungspipeline, um jede Ressource bereitzustellen. Wenn neue Mandanten hinzugefügt werden, konfigurieren Sie Ihre Pipeline neu, um die Ressourcen für jeden Mandanten bereitzustellen.
- Verwenden Sie eine automatisierte Bereitstellungspipeline, um freigegebene Ressourcen unabhängig von der Anzahl der Mandanten bereitzustellen. Für Ressourcen, die für jeden Mandanten bereitgestellt werden, erstellen Sie diese innerhalb Ihrer Anwendung.
Bei der Betrachtung der beiden Ansätze sollten Sie unterscheiden, ob Sie Ihre Mandantenliste als Konfiguration oder als Daten behandeln. Diese Unterscheidung ist auch wichtig, wenn Sie überlegen, wie Sie eine Steuerungsebene für Ihr System aufbauen.
Mandantenliste als Konfiguration
Wenn Sie Ihre Mandantenliste als Konfiguration behandeln, stellen Sie alle Ihre Ressourcen über eine zentralisierte Bereitstellungspipeline bereit. Wenn das Onboarding neuer Mandanten durchgeführt wird, konfigurieren Sie die Pipeline oder ihre Parameter neu. In der Regel erfolgt die Neukonfiguration durch manuelle Änderungen, wie im folgenden Diagramm dargestellt.
Der Onboardingprozess für einen neuen Mandanten könnte folgendermaßen aussehen:
- Aktualisieren Sie die Mandantenliste. Dies erfolgt in der Regel manuell, indem die Pipeline selbst konfiguriert oder eine Parameterdatei geändert wird, die in der Konfiguration der Pipeline enthalten ist.
- Lösen Sie die Pipeline zum Ausführen aus.
- Die Pipeline stellt Ihren kompletten Satz an Azure-Ressourcen neu bereit, einschließlich aller neuen mandantenspezifischen Ressourcen.
Dieser Ansatz eignet sich für eine kleine Anzahl von Mandanten und für Architekturen, bei denen alle Ressourcen freigegeben sind. Dies ist ein einfacher Ansatz, da alle Ihre Azure-Ressourcen mithilfe eines einzelnen Prozesses bereitgestellt und konfiguriert werden können.
Bei einer größeren Anzahl von Mandanten, z. B. 5 bis 10 oder mehr, wird es jedoch mühsam, die Pipeline neu zu konfigurieren, wenn Sie neue Mandanten hinzufügen. Auch die Zeit, die zum Ausführen der Bereitstellungspipeline benötigt wird, erhöht sich oft erheblich. Die Self-Service-Erstellung von Mandanten ist bei diesem Ansatz auch nicht ohne weiteres möglich. Außerdem kann die Vorlaufzeit bis zum Onboarding eines Mandanten länger sein, da Sie die Ausführung Ihrer Pipeline erst auslösen müssen.
Mandantenliste als Daten
Wenn Sie Ihre Mandantenliste als Daten behandeln, können Sie Ihre freigegebenen Komponenten dennoch mithilfe einer Pipeline bereitstellen. Für Ressourcen und Konfigurationseinstellungen, die für jeden Mandanten bereitgestellt werden müssen, müssen Sie Ihre Ressourcen jedoch zwingend bereitstellen oder konfigurieren. Ihre Steuerungsebene kann z. B. die Azure-SDKs verwenden, um eine bestimmte Ressource zu erstellen oder die Bereitstellung einer parametrisierten Vorlage zu initiieren.
Der Prozess für das Onboarding eines neuen Mandanten könnte in etwa wie folgt aussehen und würde asynchron ablaufen:
- Fordern Sie das Onboarding eines Mandanten an, z. B. durch das Initiieren einer API-Anforderung an die Steuerungsebene Ihres Systems.
- Eine Workflowkomponente nimmt die Anforderung zur Erstellung entgegen und steuert die weiteren Schritte.
- Der Workflow initiiert die Bereitstellung von mandantenspezifischen Ressourcen in Azure. Dies könnte mithilfe eines imperativen Programmiermodells erreicht werden, z. B. durch Verwendung der Azure SDKs, oder indem die Bereitstellung einer Bicep- oder Terraform-Vorlage imperativ ausgelöst wird.
- Wenn die Bereitstellung abgeschlossen ist, speichert der Workflow die Daten des neuen Mandanten im zentralen Mandantenkatalog. Die für jeden Mandanten gespeicherten Daten können die Mandanten-ID und die Ressourcen-IDs für alle mandantenspezifischen Ressourcen enthalten, die der Workflow erstellt hat.
Auf diese Weise können Sie Ressourcen für neue Mandanten bereitstellen, ohne Ihre gesamte Lösung neu zu implementieren. Der Zeitaufwand für die Bereitstellung neuer Ressourcen für jeden Mandanten ist wahrscheinlich geringer, da nur diese Ressourcen bereitgestellt werden müssen.
Dieser Ansatz ist jedoch oft sehr viel zeitaufwändiger zu erstellen, und der damit verbundene Aufwand muss durch die Anzahl der Mandanten oder die einzuhaltenden Bereitstellungsfristen gerechtfertigt sein.
Weitere Informationen zu diesem Ansatz finden Sie unter Überlegungen zu mehrmandantenfähigen Steuerungsebenen.
Hinweis
Die Vorgänge für die Bereitstellung und Konfiguration von Azure nehmen oft viel Zeit in Anspruch. Stellen Sie sicher, dass Sie einen geeigneten Prozess verwenden, um diese langwierigen Vorgänge zu initiieren und zu überwachen. Sie könnten z. B. das Asynchrones Anforderung-Antwort-Muster verwenden. Verwenden Sie Technologien, die für die Unterstützung zeitintensiver Vorgänge konzipiert sind, wie Azure Logic Apps und Durable Functions.
Beispiel
Contoso führt eine mehrinstanzenfähige Lösung für seine Kunden aus. Derzeit haben sie sechs Mandanten, und sie rechnen damit, innerhalb der nächsten 18 Monate auf 300 Mandanten anzuwachsen. Contoso verfolgt den Ansatz einer mehrinstanzenfähigen App mit dedizierten Datenbanken für jeden Mandanten. Sie haben einen einzelnen Satz von App Service-Ressourcen und einen logischen Azure SQL-Server bereitgestellt, die von allen Mandanten gemeinsam genutzt werden, und sie stellen eine dedizierte Azure SQL-Datenbank für jeden Mandanten bereit, wie im folgenden Diagramm dargestellt.
Contoso verwendet Bicep für die Bereitstellung seiner Azure-Ressourcen.
Option 1: Verwenden von Bereitstellungspipelines für alle Anforderungen
Contoso könnte in Erwägung ziehen, alle seine Ressourcen mithilfe einer Bereitstellungspipeline bereitzustellen. Ihre Pipeline stellt eine Bicep-Datei bereit, die alle Azure-Ressourcen enthält, einschließlich der Azure SQL-Datenbanken für jeden Mandanten. Eine Parameterdatei definiert die Liste der Mandanten, und die Bicep-Datei verwendet eine Ressourcenschleife, um eine Datenbank für jeden der aufgelisteten Mandanten bereitzustellen, wie im folgenden Diagramm dargestellt.
Wenn Contoso diesem Modell folgt, müssen sie ihre Parameterdatei im Rahmen des Onboarding eines neuen Mandanten aktualisieren. Dann müssen sie ihre Pipeline erneut ausführen. Außerdem müssen sie manuell nachverfolgen, ob sie sich irgendwelchen Grenzen nähern, z. B. wenn sie unerwartet schnell wachsen und sich der maximalen Anzahl von Datenbanken nähern, die auf einem einzelnen logischen Azure SQL-Server unterstützt werden.
Option 2: Verwendung einer Kombination aus Bereitstellungspipelines und zwingender Ressourcenerstellung
Alternativ könnte Contoso auch in Erwägung ziehen, die Zuständigkeiten für die Azure-Bereitstellungen zu trennen.
Contoso verwendet eine Bicep-Datei, die die freigegebenen Ressourcen definiert, die bereitgestellt werden sollen. Die freigegebenen Ressourcen unterstützen alle ihre Mandanten und umfassen eine Datenbank mit Mandantenzuordnungen, wie in der folgenden Abbildung dargestellt.
Das Contoso-Team erstellt dann eine Steuerungsebene, die eine API für das Mandantenonboarding enthält. Wenn das Vertriebsteam den Verkauf an einen neuen Kunden abgeschlossen hat, löst Microsoft Dynamics die API aus, um den Onboardingprozess zu starten. Contoso verwendet auch eine Self-Service-Webschnittstelle für Kunden, die ebenfalls die API auslöst.
Die API startet asynchron einen Workflow für das Onboarding neuer Mandanten. Der Workflow initiiert die Bereitstellung einer neuen Azure SQL-Datenbank, die auf eine der folgenden Arten erfolgen kann:
- Verwenden Sie das Azure SDK, um die Bereitstellung einer zweiten Bicep-Datei zu initiieren, die die Azure SQL-Datenbank definiert.
- Verwenden Sie das Azure SDK, um eine Azure SQL-Datenbank mithilfe der Verwaltungsbibliothek zu erstellen.
Nach der Bereitstellung der Datenbank fügt der Workflow den Mandanten in die Datenbank der Mandantenliste ein, wie in der folgenden Abbildung dargestellt.
Laufende Aktualisierungen des Datenbankschemas werden von der jeweiligen Logikschicht initiiert.
Beitragende
Dieser Artikel wird von Microsoft gepflegt. Er wurde ursprünglich von folgenden Mitwirkenden geschrieben:
Hauptautor:
- John Downs | Principal Software Engineer
Andere Mitwirkende:
- Bohdan Cherchyk | Senior Customer Engineer, FastTrack for Azure
- Arsen Vladimirskiy | Principal Customer Engineer, FastTrack for Azure
Melden Sie sich bei LinkedIn an, um nicht öffentliche LinkedIn-Profile anzuzeigen.
Nächste Schritte
- Lesen Sie Überlegungen zum Aktualisieren einer mehrinstanzenfähigen Lösung.
- Erwägen Sie Architekturansätze für Speicher und Daten.
- Überlegen Sie, wie Sie Azure Resource Manager in einer mehrinstanzenfähigen Lösung verwenden können.