Cloudentwurfsmuster
Diese Entwurfsmuster können Ihnen dabei helfen, zuverlässige, skalierbare und sichere Anwendungen in der Cloud zu erstellen.
Für jedes Muster werden das durch das Muster gelöste Problem, Überlegungen zum Anwenden des Musters und ein Beispiel auf der Grundlage von Microsoft Azure beschrieben. Die meisten Muster enthalten Codebeispiele oder -ausschnitte, die die Implementierung des Musters in Azure veranschaulichen. Der Großteil der Muster ist jedoch für alle verteilten Systeme relevant, unabhängig davon, ob sie in Azure oder auf anderen Cloudplattformen gehostet werden.
Cloudworkloads sind anfällig für die Irrtümer der verteilten Verarbeitung. Einige Beispiele für Clouddesign-Irrtümer sind:
- Das Netzwerk ist zuverlässig
- Latenz ist null
- Bandbreite ist unendlich
- Das Netzwerk ist geschützt
- Topologie ändert sich nicht
- Es gibt einen Administrator
- Komponentenversionsverwaltung ist einfach
- Einblickimplementierung kann verzögert werden
Designmuster beseitigen Faktoren wie diese nicht, können aber dazu beitragen, diese zu erkennen, zu kompensieren und zu minimieren. Jedes Cloudmuster bringt seine eigenen Kompromisse mit sich. Es ist wichtiger, darauf zu achten, warum Sie ein bestimmtes Muster auswählen, nicht, wie Sie es implementieren.
Herausforderungen bei der Cloudentwicklung
DatenverwaltungDie Datenverwaltung ist das wichtigste Element von Cloudanwendungen und wirkt sich auf die meisten Qualitätsattribute aus. Meist werden Daten aus Gründen der Leistung, Skalierbarkeit oder Verfügbarkeit an verschiedenen Speicherorten und auf mehreren Servern gehostet. Dies kann eine ganze Reihe von Herausforderungen mit sich bringen. Beispielsweise muss die Konsistenz der Daten aufrechterhalten werden, und normalerweise müssen Daten zwischen unterschiedlichen Speicherorten synchronisiert werden. |
|
Entwurf und ImplementierungEin guter Entwurf berücksichtigt Konsistenz und Kohärenz im Komponentenentwurf und in der Bereitstellung, Wartbarkeit zur Vereinfachung der Verwaltung und Entwicklung sowie Wiederverwendbarkeit, um die Verwendung von Komponenten und Subsystemen in anderen Anwendungen und Szenarien zu ermöglichen. Während der Entwurfs- und Implementierungsphase getroffene Entscheidungen haben erheblichen Einfluss auf die Qualität und die Gesamtkosten von in der Cloud gehosteten Anwendungen und Diensten. |
|
NachrichtenDie verteilte Struktur von Cloudanwendungen erfordert eine Messaginginfrastruktur, die die Komponenten und Dienste – idealerweise lose gekoppelt – miteinander verbindet, um die Skalierbarkeit zu maximieren. Asynchrones Messaging ist weit verbreitet und bietet viele Vorteile, beinhaltet aber auch Herausforderungen, beispielsweise die Sortierung von Nachrichten, die Verwaltung von nicht verarbeitbaren Nachrichten, Idempotenz und vieles mehr. |
Musterkatalog
Muster | Zusammenfassung | Category |
---|---|---|
Ambassador | Erstellen Sie Hilfsdienste, die im Auftrag von Consumerdiensten oder -anwendungen Netzwerkanforderungen senden. | Entwurf und Implementierung Optimaler Betrieb |
Antikorruptionsschicht | Implementieren Sie eine „Fassade“ oder Adapterebene zwischen einer modernen Anwendung und einem älteren System. | Entwurf und Implementierung Optimaler Betrieb |
Asynchrones Anforderung-Antwort-Muster | Entkoppeln Sie die Back-End-Verarbeitung von einem Front-End-Host, wobei die Back-End-Verarbeitung asynchron sein muss, das Front-End jedoch eine eindeutige Antwort benötigt. | Nachrichten |
Back-Ends für Front-Ends | Erstellen Sie separate Back-End-Dienste zur Nutzung durch bestimmte Front-End-Anwendungen oder -Schnittstellen. | Entwurf und Implementierung |
Bulkhead | Isolieren Sie Elemente einer Anwendung in Pools, sodass bei Ausfall eines Elements die anderen Elemente weiterhin ausgeführt werden. | Zuverlässigkeit |
Cache-Aside | Daten bei Bedarf aus einem Datenspeicher in einen Cache laden | Datenverwaltung Effiziente Leistung |
Choreographie | Lassen Sie jeden Dienst entscheiden, wann und wie ein Geschäftsvorgang verarbeitet wird, anstatt einen zentralen Orchestrator zu nutzen. | Messaging Effiziente Leistung |
Sicherung | Behandeln Sie Fehler, deren Behebung beim Herstellen einer Verbindung mit einem Remotedienst oder einer Remoteressource unterschiedlich lange dauern kann. | Zuverlässigkeit |
Anspruchsprüfung | Teilen Sie eine große Nachricht in eine Anspruchsprüfung und eine Nutzlast auf, um die Überlastung eines Nachrichtenbusses zu vermeiden. | Nachrichten |
Ausgleichende Transaktion | Machen Sie durch eine Reihe von Schritten ausgeführte Arbeit rückgängig, die zusammen einen letztlich konsistenten Vorgang definieren. | Zuverlässigkeit |
Konkurrierende Consumer | Mehreren gleichzeitigen Consumern die Verarbeitung von Nachrichten ermöglichen, die auf dem gleichen Messagingkanal empfangen werden | Nachrichten |
Computeressourcenkonsolidierung | Konsolidieren mehrerer Tasks oder Vorgänge in einer einzelnen Compute-Einheit | Entwurf und Implementierung |
CQRS | Trennen Sie mithilfe separater Schnittstellen Datenlesevorgänge von Vorgängen zur Aktualisierung von Daten. | Datenverwaltung Entwurf und Implementierung Effiziente Leistung |
Bereitstellungsstempel | Bereitstellen mehrerer unabhängiger Kopien von Anwendungskomponenten, einschließlich Datenspeicher | Zuverlässigkeit Effiziente Leistung |
Edge-Workloadkonfiguration | Die große Vielfalt von Systemen und Geräten im Fertigungsbereich kann die Workloadkonfiguration zu einer schwierigen Aufgabe machen. | Entwurf und Implementierung |
Ereignisherkunftsermittlung | Verwenden Sie einen nur zum Anfügen vorgesehenen Speicher, um die vollständige Serie von Ereignissen aufzuzeichnen, die die mit Daten in einer Domäne ausgeführten Aktionen beschreiben. | Datenverwaltung Effiziente Leistung |
Externer Konfigurationsspeicher | Konfigurationsinformationen aus dem Anwendungsbereitstellungspaket an einen zentralen Speicherort verschieben | Entwurf und Implementierung Optimaler Betrieb |
Verbundidentität | Delegieren Sie die Authentifizierung an einen externen Identitätsanbieter. | Security |
Gatekeeper | Schützen Sie Anwendungen und Dienste durch Verwendung einer dedizierten Hostinstanz, die als Broker zwischen Clients und der Anwendung oder dem Dienst fungiert, Anforderungen überprüft und bereinigt sowie Anforderungen und Daten zwischen ihnen weiterleitet. | Security |
Gatewayaggregation | Aggregieren Sie mithilfe eines Gateways mehrere einzelne Anforderungen in einer einzigen Anforderung. | Entwurf und Implementierung Optimaler Betrieb |
Gatewayabladung | Lagern Sie gemeinsam genutzte oder spezielle Dienstfunktionen an einen Gatewayproxy aus. | Entwurf und Implementierung Optimaler Betrieb |
Gatewayrouting | Leiten Sie Anforderungen an mehrere Dienste mit einem einzelnen Endpunkt weiter. | Entwurf und Implementierung Optimaler Betrieb |
Geografische Knoten | Es wird beschrieben, wie Sie Back-End-Dienste für eine Gruppe von geografischen Knoten bereitstellen, von denen jeweils die Clientanforderungen einer beliebigen Region verarbeitet werden können. | Zuverlässigkeit Optimaler Betrieb |
Überwachung des Integritätsendpunkts | Implementieren Sie Funktionsprüfungen in einer Anwendung, auf die externe Tools in regelmäßigen Abständen über verfügbar gemachte Endpunkte zugreifen können. | Zuverlässigkeit Optimaler Betrieb |
Indextabelle | Erstellen Sie Indizes für die Felder im Datenspeicher, auf die häufig von Abfragen verwiesen wird. | Datenverwaltung Effiziente Leistung |
Auswahl einer übergeordneten Instanz | Koordinieren Sie die Aktionen, die von einer Sammlung zusammenarbeitender Taskinstanzen ausgeführt werden, in einer verteilten Anwendung, indem eine Instanz als übergeordnete Instanz ausgewählt wird, die die Verantwortung für die Verwaltung der anderen Instanzen übernimmt. | Entwurf und Implementierung Zuverlässigkeit |
Materialisierte Sicht | Voraufgefüllte Sichten für die Daten in einem oder mehreren Datenspeichern generieren, wenn die Daten für erforderliche Abfragevorgänge nicht ideal formatiert sind | Datenverwaltung Optimaler Betrieb, Effiziente Leistung |
Pipes und Filter | Unterteilen einer Aufgabe, die komplexe Verarbeitungsvorgänge ausführt, in eine Reihe wiederverwendbarer separater Elemente | Entwurf und Implementierung Messaging |
Prioritätswarteschlange | Priorisieren Sie an Dienste gesendete Anforderungen, sodass Anforderungen mit einer höheren Priorität schneller empfangen und verarbeitet werden als Anforderungen mit einer niedrigeren Priorität. | Messaging Effiziente Leistung |
Herausgeber/Abonnent | Ermöglichen Sie einer Anwendung die asynchrone Ankündigung von Ereignissen für mehrere interessierte Consumer, ohne die Absender mit den Empfängern zu koppeln. | Nachrichten |
Warteschlangenbasierter Lastenausgleich | Verwenden Sie eine Warteschlange, die als Puffer zwischen einem Task und einem von diesem aufgerufenen Dienst fungiert, um unregelmäßig auftretende hohe Lasten aufzufangen. | Zuverlässigkeit Messaging Resilienz, Effiziente Leistung |
Ratenbegrenzungsmuster | Begrenzungsmusters, die Ihnen helfen, Drosselungsfehler im Zusammenhang mit diesen Drosselungsbegrenzungen zu vermeiden oder zu minimieren und eine genauere Vorhersage für den Durchsatz zu ermöglichen. | Zuverlässigkeit |
Wiederholung | Ermöglichen Sie einer Anwendung beim Herstellen einer Verbindung mit einem Dienst oder einer Netzwerkressource die Behandlung antizipierter, temporärer Fehler, indem ein zuvor nicht erfolgreich durchgeführter Vorgang transparent wiederholt wird. | Zuverlässigkeit |
Saga | Verwalten der Datenkonsistenz über Microservices hinweg in verteilten Transaktionsszenarien. Das Saga-Muster umfasst eine Sequenz von Transaktionen, die alle Dienste aktualisieren und eine Meldung oder ein Ereignis veröffentlichen, um den nächsten Transaktionsschritt auszulösen. | Nachrichten |
Scheduler-Agent-Supervisor | Koordinieren Sie eine Reihe von Aktionen in einer verteilten Gruppe von Diensten und anderen Remoteressourcen. | Messaging Zuverlässigkeit |
Sequenzieller Konvoi | Verarbeiten Sie eine Reihe verwandter Nachrichten in einer festgelegten Reihenfolge, ohne die Verarbeitung anderer Nachrichtengruppen zu blockieren. | Nachrichten |
Sharding | Einen Datenspeicher in einen Satz horizontaler Partitionen oder Shards unterteilen | Datenverwaltung Effiziente Leistung |
Sidecar | Komponenten einer Anwendung zwecks Isolation und Kapselung in einem separaten Prozess oder Container bereitstellen | Entwurf und Implementierung Optimaler Betrieb |
Hosten von statischen Inhalten | Stellen Sie statische Inhalte in einem cloudbasierten Speicherdienst bereit, der die Inhalte direkt an den Client übermitteln kann. | Entwurf und Implementierung Datenverwaltung Effiziente Leistung |
Strangler-Muster | Migrieren Sie ein älteres System inkrementell, indem Sie bestimmte Teile der Funktionalität nach und nach durch neue Anwendungen und Dienste ersetzen. | Entwurf und Implementierung Optimaler Betrieb |
Drosselung | Steuern Sie den Verbrauch der von einer Anwendungsinstanz, einem einzelnen Mandanten oder einem gesamten Dienst verwendeten Ressourcen. | Zuverlässigkeit Effiziente Leistung |
Valet-Schlüssel | Verwenden Sie ein Token oder einen Schlüssel, das bzw. der Clients eingeschränkten direkten Zugriff auf eine bestimmte Ressource oder einen bestimmten Dienst bietet. | Datenverwaltung Security |