Design für Belastbarkeit
Die Workload muss weiterhin mit vollständiger oder eingeschränkter Funktionalität arbeiten. |
---|
Sie sollten mit Fehlfunktionen von Komponenten, Plattformausfällen, Leistungsbeeinträchtigungen und anderen Fehler rechnen. Erstellen Sie ein resilientes System, damit es fehlertolerant ist und nicht vollständig ausfällt.
Beispielszenario
Contoso Air ist eine kommerzielle Fluggesellschaft, die über eine interne Entwicklungsabteilung verfügt. Die wichtigste Branchenanwendung ist eine Buchungslösung, mit der Kund*innen Flüge direkt bei Contoso Air buchen können. Die App ist mit Azure integriert und verwendet Azure App Service, Cosmos DB, Azure Functions, Azure Logic Apps und Azure Service Bus.
Ermitteln von Fehlerrisiken
Identifizieren Sie potenzielle Fehlerpunkte im System, insbesondere für die kritischen Komponenten, und ermitteln Sie die Auswirkungen auf Benutzer- und Systemflows.
Analysieren Sie den Fehlerfall, den Auswirkungsradius und die Intensität des Fehlers für jeden potenziellen Fehlerpunkt. Fehlerfälle und ihre Intensität können relativ geringe Auswirkungen haben, aber auch der temporäre Verlust eines Back-End-Prozesses bis hin zu vollständigen Ausfällen aufgrund von Notfällen sind möglich. Durch die Durchführung dieser Analyse können Sie den Entwurf der Funktionen für die Fehlerbehandlung auf Komponentenebene ermitteln.
Herausforderung von Contoso
- Die Branchenanwendung bietet viele wichtige Funktionen, die auch Marketing und Handel abdecken. Der Benutzerflow beim Ticketkauf wurde als der kritischste Flow identifiziert. Das Workloadteam hat festgestellt, dass mehr Maßnahmen für die Zuverlässigkeit implementiert werden sollten, um sicherzustellen, dass der Flow für Resilienz optimiert ist.
- Das Team hat Zeitbudgets für Verbesserungen wie das Entkoppeln von Komponenten und die Neugestaltung von Flows, möchte aber sicherstellen, dass sie sich mit dieser Zeit auf die Verbesserungen konzentrieren, die den größten Nutzen bringen.
Anwenden des Ansatzes und Ergebnisse
- Das Team identifiziert das externe Zahlungsgateway als potenziellen Fehlerpunkt. Das Gateway ist hoch verfügbar, aber Benutzer*innen erleben gelegentlich vorübergehende Fehler aufgrund von Netzwerkproblemen oder extrem zahlreichen Anforderungen. Das Gateway kann einige Anforderungen ablehnen, wenn es durch mehrere gleichzeitig gesendete Anforderungen überlastet ist.
- Das Team ermittelt, dass Benutzer Anforderungen erneut übermitteln müssen, wenn ihre anfänglichen Anforderungen vom Gateway abgelehnt werden. Dies führt zu einem negativen Benutzererlebnis.
Implementieren von Selbsterhaltungsmechanismen
Erstellen Sie Selbsterhaltungsfunktionen, indem Sie Entwurfsmuster korrekt verwenden und den Entwurf modularisieren, um Fehler zu isolieren.
Durch das Einbinden von Selbsterhaltungsfunktionen in das System können Sie verhindern, dass sich ein Problem auf nachgelagerte Komponenten auswirkt. Das System kann vorübergehende und dauerhafte Fehler, Leistungsengpässe und andere Probleme verringern, die sich auf die Zuverlässigkeit auswirken können. Zudem können Sie den Auswirkungsradius minimieren.
Herausforderung von Contoso
- Das Team möchte das Risiko vorübergehender Fehler minimieren, die dazu führen, dass die Anforderungen von Benutzer*innen vom Zahlungsgateway abgelehnt werden. Aufgrund der vorübergehenden Natur einiger Fehlerbedingungen besteht eine hohe Wahrscheinlichkeit, dass die gleiche Anforderung erfolgreich ist, wenn sie erneut übermittelt wird.
Anwenden des Ansatzes und Ergebnisse
- Das Team entwickelt benutzerdefinierte Logik im Flow, um die Transaktion nach einer kurzen Verzögerung zu wiederholen, wenn ein Fehler erkannt wird, der einen erneuten Versuch möglich macht.
- Der Lösungsentwurf wird so geändert, dass das Wiederholungsmuster integriert wird. Dadurch wird die Wartezeit zwischen Wiederholungsversuchen geringfügig verlängert, bis die Anforderung erfolgreich verarbeitet wird oder die maximale Anzahl von Fehlern erreicht ist.
- Das Team legt auch fest, dass die Benutzerinteraktion und die Back-End-Zahlungsverarbeitungsfunktion dieses Flows mit einem ereignisgesteuerten Ansatz mit Azure Service Bus entkoppelt wird. Wenn beim Verarbeiten der Nachricht (nach der maximalen Anzahl von Wiederholungen) nicht behebbare Fehler auftreten, gibt der Back-End-Prozessor die Verarbeitung dieser Anforderung auf und belässt die Nachricht in der Warteschlange, sodass sie zu einem späteren Zeitpunkt erneut verarbeitet werden kann.
Erstellen von umfassender Redundanz und Resilienz
Erstellen Sie Redundanz in Ebenen und Resilienz auf verschiedenen Logikschichten.
Versuchen Sie, Redundanz in physischen Dienstprogrammen und sofortige Datenreplikation zu erreichen. Streben Sie zudem Redundanz in der funktionalen Ebene an, die Dienste, Operationen und Personal abdeckt. Redundanz trägt dazu bei, Single Points of Failure zu minimieren. Wenn sich z. B. ein Ausfall auf eine oder mehrere Komponenten, eine Verfügbarkeitszone oder eine vollständige Region auswirkt, können Sie mit einer redundanten Bereitstellung (aktiv/aktiv oder aktiv/passiv) die Uptimeziele erfüllen.
Das Hinzufügen von Vermittlern verhindert die direkte Abhängigkeit zwischen Komponenten und verbessert die Pufferung. Beide Vorteile verstärken die Resilienz des Systems.
Herausforderung von Contoso
- Das Implementieren von Wiederholungen und das Entkoppeln der Zahlungsgatewayaufrufe von der Benutzeroberfläche mit Service Bus hat die Zuverlässigkeit dieses Flows erheblich erhöht. Die Projektbeteiligten des Unternehmens sorgen sich jedoch immer noch wegen Datenverlusten, die aufgrund eines katastrophalen Fehlers in der primären Region auftreten könnten.
Anwenden des Ansatzes und Ergebnisse
- Das Team entscheidet sich für ein Upgrade auf den Service Bus Premium-Tarif. Auf diese Weise können sie die Supportfunktionalität für Verfügbarkeitszonen dieses Tarifs nutzen. Mit dieser Funktionalität werden mehrere Kopien der Daten in drei physisch getrennten Einrichtungen (Verfügbarkeitszonen) gespeichert, und der Dienst verfügt über ausreichend Kapazitätsreserven, um den vollständigen, katastrophalen Verlust eines Rechenzentrums unmittelbar zu bewältigen.
- Darüber hinaus konfiguriert das Team die georedundante Notfallwiederherstellung von Azure Service Bus so, dass Daten kontinuierlich in eine sekundäre Region repliziert werden, die im unwahrscheinlichen Fall eines vollständigen Ausfalls der primären Region verwendet wird.