Empfehlungen zum Entwerfen einer Zuverlässigkeitsteststrategie

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

RE:08 Testen Sie Resilienz- und Verfügbarkeitsszenarien, indem Sie die Prinzipien des Chaos Engineerings in Ihren Test- und Produktionsumgebungen anwenden. Verwenden Sie Tests, um sicherzustellen, dass Ihre Implementierungs- und Skalierungsstrategien für die ordnungsgemäße Beeinträchtigung wirksam sind, indem Sie aktive Fehlfunktionen und simulierte Auslastungstests durchführen.

In diesem Leitfaden werden die Empfehlungen zum Entwerfen einer Zuverlässigkeitsteststrategie beschrieben, um die Zuverlässigkeit Ihrer Workload zu überprüfen und zu optimieren. Zuverlässigkeitstests konzentrieren sich auf die Resilienz und Verfügbarkeit Ihrer Workload, insbesondere auf die kritischen Flows, die Sie beim Entwerfen Ihrer Lösung identifizieren. Dieser Leitfaden enthält allgemeine Testanleitungen und Anleitungen, die spezifisch für Fehlerinjektion und Chaosentwicklung sind.

Definitionen

Begriff Definition
Verfügbarkeit Die Zeitspanne, die eine Anwendungsworkload in einem fehlerfreien Zustand ohne erhebliche Ausfallzeiten ausführt.
Chaos Engineering Die Praxis, Anwendungen und Dienste realen Belastungen und Fehlern zu unterziehen. Das Ziel von Chaos Engineering ist es, resilienz gegenüber unzuverlässigen Bedingungen und fehlenden Abhängigkeiten aufzubauen und zu validieren.
Einschleusen von Fehlern Der Akt der Einführung eines Fehlers in ein System, um die Resilienz des Systems zu testen.
Wiederherstellbarkeit Ein Synonym für Resilienz.
Resilienz Die Fähigkeit einer Anwendungsworkload, Fehlermodi standzuhalten und wiederherzustellen.

Wichtige Entwurfsstrategien

Allgemeine Testanleitung

  • Führen Sie routinemäßig Tests durch, um vorhandene Schwellenwerte, Ziele und Annahmen zu überprüfen. Führen Sie regelmäßig Tests durch, wenn eine wesentliche Änderung in Ihrer Workload auftritt. Führen Sie die meisten Tests in Test- und Stagingumgebungen durch. Es ist auch vorteilhaft, eine Teilmenge von Tests für das Produktionssystem auszuführen. Planen Sie eine 1:1-Parität der wichtigsten Testumgebungen mit der Produktionsumgebung.

  • Automatisieren Sie Tests, um eine konsistente Testabdeckung und Reproduzierbarkeit sicherzustellen. Automatisieren Sie häufige Testaufgaben, und integrieren Sie sie in Ihren Buildprozess. Das manuelle Testen von Software ist mühsam und fehleranfällig, aber Sie können manuelle explorative Tests durchführen. In Fällen, in denen Sie automatisierte Tests entwickeln müssen, verwenden Sie manuelle Tests, um den Umfang der zu entwickelnden Tests zu bestimmen.

  • Verwenden Sie einen Shift-Left-Testansatz, um Resilienz- und Verfügbarkeitstests zu einem frühen Zeitpunkt im Entwicklungszyklus durchzuführen.

  • Passen Sie ein einfaches Dokumentationsformat an, sodass es für jeden leicht ist, den Prozess und die Ergebnisse jedes regulären Tests zu verstehen.

  • Teilen Sie die dokumentierten Ergebnisse mit den entsprechenden Teams wie Betriebsteams, Technologieführern, Geschäftsbeteiligten und Notfallwiederherstellungsbeteiligten. Die Ergebnisse sollten die Verfeinerung von Zuverlässigkeitszielen wie Service Level Objectives (SLOs), Vereinbarungen zum Servicelevel (Service Level Agreements, SLAs), Wiederherstellungszeitziele (Recovery Time Objectives, RTOs) und Wiederherstellungspunktzielen (Recovery Point Objectives, RPOs) unterstützen.

  • Erstellen Sie einen regelmäßigen Testrhythmus für Ihre Sicherungen. Stellen Sie die Daten auf isolierten Systemen wieder her, um sicherzustellen, dass die Sicherungen gültig sind und dass Wiederherstellungen funktionsfähig sind.

  • Dokumentieren und teilen Sie Metriken zur Wiederherstellungszeit mit Ihren Beteiligten für die Notfallwiederherstellung, um sicherzustellen, dass die Erwartungen für die Wiederherstellung angemessen sind.

  • Verwenden Sie Bereitstellungstestverfahren nach Branchenstandard, um sicherzustellen, dass Sie über einen automatisierten, vorhersagbaren und effizienten Bereitstellungsprozess verfügen.

  • Testen Sie die Fähigkeit Ihrer Workload, vorübergehenden Ausfällen standzuhalten. Weitere Informationen finden Sie unter Empfehlungen für die Behandlung vorübergehender Fehler.

  • Testen Sie die Fähigkeit Ihrer Workload, auf Änderungen bei Auslastungsmustern und Nutzungsspitzen zu reagieren. Verwenden Sie diese Informationen, um Ihre Skalierungsstrategie zu testen. Informationen zu Auslastungs- und Belastungstests finden Sie unter Empfehlungen für Tests.

  • Testen Sie mithilfe der Fehlerinjektion, wie Ihre Workload Fehler in abhängigen Diensten oder anderen Abhängigkeiten verarbeitet.

  • Testen und überprüfen Sie, wie Ihr Selbstheilungs- und Selbsterhaltungsentwurf auf Fehlfunktionen reagiert. Testen Sie automatisierte und manuelle Wiederherstellungsvorgänge.

  • Testen Sie Ihren Notfallwiederherstellungsplan , um auf schwerwiegende Ausfälle und andere schwerwiegende Vorfälle zu reagieren.

  • Testen Sie mithilfe der Fehlerinjektion die Fähigkeit Ihrer Workload, den Explosionsradius von Komponentenfehlern ordnungsgemäß zu verringern und zu minimieren.

Nutzen von geplanten und ungeplanten Ausfällen

Wenn Ihre Workload aufgrund einer geplanten Wartung oder eines ungeplanten Ausfalls offline ist, haben Sie eine einzigartige Möglichkeit, Tests durchzuführen und Ihr Verständnis Ihrer Workload zu verbessern. Die folgenden Abschnitte enthalten Empfehlungen für jedes Szenario.

Geplante Wartung

Wenn Sie Wartungsfenster für Updates oder Patches geplant haben, können Sie Komponenten und Flows testen, die nicht an den Wartungsarbeiten beteiligt sind. Führen Sie Tests durch, ohne dass die Gefahr besteht, dass die Workload unerwartet beeinträchtigt oder vollständig offline geschaltet wird. Wenn Sie während des Wartungsfensters genügend Zeit haben, können Sie auch die Komponenten und Flows testen, die an der Wartung beteiligt sind, nachdem die Wartungsarbeiten abgeschlossen sind.

Ungeplanter Ausfall

Nutzen Sie jeden Ausfallvorfall als Gelegenheit, um mehr über Ihre Workload zu erfahren und ihre Resilienz zu verbessern, indem Sie die folgenden Schritte nach Priorität geordnet ausführen:

  • Schalten Sie die Workload für Ihre Kunden wieder online. Hierzu können Sie eine Problemumgehung für das Problem ausführen, das Problem beheben oder die Wiederherstellungsprozesse initiieren.

  • Ermitteln Sie die Grundursache des Ausfalls, und beheben Sie ihn. Wenn Sie die Grundursache im Rahmen der Untersuchung beheben können, dokumentieren Sie die Grundursache und die Maßnahmen, die Sie ergriffen haben, um sie zu beheben. Wenn für das Problem ein zusätzliches Wartungsfenster zu einem späteren Zeitpunkt erforderlich ist, stellen Sie sicher, dass Ihre Entschärfungsmaßnahmen die erwartete Auslastung verarbeiten können, indem Sie es gründlich testen. Stellen Sie sicher, dass Sie eine ausreichende Überwachung eingerichtet haben, um Ihre Maßnahmen zur Entschärfung abzudecken.

  • Suchen Sie ggf. nach demselben Problem oder nach Konfigurationsschwächen, die möglicherweise von ähnlichen Problemen betroffen sind, für alle Komponenten in Ihrer Workload. Nutzen Sie diese Gelegenheit, um diese Komponenten proaktiv anzugehen. Lesen Sie Ihren Incidentverlauf, um Muster ähnlicher Probleme für Ihre Workload zu erkennen.

  • Verwenden Sie Ihre Ergebnisse, um Ihre Teststrategie zu verbessern. Stellen Sie sicher, dass Sie die Grundursache und ähnliche Probleme erfolgreich behoben haben, indem Sie denselben Fehler direkt testen.

Anleitung zur Fehlereinschleusung und Chaosentwicklung

Fehlereinschleusungstests folgen den Prinzipien des Chaos-Engineerings, indem die Fähigkeit der Workload, auf Komponentenfehler zu reagieren, hervorgehoben wird. Führen Sie Fehlereinschleusungstests in Vorproduktions- und Produktionsumgebungen durch. Wenden Sie Tests auf Infrastruktur- und Anwendungsebenen an. Wenden Sie die Informationen an, die Sie mit Empfehlungen für die Fehlermodusanalyse gelernt haben, um sicherzustellen, dass Sie nur Fehler testen, die Sie priorisieren, und dass Sie Strategien zur Behebung von Fehlern haben. Die wichtigsten Richtlinien des Chaos Engineering sind:

  • Proaktiv sein. Warten Sie nicht, bis Fehler auftreten. Versuchen Sie, Fehler zu antizipieren, indem Sie Chaosexperimente durchführen, um Probleme zu ermitteln und zu beheben, bevor sie sich auf Ihre Produktionsumgebung auswirken.

  • Fehler akzeptieren. Akzeptieren und lernen Sie aus den Fehlern, die in Ihrem System auftreten. Sehen Sie Fehler als natürlichen Teil komplexer Systeme und nutzen Sie sie als Gelegenheit, die Zuverlässigkeit Ihres Systems zu lernen und zu verbessern.

  • System zum Absturz bringen. Stellen Sie ihr System absichtlich mit Fehlern oder Stress in Verbindung, um seine Resilienz zu testen. Simulieren Sie reale Fehler oder Unterbrechungen, um die Wiederherstellungsfunktionen Ihrer Workload zu testen und zu verbessern.

  • Single Points of Failure identifizieren und beseitigen. Überprüfen und aktualisieren Sie beim Testen Ihre Fehlermodusanalyse , um Fehler in Ihrer Dokumentation zu überprüfen und zu beheben. Wenden Sie Zuverlässigkeitsansätze wie Redundanz und Segmentierung an, um die Verfügbarkeit Ihrer Workload zu erhöhen und Ausfallzeiten zu minimieren.

  • Schutzmaßnahmen ergreifen und ordnungsgemäße Risikominderungen ermöglichen. Implementieren Sie Sicherheitsmaßnahmen, z. B. das Muster des Leistungsschalters oder das Drosselungsmuster, um die Verfügbarkeit zu erhöhen. Implementieren Sie ansätze für eine ordnungsgemäße Herabsetzung, die geschäftskontinuität bei Fehlern ermöglichen.

  • Auswirkungsgrad begrenzen. Implementieren Sie Strategien zur Fehlerisolation, um sicherzustellen, dass der Umfang begrenzt ist, selbst wenn ein Fehler auftritt. Das System funktioniert weiterhin mit minimalen Auswirkungen auf Ihre Kunden.

  • Immunität sicherstellen. Verwenden Sie Chaos Engineering-Experimente, um die Fähigkeit Ihrer Workload zu verbessern, Fehler zu verhindern und wiederherzustellen.

Chaos Engineering ist ein integraler Bestandteil der Workload-Teamkultur und eine fortlaufende Praxis, keine kurzfristige taktische Anstrengung als Reaktion auf einen einzelnen Ausfall. Befolgen Sie diese Standardmethode, wenn Sie Ihre Chaosexperimente entwerfen:

  1. Mit Hypothese beginnen Jedes Experiment sollte ein klares Ziel haben, z. B. die Fähigkeit eines bestimmten Flusses zu testen, dem Verlust einer bestimmten Komponente standzuhalten.
  2. Basisverhalten messen Stellen Sie sicher, dass Sie über konsistente Zuverlässigkeits- und Leistungsmetriken für den Flow und die Komponenten verfügen, die an einem bestimmten Experiment beteiligt sind, um beim Ausführen des Experiments mit dem beeinträchtigten Zustand zu vergleichen.
  3. Fehler einschleusen Das Experiment sollte absichtlich auf bestimmte Komponenten abzielen, die schnell wiederhergestellt werden können, und Sie sollten eine informierte Erwartung haben, dass die Auswirkung der Fehlerinjektion zur Kontrolle des Strahlradius des Experiments beitragen wird.
  4. Resultierendes Verhalten überwachen Sammeln Sie Telemetriedaten zu den einzelnen Flusskomponenten und dem End-to-End-Flussverhalten, auf das das Experiment abzielt, um die Auswirkungen des Fehlers richtig zu verstehen. Vergleichen Sie die von Ihnen erfassten Metriken mit den Baselinemetriken, um ein vollständiges Bild der Fehlereinschleusungsergebnisse zu erhalten.
  5. Prozess und Beobachtungen dokumentieren. Die detaillierte Aufzeichnung Ihrer Experimente wird die zukünftigen Entscheidungen über den Workloadentwurf informieren und sicherstellen, dass Sie die Lücken beheben, die im Laufe der Zeit aufgedeckt wurden.
  6. Ergebnis ermitteln und entsprechend reagieren Planen Sie Korrekturschritte, die Ihrem Workloadbacklog als Verbesserungen hinzugefügt werden können. Stellen Sie sicher, dass Entwurfsverbesserungspläne in Nichtproduktionsumgebungen nach denselben Prozessen wie andere Bereitstellungen überprüft und getestet werden.

Überprüfen Sie in regelmäßigen Abständen Ihre Prozesse, Architekturoptionen und Ihren Code, um technische Schulden schnell zu erkennen, neue Technologien zu integrieren und sich ändernde Anforderungen anzupassen.

Wenn Sie Fehlerinjektionsexperimente durchführen, müssen Sie:

  • Vergewissern Sie sich, dass die Überwachung eingerichtet ist und Warnungen eingerichtet sind.
  • Überprüfen Sie Ihren Prozess der Zuweisung einer direkt verantwortlichen Person (DRI), um den Besitz eines Incidents zu übernehmen.
  • Stellen Sie sicher, dass Ihre Dokumentations- und Untersuchungsprozesse auf dem neuesten Stand sind.

Integrieren Sie die folgenden Empfehlungen und Überlegungen, um Ihre Chaosteststrategie zu optimieren:

  • Für das System geltende Annahmen in Frage stellen Mit Tests versuchen Sie, die Resilienz Ihrer Workload und Ihre Workloadentwurfsstrategien zu verbessern. Suchen Sie nach Möglichkeiten, Fehler in Komponenten und Flows einzufügen, von denen Sie aufgrund früherer Erfahrungen annehmen, dass sie zuverlässig sind. Sie sind in Ihrer neuen Workload möglicherweise nicht zuverlässig.

  • Überprüfen Sie Änderungen, z. B. Topologie, Plattform und Ressourcen. Ohne gründliche Tests, einschließlich Fehlereinschleusungstests, haben Sie möglicherweise ein unvollständiges Bild Ihrer Workload, nachdem Änderungen vorgenommen wurden. Beispielsweise könnten Sie versehentlich neue Abhängigkeiten einführen oder vorhandene Abhängigkeiten auf eine Weise aufbrechen, die nicht sofort erkennbar sind.

  • Verwenden Sie SLA-Puffer. Beschränken Sie Chaostests, um innerhalb Ihrer SLAs zu bleiben, und vermeiden Sie potenzielle Reputations- oder finanzielle Auswirkungen durch Ausfälle. Ihre Datenfluss- und Komponentenwiederherstellungsziele helfen ihnen dabei, den Umfang Ihrer Tests zu definieren.

  • Legen Sie ein Fehlerbudget als Investition in Chaos Engineering und die Fehlereinschleusung fest. Ihr Fehlerbudget ist der Unterschied zwischen dem Erreichen von 100 Prozent der SLO und dem Erreichen der vereinbarten SLO.

  • Beenden Sie das Experiment, wenn es über den Bereich hinausgeht. Unklare Ergebnisse sind bei Chaosexperimenten zu erwarten. Streben Sie die richtige Abstimmung zwischen der Erfassung umfangreicher Ergebnisdaten und der Beeinträchtigung möglichst weniger Produktionsbenutzer an.

  • Arbeiten Sie eng mit Entwicklungsteams zusammen, um die Relevanz der eingefügten Fehler sicherzustellen. Verwenden Sie frühere Vorfälle oder Probleme als Anhaltspunkte. Untersuchen Sie Abhängigkeiten, und werten Sie die Ergebnisse aus, wenn Sie diese Abhängigkeiten entfernen.

  • Identifizieren und dokumentieren Sie bisher unentdeckte Abhängigkeiten zwischen verschiedenen Komponenten innerhalb Ihrer Workload, die durch Chaostests aufgedeckt werden.

  • Passen Sie Wiederherstellungspläne nach Bedarf an, um Abhängigkeiten zu berücksichtigen, die während des Chaostests ermittelt werden.

  • Verwenden Sie die Ergebnisse Ihrer Experimente und Tests als Grundlage für neue Experimente und Tests. Wenn unerwartete Verhaltensweisen auftreten, können neue Tests direkt auf diese Verhaltensweisen abzielen und Ihnen die Möglichkeit geben, Korrekturstrategien für sie zu entwerfen.

Kompromiss: Fehlerinjektionstests in der Produktion können störend sein und möglicherweise zu Ausfallzeiten führen. Seien Sie gegenüber den Beteiligten transparent über diese Möglichkeit, und stellen Sie sicher, dass Sie über Schutzmaßnahmen zum Beenden von Experimenten und Rollbackplänen verfügen, um die von Ihnen eingeführten Fehler schnell rückgängig zu machen. Um sich vor unbeabsichtigten Ausfällen in der Produktion zu schützen, stellen Sie sicher, dass Sie eine ausreichende Redundanz planen und dass Ihre Projektbeteiligten den Kostenkonflikt verstehen.

Azure-Erleichterung

Azure Test Plans ist eine benutzerfreundliche, browserbasierte Testverwaltungslösung, die alle Funktionen bietet, die für geplante manuelle Tests, Benutzerakzeptanztests, explorative Tests und das Sammeln von Feedback von Stakeholdern erforderlich sind.

Azure Chaos Studio ist ein verwalteter Dienst, der Chaos-Engineering verwendet, um Sie beim Messen, Verstehen und Verbessern der Resilienz Ihrer Cloudanwendungen und Dienste zu unterstützen. Azure Chaos Studio hat auf der Ignite 2023 die allgemeine Verfügbarkeit erreicht und verfügt über viele Features, die Ihnen den Einstieg in die Fehlerinjektion und Resilienztests für Ihre Anwendung mithilfe der Azure-Infrastruktur erleichtern.

Prüfliste für zuverlässigkeit

Weitere Informationen finden Sie im vollständigen Satz von Empfehlungen.