Cloudentwurfsmuster, die die Leistungseffizienz unterstützen
Wenn Sie Workloadarchitekturen entwerfen, sollten Sie Branchenmuster verwenden, die häufig auftretende Herausforderungen bewältigen. Muster können Ihnen dabei helfen, absichtliche Kompromisse innerhalb von Workloads zu treffen und für Ihr gewünschtes Ergebnis zu optimieren. Sie können auch dazu beitragen, Risiken zu minimieren, die sich aus bestimmten Problemen ergeben, die sich auf Zuverlässigkeit, Sicherheit, Kosten und Betrieb auswirken können. Wenn sie nicht entschärft werden, führen Risiken schließlich zu Leistungsineffizienzen. Diese Muster basieren auf realen Erfahrungen, sind für Cloud-Skalierungs- und Betriebsmodelle konzipiert und sind von Natur aus anbieterunabhängig. Die Verwendung bekannter Muster als Möglichkeit zur Standardisierung Ihres Workloadentwurfs ist eine Komponente der optimalen Betriebsabläufe.
Viele Entwurfsmuster unterstützen direkt eine oder mehrere Architekturpfeiler. Entwurfsmuster, die die Säule Leistungseffizienz unterstützen, behandeln Skalierbarkeit, Leistungsoptimierung, Aufgabenpriorisierung und die Beseitigung von Engpässen.
Entwurfsmuster für effiziente Leistung
In der folgenden Tabelle sind Cloudentwurfsmuster zusammengefasst, die die Ziele der Leistungseffizienz unterstützen.
Muster | Zusammenfassung |
---|---|
Asynchrones Anforderung-Antwort-Muster | Verbessert die Reaktionsfähigkeit und Skalierbarkeit von Systemen, indem die Anforderungs- und Antwortphasen von Interaktionen für Prozesse entkoppelt werden, die keine sofortigen Antworten benötigen. Mithilfe eines asynchronen Musters können Sie die Parallelität auf der Serverseite maximieren. Sie können dieses Muster verwenden, um den Abschluss von Arbeiten zu planen, wenn die Kapazität es zulässt. |
Back-Ends für Front-Ends | Individualisiert die Dienstebene einer Workload, indem separate Dienste erstellt werden, die exklusiv für eine bestimmte Front-End-Schnittstelle sind. Diese Trennung ermöglicht Es Ihnen, auf eine Weise zu optimieren, die mit einer gemeinsam genutzten Dienstebene möglicherweise nicht möglich ist. Wenn Sie einzelne Clients unterschiedlich behandeln, können Sie die Leistung für die Einschränkungen und Funktionen eines bestimmten Clients optimieren. |
Bulkhead | Führt die Segmentierung zwischen Komponenten ein, um den Strahlradius von Fehlfunktionen zu isolieren. Dieser Entwurf ermöglicht es, jedes Bulkhead individuell zu skalieren, um die Anforderungen der Aufgabe zu erfüllen, die im Bulkhead gekapselt ist. |
Cache-Aside | Optimiert den Zugriff auf häufiges Lesen von Daten, indem ein Cache eingeführt wird, der bei Bedarf aufgefüllt wird. Der Cache wird dann für nachfolgende Anforderungen für die gleichen Daten verwendet. Dieses Muster ist besonders nützlich bei leseintensiven Daten, die sich nicht häufig ändern und eine gewisse Veraltung tolerieren können. Das Ziel dieser Implementierung besteht darin, eine bessere Leistung im System insgesamt zu erzielen, indem diese Art von Daten in einen Cache ausgelagert wird, anstatt sie aus dem Datenspeicher zu beziehen. |
Choreographie | Koordiniert das Verhalten autonomer verteilter Komponenten in einer Workload mithilfe einer dezentralen, ereignisgesteuerten Kommunikation. Dieses Muster kann eine Alternative sein, wenn Leistungsengpässe in einer zentralisierten Orchestrierungstopologie auftreten. |
Sicherung | Verhindert kontinuierliche Anforderungen an eine fehlerhafte oder nicht verfügbare Abhängigkeit. Ein Retry-on-Error-Ansatz kann während der Abhängigkeitswiederherstellung zu einer übermäßigen Ressourcenauslastung führen und auch die Leistung für eine Abhängigkeit überlasten, die die Wiederherstellung versucht. |
Anspruchsprüfung | Trennt Daten vom Nachrichtenfluss und bietet eine Möglichkeit, die daten im Zusammenhang mit einer Nachricht separat abzurufen. Dieses Muster verbessert die Effizienz und Leistung von Nachrichtenverlegern, Abonnenten und dem Nachrichtenbus selbst, wenn das System große Datennutzlasten verarbeitet. Dies funktioniert, indem die Größe von Nachrichten verringert und sichergestellt wird, dass Consumer Nutzlastdaten nur bei Bedarf und zu einem günstigen Zeitpunkt abrufen. |
Konkurrierende Consumer | Wendet verteilte und gleichzeitige Verarbeitung an, um Elemente in einer Warteschlange effizient zu verarbeiten. Dieses Modell unterstützt die Verteilung der Last auf alle Consumerknoten und die dynamische Skalierung, die auf der Warteschlangentiefe basiert. |
Computeressourcenkonsolidierung | Optimiert und konsolidiert Computeressourcen, indem die Dichte erhöht wird. Dieses Muster kombiniert mehrere Anwendungen oder Komponenten einer Workload in einer freigegebenen Infrastruktur. Diese Konsolidierung maximiert die Auslastung der Computerressourcen, indem freie Knotenkapazität verwendet wird, um die Überbereitstellung zu reduzieren. Containerorchestratoren sind ein gängiges Beispiel. Große (vertikal skalierte) Computeinstanzen werden häufig im Ressourcenpool für diese Infrastrukturen verwendet. |
Command and Query Responsibility Segregation (CQRS) | Trennt die Lese- und Schreibvorgänge des Datenmodells einer Anwendung. Diese Trennung ermöglicht gezielte Leistungs- und Skalierungsoptimierungen für den spezifischen Zweck jedes Vorgangs. Dieser Entwurf ist besonders hilfreich für Anwendungen mit einem hohen Lese-zu-Schreib-Verhältnis. |
Bereitstellungsstempel | Bietet einen Ansatz zum Veröffentlichen einer bestimmten Version einer Anwendung und ihrer Infrastruktur als kontrollierte Bereitstellungseinheit, basierend auf der Annahme, dass die gleichen oder verschiedene Versionen gleichzeitig bereitgestellt werden. Dieses Muster richtet sich häufig an den definierten Skalierungseinheiten in Ihrer Workload aus: Da zusätzliche Kapazität erforderlich ist, die über das hinausgeht, was eine einzelne Skalierungseinheit bietet, wird ein zusätzlicher Bereitstellungsstempel für das horizontale Hochskalieren bereitgestellt. |
Ereignisherkunftsermittlung | Behandelt Zustandsänderungen als Eine Reihe von Ereignissen und erfasst sie in einem unveränderlichen, nur anfügebaren Protokoll. Abhängig von Ihrer Workload kann dieses Muster in der Regel in Kombination mit CQRS, einem geeigneten Domänenentwurf und einer strategischen Momentaufnahme die Leistung verbessern. Leistungsverbesserungen sind auf die atomaren Nur-Anfügevorgänge und die Vermeidung von Datenbanksperren für Schreib- und Lesevorgänge zurückzuführen. |
Verbundidentität | Delegiert die Vertrauensstellung an einen Identitätsanbieter, der sich außerhalb der Workload befindet, um Benutzer zu verwalten und die Authentifizierung für Ihre Anwendung bereitzustellen. Wenn Sie die Benutzerverwaltung und -authentifizierung auslagern, können Sie Anwendungsressourcen anderen Prioritäten zuwenden. |
Gatekeeper | Die Anforderungsverarbeitung wird speziell für die Erzwingung der Sicherheits- und Zugriffssteuerung vor und nach der Weiterleitung der Anforderung an einen Back-End-Knoten ausgelagert. Dieses Muster wird häufig verwendet, um die Drosselung auf Gatewayebene zu implementieren, anstatt Ratenprüfungen auf Knotenebene zu implementieren. Die Koordination des Ratenzustands zwischen allen Knoten ist von Natur aus nicht leistungsfähig. |
Gatewayaggregation | Vereinfacht Clientinteraktionen mit Ihrer Workload, indem Aufrufe mehrerer Back-End-Dienste in einer einzelnen Anforderung aggregiert werden. Dieser Entwurf kann eine geringere Latenz verursachen als ein Entwurf, bei dem der Client mehrere Verbindungen herstellt. Das Zwischenspeichern ist auch bei Aggregationsimplementierungen üblich, da es Aufrufe von Back-End-Systemen minimiert. |
Gatewayabladung | Die Anforderungsverarbeitung wird vor und nach der Weiterleitung der Anforderung an einen Back-End-Knoten auf ein Gatewaygerät ausgelagert. Wenn Sie dem Anforderungsprozess ein Auslagerungsgateway hinzufügen, können Sie weniger Ressourcen pro Knoten verwenden, da die Funktionalität auf dem Gateway zentralisiert ist. Sie können die Implementierung der ausgeladenen Funktionalität unabhängig vom Anwendungscode optimieren. Von der Plattform bereitgestellte Funktionen sind wahrscheinlich bereits sehr leistungsfähig. |
Gatewayrouting | Leitet eingehende Netzwerkanforderungen basierend auf Anforderungsabsichten, Geschäftslogik und Back-End-Verfügbarkeit an verschiedene Back-End-Systeme weiter. Gatewayrouting ermöglicht es Ihnen, Datenverkehr auf Knoten in Ihrem System zu verteilen, um die Last auszugleichen. |
Geografischer Knoten | Stellt Systeme bereit, die in Aktiv/Aktiv-Verfügbarkeitsmodi in mehreren geografischen Regionen ausgeführt werden. Bei diesem Muster wird die Datenreplikation verwendet, um das Ideale zu unterstützen, dass jeder Client eine Verbindung mit einem beliebigen geografischen instance herstellen kann. Sie können es verwenden, um Ihre Anwendung aus einer Region zu bedienen, die Ihrer verteilten Benutzerbasis am nächsten ist. Dadurch wird die Latenz reduziert, indem fernen Datenverkehr eliminiert wird und Sie die Infrastruktur nur für Benutzer gemeinsam nutzen, die derzeit denselben geografischen Standort verwenden. |
Überwachung des Integritätsendpunkts | Bietet eine Möglichkeit, die Integrität oder status eines Systems zu überwachen, indem ein Endpunkt verfügbar gemacht wird, der speziell für diesen Zweck entwickelt wurde. Sie können diese Endpunkte verwenden, um den Lastenausgleich zu verbessern, indem Sie Datenverkehr nur an Knoten weiterleiten, die als fehlerfrei überprüft wurden. Mit einer zusätzlichen Konfiguration können Sie auch Metriken zur verfügbaren Knotenkapazität abrufen. |
Indextabelle | Optimiert den Datenabruf in verteilten Datenspeichern, indem Clients Metadaten nachschlagen können, sodass Daten direkt abgerufen werden können, sodass keine vollständigen Datenspeicherscans erforderlich sind. Clients werden auf ihren Shard, ihre Partition oder ihren Endpunkt verwiesen, wodurch dynamische Datenpartitionierung zur Leistungsoptimierung ermöglicht werden kann. |
Materialisierte Sicht | Verwendet vorberechnete Sichten von Daten, um den Datenabruf zu optimieren. In den materialisierten Sichten werden die Ergebnisse komplexer Berechnungen oder Abfragen gespeichert, ohne dass die Datenbank-Engine oder der Client für jede Anforderung neu kompensiert werden muss. Dieser Entwurf reduziert den Gesamtressourcenverbrauch. |
Prioritätswarteschlange | Stellt sicher, dass Elemente mit höherer Priorität vor Elementen mit niedrigerer Priorität verarbeitet und abgeschlossen werden. Wenn Sie Elemente basierend auf der Geschäftspriorität trennen, können Sie sich auf die zeitempfindlichsten Aufgaben konzentrieren. |
Herausgeber/Abonnent | Entkoppelt Komponenten einer Architektur, indem die direkte Client-to-Service- oder Client-to-Services-Kommunikation durch die Kommunikation über einen zwischengeschalteten Nachrichtenbroker oder Ereignisbus ersetzt wird. Durch die Entkopplung von Herausgebern von Consumern können Sie die Compute- und Codeverarbeitung speziell für die Aufgabe optimieren, die der Consumer für die bestimmte Nachricht ausführen muss. |
Warteschlangenbasierter Lastenausgleich | Steuert die Ebene eingehender Anforderungen oder Aufgaben, indem sie in einer Warteschlange gepuffert und vom Warteschlangenprozessor kontrolliert verarbeitet werden. Dieser Ansatz ermöglicht einen absichtlichen Entwurf für die Durchsatzleistung, da die Aufnahme von Anforderungen nicht mit der Rate korrelieren muss, in der sie verarbeitet werden. |
Scheduler-Agent-Supervisor | Verteilt Aufgaben effizient auf einem System basierend auf faktoren, die im System beobachtbar sind. Dieses Muster verwendet Leistungs- und Kapazitätsmetriken, um die aktuelle Auslastung zu erkennen und Aufgaben an einen Agent weiterzuleiten, der über Kapazität verfügt. Sie können es auch verwenden, um die Ausführung von Arbeiten mit höherer Priorität vor Arbeiten mit niedrigerer Priorität zu priorisieren. |
Sharding | Leitet das Laden an ein bestimmtes logisches Ziel weiter, um eine bestimmte Anforderung zu verarbeiten, wodurch die Colocation für die Optimierung aktiviert wird. Wenn Sie Sharding in Ihrer Skalierungsstrategie verwenden, werden die Daten oder die Verarbeitung in einem Shard isoliert, sodass sie nur mit anderen Anforderungen konkurrieren, die an diesen Shard weitergeleitet werden. Sie können auch Sharding verwenden, um basierend auf der Geografie zu optimieren. |
Sidecar | Erweitert die Funktionalität einer Anwendung, indem nicht primäre oder übergreifende Aufgaben in einem begleitenden Prozess gekapselt werden, der neben der Standard Anwendung vorhanden ist. Sie können bereichsübergreifende Aufgaben in einen einzelnen Prozess verschieben, der über mehrere Instanzen des Standard-Prozesses skaliert werden kann, wodurch die Notwendigkeit verringert wird, doppelte Funktionen für jeden instance der Anwendung bereitzustellen. |
Hosten von statischen Inhalten | Optimiert die Bereitstellung von statischem Inhalt an Workloadclients mithilfe einer Hostingplattform, die für diesen Zweck konzipiert ist. Das Auslagern der Verantwortung auf einen externalisierten Host trägt dazu bei, die Überlastung zu verringern, und ermöglicht Es Ihnen, Ihre Anwendungsplattform nur zum Bereitstellen von Geschäftslogik zu verwenden. |
Drosselung | Legt Grenzwerte für die Rate oder den Durchsatz eingehender Anforderungen an eine Ressource oder Komponente fest. Wenn das System stark nachgefragt wird, trägt dieses Muster dazu bei, Überlastungen zu verringern, die zu Leistungsengpässen führen können. Sie können es auch verwenden, um laute Nachbarszenarien proaktiv zu vermeiden. |
Valet-Schlüssel | Gewährt sicherheitsbeschränkten Zugriff auf eine Ressource, ohne eine zwischengeschaltete Ressource als Proxy für den Zugriff zu verwenden. Dadurch wird die Verarbeitung als exklusive Beziehung zwischen dem Client und der Ressource abgelastet, ohne dass eine Ambassador-Komponente erforderlich ist, die alle Clientanforderungen performant verarbeiten muss. Der Vorteil dieses Musters ist am wichtigsten, wenn der Proxy der Transaktion keinen Wert hinzugewinnt. |
Nächste Schritte
Sehen Sie sich die Cloudentwurfsmuster an, die die anderen Azure Well-Architected Framework-Säulen unterstützen: