Empfehlungen für das Entwerfen aus Gründen der Einfachheit und Effizienz

Gilt für die folgende Prüfliste für die Zuverlässigkeit von Azure Well-Architected Framework:

RE:01 Entwerfen Sie Ihre Workload so, dass sie den Geschäftszielen entspricht und unnötige Komplexität oder Mehraufwand vermeidet. Verwenden Sie einen praktischen und ausgewogenen Ansatz, um Entwurfsentscheidungen zu treffen, die die gewünschten Ergebnisse liefern. Enthalten Sie Ihren Entwurf auf die Notwendigkeiten, um Ineffizienzen und potenzielle Probleme zu reduzieren.

In diesem Leitfaden werden die Empfehlungen zur Minimierung unnötiger Komplexität und Mehraufwand beschrieben, um Ihre Workloads einfach und effizient zu halten. Wählen Sie die besten Komponenten aus, um die erforderlichen Workloadaufgaben auszuführen, um die Zuverlässigkeit Ihrer Workload zu optimieren. Um Ihren Entwicklungs- und Verwaltungsaufwand zu verringern, nutzen Sie die Effizienz der plattformseitig bereitgestellten Dienste. Mit diesem Entwurf können Sie eine Workloadarchitektur erstellen, die robust, wiederholbar, skalierbar und verwaltbar ist.

Definitionen

Begriff Definition
Workload Eine diskrete Funktion oder Rechenaufgabe, die Sie logisch von anderen Aufgaben trennen können.

Wichtige Entwurfsstrategien

Ein wichtiger Grundsatz des Entwerfens für Zuverlässigkeit besteht darin, die Dinge einfach und effizient zu halten. Konzentrieren Sie Ihren Workloadentwurf auf die Erfüllung geschäftlicher Anforderungen, um das Risiko unnötiger Komplexität oder übermäßigen Mehraufwands zu verringern. Berücksichtigen Sie die Empfehlungen in diesem Artikel, um Entscheidungen über Ihren Entwurf zu treffen, um eine schlanke, effiziente und zuverlässige Workload zu erstellen. Für Workloads gelten unter Umständen unterschiedliche Anforderungen in Bezug auf die Verfügbarkeit, Skalierbarkeit, Datenkonsistenz und Notfallwiederherstellung.

Sie müssen jede Entwurfsentscheidung mit einer geschäftlichen Anforderung begründen. Dieses Entwurfsprinzip mag naheliegend erscheinen, ist aber für den Workloadentwurf von entscheidender Bedeutung. Unterstützt Ihre Anwendung Millionen von Benutzern oder ein paar Tausend? Gibt es Datenverkehrsspitzen? Oder ist die Workload gleichmäßig? Welche Anwendungsausfallstufe ist akzeptabel? Diese Entwurfsüberlegungen werden durch geschäftsspezifische Anforderungen angetrieben.

Kompromiss: Eine komplexe Lösung kann mehr Features und Flexibilität bieten, kann sich jedoch auf die Zuverlässigkeit der Workload auswirken, da sie mehr Koordination, Kommunikation und Verwaltung von Komponenten erfordert. Alternativ kann eine einfachere Lösung die Erwartungen der Benutzer nicht vollständig erfüllen oder sich negativ auf die Skalierbarkeit und Erweiterbarkeit auswirken, wenn sich die Workload weiterentwickelt.

Gemeinsame Entwurfsübungen

Arbeiten Sie mit den Beteiligten zusammen, um:

  • Definieren und Zuweisen eines Kritikalitätsgrads zu den Benutzer- und Systemflüssen Ihrer Workload. Konzentrieren Sie Ihren Entwurf auf kritische Flows , um die erforderlichen Komponenten und den besten Ansatz zu ermitteln, um die erforderliche Resilienzstufe zu erreichen.

  • Definieren Sie funktionale und nicht funktionale Anforderungen. Berücksichtigen Sie funktionale Anforderungen, um zu bestimmen, ob eine Anwendung eine Aufgabe ausführt. Berücksichtigen Sie nicht funktionale Anforderungen, um zu bestimmen, wie gut die Anwendung eine Aufgabe ausführt. Stellen Sie sicher, dass Sie nicht funktionale Anforderungen wie Skalierbarkeit, Verfügbarkeit und Latenz verstehen. Diese Anforderungen haben Einfluss auf Entwurfsentscheidungen und die Technologieauswahl.

  • Zerlegen Sie Workloads in Komponenten. Priorisieren Sie Einfachheit, Effizienz und Zuverlässigkeit in Ihrem Entwurf. Bestimmen Sie die Komponenten, die Sie zur Unterstützung Ihrer Flows benötigen. Einige Komponenten unterstützen mehrere Flows. Identifizieren Sie, welche Herausforderung eine Komponente konzeptionell anspricht, und ziehen Sie in Betracht, eine Komponente aus einzelnen Flows zu entfernen, um den Gesamtentwurf zu vereinfachen und gleichzeitig vollständige Funktionalität bereitzustellen. Weitere Informationen finden Sie unter Empfehlungen für die Fehlermodusanalyse.

  • Verwenden Sie die Fehlermodusanalyse , um einzelne Fehlerpunkte und potenzielle Risiken zu identifizieren. Überlegen Sie, ob Sie unwahrscheinliche Situationen berücksichtigen müssen, z. B. ein geografisches Gebiet, in dem eine große Naturkatastrophe erfährt, die alle Verfügbarkeitszonen in der Region betrifft. Es ist teuer und beinhaltet erhebliche Kompromisse, um diese ungewöhnlichen Risiken zu minimieren. Verstehen Sie die Risikotoleranz Ihres Unternehmens. Weitere Informationen finden Sie unter Empfehlungen für die Fehlermodusanalyse.

  • Definieren Sie Verfügbarkeits- und Wiederherstellungsziele für Ihre Flows, um die Architektur Ihrer Workload zu informieren. Zu den Geschäftsmetriken gehören Servicelevelziele (Service Level Objectives, SLOs), Vereinbarungen zum Servicelevel (SLAs), Mean Time to Recovery (MTTR), Mean Time Between Failure (MTBF), Wiederherstellungszeitziele (RECOVERY Time Objectives, RTOs) und Wiederherstellungspunktziele (Recovery Point Objectives, RPOs). Definieren Sie Zielwerte für diese Metriken. Diese Übung erfordert möglicherweise Kompromisse und gegenseitiges Verständnis zwischen Technologie- und Geschäftsteams, um sicherzustellen, dass die Ziele jedes Teams die Geschäftsziele erfüllen und realistisch sind. Weitere Informationen finden Sie unter Empfehlungen zum Definieren von Zuverlässigkeitszielen.

Zusätzliche Entwurfsempfehlungen

Sie können die folgenden Empfehlungen ohne Einbindung der Beteiligten ausführen:

  • Streben Sie nach Einfachheit und Klarheit in Ihrem Design. Verwenden Sie die entsprechende Abstraktions- und Granularitätsebene für Ihre Komponenten und Dienste. Vermeiden Sie Über- oder Unterentwicklung Ihrer Lösung. Wenn Sie ihren Code beispielsweise in mehrere kleine Funktionen unterteilen, ist es schwer zu verstehen, zu testen und zu verwalten.

  • Geben Sie an, dass sich alle erfolgreichen Anwendungen im Laufe der Zeit ändern, sei es, um Fehler zu beheben, neue Features oder Technologien zu implementieren oder vorhandene Systeme skalierbarer und resilienter zu machen.

  • Verwenden Sie nach Möglichkeit PaaS-Optionen (Platform-as-a-Service) anstelle von Infrastructure-as-a-Service (IaaS). IaaS können Sie sich wie eine Kiste mit Einzelteilen vorstellen. Sie können beliebige Dinge bauen, aber Sie müssen alles selbst zusammensetzen. PaaS-Optionen können einfacher konfiguriert und verwaltet werden. Sie müssen keine VMs oder virtuelle Netzwerke einrichten. Sie müssen auch keine Wartungsaufgaben ausführen, z. B. das Installieren von Patches und Updates.

  • Verwenden Sie asynchrones Messaging , um den Nachrichtenproduzenten vom Consumer zu entkoppeln.

  • Abstrahieren Sie die Infrastruktur weg von der Domänenlogik. Stellen Sie sicher, dass die Domänenlogik die infrastrukturbezogene Funktionalität wie Messaging oder Persistenz nicht beeinträchtigt.

  • Lagern Sie Funktionen in einen separaten Dienst aus, falls Probleme durch Überschneidungen zu erwarten sind. Minimieren Sie die Notwendigkeit, Code über verschiedene Funktionen hinweg zu duplizieren, und bevorzugen Sie die Wiederverwendung von Diensten mit klar definierten Schnittstellen, die problemlos von verschiedenen Komponenten genutzt werden können. Wenn beispielsweise mehrere Dienste Anforderungen authentifizieren müssen, können Sie diese Funktionalität in einen eigenen Dienst verschieben. Anschließend können Sie den Authentifizierungsdienst weiterentwickeln. Beispielsweise können Sie einen neuen Authentifizierungsflow hinzufügen, ohne einen der Dienste zu berühren, die ihn verwenden.

  • Bewerten Sie die Eignung gängiger Muster und Praktiken für Ihre Anforderungen. Vermeiden Sie es, Trends oder Empfehlungen zu befolgen, die für Ihren Kontext oder Ihre Anforderungen möglicherweise nicht am besten geeignet sind. Beispielsweise sind Microservices nicht die beste Option für jede Anwendung, da sie zu Komplexitäts-, Mehraufwand- und Abhängigkeitsproblemen führen können.

Entwickeln von gerade genug Code

Die Prinzipien der Einfachheit, Effizienz und Zuverlässigkeit gelten auch für Ihre Entwicklungsmethoden. Bestimmen Sie in einer lose gekoppelten, komponentenisierten Workload die Funktionalität, die eine Komponente bereitstellt. Entwickeln Sie Ihre Flows, um diese Funktionalität zu nutzen. Berücksichtigen Sie die folgenden Empfehlungen für Ihre Entwicklungsmethoden:

  • Verwenden Sie Plattformfunktionen, wenn sie Ihre Geschäftlichen Anforderungen erfüllen. Verwenden Sie beispielsweise Low-Code-, No-Code- oder serverlose Lösungen, die Ihr Cloudanbieter anbietet, um die Entwicklung und Verwaltung zu verlagern.

  • Verwenden Sie Bibliotheken und Frameworks.

  • Führen Sie Paarprogrammierung oder dedizierte Codeüberprüfungssitzungen als Entwicklungspraxis ein.

  • Implementieren Sie einen Ansatz, um toten Code zu identifizieren. Seien Sie skeptisch gegenüber dem Code, den Ihre automatisierten Tests nicht abdecken.

Verwenden des besten Datenspeichers für Ihre Daten

In der Vergangenheit haben viele Organisationen alle ihre Daten in großen relationalen SQL-Datenbanken gespeichert. Relationale Datenbanken bieten atomare, konsistente, isolierte und dauerhafte Garantien (ACID) für relationale Datentransaktionen. Diese Datenbanken haben jedoch Nachteile:

  • Abfragen können teure Verknüpfungen (Joins) erfordern.

  • Sie müssen die Daten beim Schreiben normalisieren und für das Schema neu strukturieren.

  • Sperrkonflikte können die Leistung beeinträchtigen.

Alternativen zu relationalen Datenbanken

In einer großen Lösung erfüllt eine einzelne Datenspeichertechnologie wahrscheinlich nicht alle Ihre Anforderungen. Alternativen zu relationalen Datenbanken umfassen:

  • Schlüssel-Wert-Speicher

  • Dokumentdatenbanken

  • Suchmaschinen-Datenbanken

  • Zeitreihendatenbanken

  • Spaltenbasierte Datenbanken

  • Graphdatenbanken

Jede Option hat Vor- und Nachteile. Verschiedene Datentypen eignen sich besser für verschiedene Datenspeichertypen. Wählen Sie die Speichertechnologie aus, die am besten für Ihre Daten und Ihre Verwendungsweise der Daten geeignet ist.

Einen Produktkatalog sollten Sie z. B. in einer Dokumentdatenbank wie Azure Cosmos DB speichern, die ein flexibles Schema unterstützt. Jede Produktbeschreibung ist ein eigenständiges Dokument. Um Abfragen im gesamten Katalog durchführen zu können, können Sie den Katalog indizieren und den Index in Azure Cognitive Search speichern. Der Produktbestand kann in eine SQL-Datenbank aufgenommen werden, da für diese Daten ACID-Garantien erforderlich sind.

Empfehlungen

  • Berücksichtigen Sie andere Datenspeicher. Relationale Datenbanken sind nicht immer geeignet. Weitere Informationen finden Sie unter Grundlegendes zu Datenspeichermodellen.

  • Denken Sie daran, dass zu den Daten mehr gehört als nur die dauerhaft gespeicherten Anwendungsdaten. Daten umfassen auch Anwendungsprotokolle, Ereignisse, Nachrichten und Caches.

  • Nutzen Sie mehrfarbige Persistenz oder Lösungen, die eine Kombination aus Datenspeichertechnologien verwenden.

  • Berücksichtigen Sie den Datentyp, den Sie haben. Speichern Sie beispielsweise Folgendes:

    • Transaktionsdaten in einer SQL-Datenbank.

    • JSON-Dokumente in einer Dokumentdatenbank.

    • Telemetriedaten in einer Zeitreihendatenbank.

    • Anwendungsprotokolle in Azure Cognitive Search.

    • Blobs in Azure Blob Storage.

  • Priorisieren Sie Verfügbarkeit gegenüber Konsistenz. Das CAP-Theorem impliziert, dass Sie Kompromisse zwischen Verfügbarkeit und Konsistenz in einem verteilten System treffen müssen. Sie können Netzwerkpartitionen nicht vollständig vermeiden, was die andere Komponente des CAP-Theorems ist. Sie können jedoch ein letztliches Konsistenzmodell verwenden, um eine höhere Verfügbarkeit zu erzielen.

  • Berücksichtigen Sie die Qualifikationen Ihres Entwicklungsteams. Die mehrsprachige Persistenz bietet Vorteile, kann aber auch zu weit gehen. Es erfordert neue Fähigkeiten, um eine neue Datenspeichertechnologie einzuführen. Um die Technologie optimal zu nutzen, muss Ihr Entwicklungsteam:

    • Optimieren von Abfragen

    • Optimieren der Leistung.

    • Arbeiten Sie mit den entsprechenden Verwendungsmustern.

Berücksichtigen Sie diese Faktoren, wenn Sie sich für eine Speichertechnologie entscheiden:

  • Verwenden Sie ausgleichende Transaktionen. Bei polyglot persistenz kann eine einzelne Transaktion Daten in mehrere Speicher schreiben. Wenn ein Fehler auftritt, verwenden Sie kompensierende Transaktionen, um alle abgeschlossenen Schritte rückgängig zu machen.

  • Betrachten Sie begrenzte Kontexte, bei denen es sich um ein domänengesteuertes Entwurfskonzept handelt. Eine Kontextgrenze ist eine explizite Grenze um ein Domänenmodell. Ein begrenzter Kontext definiert, auf welche Teile der Domäne das Modell angewendet wird. Idealerweise wird eine Kontextgrenze einer Subdomäne der Geschäftsdomäne zugeordnet. Berücksichtigen Sie die mehrfarbige Persistenz für begrenzte Kontexte in Ihrem System. Beispielsweise können Produkte in der Unterdomäne des Produktkatalogs und in der Unterdomäne "Produktbestand" angezeigt werden. Am wahrscheinlichsten ist es aber, dass diese beiden Unterdomänen unterschiedliche Anforderungen an das Speichern, Aktualisieren und Abfragen von Produkten haben.

Azure-Erleichterung

Azure bietet die folgenden Dienste:

  • Azure Functions ist ein serverloser Computedienst, mit dem Sie die Orchestrierung mit minimalem Code erstellen können.

  • Azure Logic Apps ist eine serverlose Workflowintegrationsplattform, die Sie zum Erstellen der Orchestrierung mit einer grafischen Benutzeroberfläche oder durch Bearbeiten einer Konfigurationsdatei verwenden können.

  • Azure Event Grid ist ein hochgradig skalierbarer, vollständig verwalteter Nachrichtenverteilungsdienst zum Veröffentlichen und Abonnieren, der flexible Nachrichtennutzungsmuster bietet, die die PROTOKOLLE MQTT und HTTP verwenden. Mit Event Grid können Sie Datenpipelines mit Gerätedaten erstellen, ereignisgesteuerte serverlose Architekturen erstellen und Anwendungen integrieren.

Weitere Informationen finden Sie unter

Beispiel

Eine Beispielworkload, die Komponenten und ihre Features basierend auf Anforderungen bestimmt, finden Sie unter Reliable Web App-Muster.

Zuverlässigkeitsprüfliste

Sehen Sie sich den vollständigen Satz von Empfehlungen an.