Entwurfsprinzipien für die Zuverlässigkeit

Ausfälle und Fehlfunktionen sind ernste Sorgen für alle Workloads. Eine zuverlässige Workload muss diese Ereignisse überstehen und weiterhin die beabsichtigte Funktionalität bereitstellen. Es muss resilient sein, damit es Fehler innerhalb eines akzeptablen Zeitraums erkennen, aushalten und wiederhergestellt werden kann. Es muss auch verfügbar sein, damit Benutzer während des versprochenen Zeitraums auf die Workload auf der versprochenen Qualitätsebene zugreifen können.

Es ist nicht realistisch, davon auszugehen, dass keine Fehler auftreten, insbesondere wenn die Workload für die Ausführung auf verteilten Systemen erstellt ist. Bei einigen Komponenten können Fehler auftreten, während andere weiterhin ausgeführt werden. Irgendwann kann die Benutzererfahrung beeinträchtigt werden, was die Geschäftsziele gefährdet.

Workloadarchitekturen sollten Zuverlässigkeitsgarantien für Anwendungscode, Infrastruktur und Vorgänge aufweisen. Entwurfsentscheidungen sollten nicht die Absicht ändern, die durch geschäftsspezifische Anforderungen angegeben wird. Solche Änderungen sollten als erhebliche Kompromisse betrachtet werden.

Die Entwurfsprinzipien dienen als Leitfaden für Aspekte der Zuverlässigkeit, die Sie während des gesamten Entwicklungslebenszyklus berücksichtigen sollten. Beginnen Sie mit den empfohlenen Ansätzen und begründen Sie die Vorteile für eine Reihe von Anforderungen. Nachdem Sie Ihre Strategie festgelegt haben, führen Sie Aktionen mithilfe der Prüfliste Zuverlässigkeit durch.

Wenn Sie diese Prinzipien nicht auf Ihren Entwurf anwenden, ist die Workload wahrscheinlich nicht darauf vorbereitet, Probleme in der Produktion zu antizipieren oder zu behandeln. Das Ergebnis können Dienstunterbrechungen sein, die zu finanziellen Verlusten führen. Bei kritischen Workloads kann die Nicht-Anwendung dieser Prinzipien die Sicherheit gefährden.

Entwurf mit Blick auf geschäftliche Anforderungen

Zielsymbol Sammeln Sie geschäftsspezifische Anforderungen mit Fokus auf dem beabsichtigten Hilfsprogramm der Workload.

Die Anforderungen müssen Benutzererfahrung, Daten, Workflows und Merkmale abdecken, die für die Workload eindeutig sind. Das Ergebnis des Anforderungsprozesses muss die Erwartungen klar zum Ausdruck geben. Die Ziele müssen bei einer bestimmten Investition erreichbar und mit dem Team ausgehandelt werden. Sie müssen dokumentiert werden, um technologische Entscheidungen, Implementierungen und Vorgänge voranzutreiben.

Vorgehensweise Vorteil
Quantifizieren Sie den Erfolg, indem Sie Ziele für Indikatoren für einzelne Komponenten, Systemflüsse und das System als Ganzes festlegen. Machen diese Ziele Die Benutzerflüsse zuverlässiger? Metriken quantifizieren Erwartungen. Sie ermöglichen es Ihnen, Komplexitäten zu verstehen und zu bestimmen, ob die nachgelagerten Kosten dieser Komplexität innerhalb des Investitionslimits liegen.

Die Zielwerte geben einen idealen Zustand an. Sie können die Werte als Testschwellenwerte verwenden, die Ihnen helfen, Abweichungen von diesem Zustand zu erkennen und wie lange es dauert, zum Zielzustand zurückzukehren.

Complianceanforderungen müssen auch vorhersagbare Ergebnisse für Datenflüsse im Bereich aufweisen. Die Priorisierung dieser Flows lenkt die Aufmerksamkeit auf Bereiche, die am empfindlichsten sind.
Grundlegendes zu Plattformverpflichtungen Berücksichtigen Sie die Grenzwerte, Kontingente, Regionen und Kapazitätseinschränkungen für Dienste. Vereinbarungen zum Servicelevel (Service Level Agreements, SLAs) variieren je nach Dienst. Nicht alle Dienste und Features werden gleich behandelt. Nicht alle Dienste oder Features sind in allen Regionen verfügbar. Die meisten Ressourcengrenzwerte für Abonnements gelten pro Region. Ein gutes Verständnis von Abdeckung und Grenzwerten kann Ihnen helfen, Drift zu erkennen und Resilienz- und Wiederherstellungsmechanismen aufzubauen.
Bestimmen Sie Abhängigkeiten und deren Auswirkungen auf die Resilienz. Wenn Sie abhängige Infrastruktur, Dienste, APIs und Funktionen nachverfolgen, die von anderen Teams oder Drittanbietern entwickelt wurden, können Sie ermitteln, ob die Workload ohne diese Abhängigkeiten funktionieren kann. Es hilft Ihnen auch, kaskadierende Fehler zu verstehen und nachgelagerte Vorgänge zu verbessern.

Entwickler können robuste Entwurfsmuster implementieren , um potenzielle Fehler zu behandeln, wenn Sie externe Dienste verwenden, die möglicherweise anfällig für Fehler sind.

Entwurf für Resilienz

Zielsymbol Die Workload muss weiterhin mit vollständiger oder eingeschränkter Funktionalität ausgeführt werden.

Sie sollten davon ausgehen, dass Komponentenfehler, Plattformausfälle, Leistungseinbußen, eingeschränkte Ressourcenverfügbarkeit und andere Fehler auftreten. Bauen Sie resilienz im System auf, sodass es fehlertolerant ist und sich ordnungsgemäß verschlechtern kann.

Vorgehensweise Vorteil
Unterscheiden Sie Komponenten, die sich im kritischen Pfad befinden, von den Komponenten, die in einem beeinträchtigten Zustand funktionieren können. Nicht alle Komponenten der Workload müssen gleich zuverlässig sein. Die Bestimmung der Kritikalität hilft Ihnen, entsprechend der Kritikalität der einzelnen Komponenten zu entwerfen. Sie werden die Resilienz für Komponenten, die die Benutzerfreundlichkeit leicht beeinträchtigen könnten, nicht übermäßig vervollständigen, im Gegensatz zu Komponenten, die bei einem Ausfall End-to-End-Probleme verursachen können.

Der Entwurf kann bei der Zuordnung von Ressourcen zu kritischen Komponenten effizient sein. Sie können auch Strategien zur Fehlerisolation implementieren, sodass sie isoliert werden kann, wenn eine nicht kritische Komponente ausfällt oder in einen beeinträchtigten Zustand wechselt, um kaskadierende Fehler zu verhindern.
Identifizieren Sie potenzielle Fehlerpunkte im System, insbesondere für die kritischen Komponenten, und bestimmen Sie die Auswirkungen auf Benutzerflows. Sie können die Fehlerfälle, den Strahlradius und die Intensität des Fehlers analysieren: vollständiger oder teilweiser Ausfall. Diese Analyse beeinflusst den Entwurf von Fehlerbehandlungsfunktionen auf Komponentenebene.
Erstellen Sie Funktionen zur Selbsterhaltung , indem Sie Entwurfsmuster richtig verwenden und den Entwurf modularisieren, um Fehler zu isolieren. Das System kann verhindern, dass sich ein Problem auf nachgeschaltete Komponenten auswirkt. Das System kann vorübergehende und permanente Fehler, Leistungsengpässe und andere Probleme, die sich auf die Zuverlässigkeit auswirken können, beheben.

Sie können auch den Strahlradius minimieren.
Fügen Sie die Möglichkeit hinzu, die kritischen Komponenten (Anwendung und Infrastruktur) zu skalieren, indem Sie die Kapazitätseinschränkungen von Diensten in den unterstützten Regionen berücksichtigen. Die Workload ist in der Lage, Spitzen und Fluktuationen mit variabler Kapazität zu bewältigen. Diese Funktion ist von entscheidender Bedeutung, wenn das System unerwartet belastet wird, z. B. bei einem Anstieg der gültigen Nutzung. Wenn die Workload so konzipiert ist, dass sie über mehrere Regionen hochskaliert wird, können sie sogar potenzielle temporäre Ressourcenkapazitätseinschränkungen oder andere Probleme überwinden, die sich auf eine einzelne Region auswirken.
Erstellen Sie Redundanz in Ebenen und Resilienz auf verschiedenen Anwendungsebenen.

Zielen Sie auf Redundanz bei physischen Hilfsprogrammen und sofortige Datenreplikation ab. Zielen Sie auch auf Redundanz auf der Funktionsschicht ab, die Dienste, Vorgänge und Personal umfasst.
Redundanz trägt dazu bei , einzelne Fehlerpunkte zu minimieren. Wenn beispielsweise eine Komponente, ein zonenbezogener oder regionaler Ausfall vorliegt, können Sie mit der redundanten Bereitstellung (aktiv-aktiv oder aktiv-passiv) Betriebszeitziele erreichen.

Das Hinzufügen von Vermittlern verhindert direkte Abhängigkeiten zwischen Komponenten und verbessert das Puffern. Beide Vorteile stärken die Resilienz des Systems.
Überbereitstellung, um einzelne Fehler redundanter Instanzen sofort zu minimieren und gegen den auslaufenden Ressourcenverbrauch zu puffern. Höhere Investitionen in Überbereitstellung erhöhen die Resilienz.

Das System wird während eines aktiven Fehlers weiterhin mit dem vollständigen Hilfsprogramm ausgeführt, auch bevor Skalierungsvorgänge beginnen können, um den Fehler zu beheben. Ebenso können Sie das Risiko eines unerwarteten Ressourcenverbrauchs verringern, der Den geplanten Puffer beansprucht und kritische Triagezeit erhält, bevor Systemfehler oder aggressive Skalierung auftreten.

Entwurf für die Wiederherstellung

Zielsymbol Die Workload muss in der Lage sein, die meisten Fehler aller Größenordnungen zu antizipieren und wiederherzustellen, wobei die Benutzererfahrung und die Geschäftsziele minimal beeinträchtigt werden.

Selbst hoch resiliente Systeme benötigen Ansätze zur Notfallvorsorge, sowohl beim Architekturentwurf als auch bei Workloadvorgängen. Auf der Datenebene sollten Sie Strategien haben, die den Workloadzustand im Falle einer Beschädigung reparieren können.

Vorgehensweise Vorteil
Sie verfügen über strukturierte, getestete und dokumentierte Wiederherstellungspläne , die an den ausgehandelten Wiederherstellungszielen ausgerichtet sind. Pläne müssen alle Komponenten zusätzlich zum Gesamtsystem abdecken. Ein klar definierter Prozess führt zu einer schnellen Wiederherstellung , die negative Auswirkungen auf die Finanzen und den Ruf Ihres Unternehmens verhindern kann. Bei der Durchführung regelmäßiger Wiederherstellungsübungen wird der Prozess der Wiederherstellung von Systemkomponenten, Daten sowie Failover- und Failbackschritten getestet, um Verwirrung zu vermeiden, wenn Zeit und Datenintegrität wichtige Erfolgskennzahlen sind .
Stellen Sie sicher, dass Sie Daten aller zustandsbehafteten Komponenten innerhalb Ihrer Wiederherstellungsziele reparieren können. Sicherungen sind unerlässlich, um das System mithilfe eines vertrauenswürdigen Wiederherstellungspunkts wie dem letzten bekannten guten Zustand wieder in einen funktionierenden Zustand zu versetzen.

Unveränderliche und transaktionskonsistente Sicherungen stellen sicher, dass Daten nicht geändert werden können und dass die wiederhergestellten Daten nicht beschädigt werden.
Implementieren Sie automatisierte Selbstheilungsfunktionen im Entwurf. Diese Automatisierung reduziert Risiken durch externe Faktoren wie menschliches Eingreifen und verkürzt den Pausen-Fix-Zyklus.
Ersetzen Sie zustandslose Komponenten durch unveränderliche kurzlebige Einheiten. Das Erstellen kurzlebiger Einheiten, die Sie bei Bedarf starten und zerstören können, bietet Wiederholbarkeit und Konsistenz. Verwenden Sie parallele Bereitstellungsmodelle, um den Übergang zu den neuen Einheiten inkrementell zu gestalten und Unterbrechungen zu minimieren.

Entwurf mit Blick auf den Betrieb

Zielsymbol Verschieben Sie in Vorgängen nach links, um Fehlerbedingungen zu antizipieren.

Testen Sie Fehler frühzeitig und häufig im Entwicklungslebenszyklus, und bestimmen Sie die Auswirkungen der Leistung auf die Zuverlässigkeit. Zur Analyse der Grundursachen und der Postmorteme müssen Sie teamübergreifend über eine gemeinsame Sichtbarkeit von Abhängigkeiten status und laufenden Fehlern verfügen. Erkenntnisse, Diagnose und Warnungen aus beobachtbaren Systemen sind von grundlegender Bedeutung für effektives Incidentmanagement und kontinuierliche Verbesserung.

Vorgehensweise Vorteil
Erstellen sie beobachtbare Systeme , die Telemetriedaten korrelieren können. Überwachung und Diagnose sind wichtige Vorgänge. Wenn etwas fehlschlägt, müssen Sie wissen, dass es fehlgeschlagen ist, wann es fehlgeschlagen ist und warum es fehlschlägt. Die Beobachtbarkeit auf Komponentenebene ist von grundlegender Bedeutung, aber die aggregierte Beobachtbarkeit von Komponenten und korrelierten Benutzerflüssen bietet eine ganzheitliche Sicht auf die Integrität status. Diese Daten sind erforderlich, damit Websitezuverlässigkeitstechniker ihre Korrekturmaßnahmen priorisieren können.
Vorhersagen potenzieller Fehlfunktionen und anomales Verhalten. Machen Sie aktive Zuverlässigkeitsfehler sichtbar, indem Sie priorisierte und umsetzbare Warnungen verwenden.

Investieren Sie in zuverlässige Prozesse und Infrastruktur, die zu einer schnelleren Triage führen.
Site Reliability Engineers können sofort benachrichtigt werden, damit sie laufende Live-Standortvorfälle minimieren und potenzielle Fehler, die durch Vorhersagewarnungen erkannt werden, proaktiv beheben können, bevor sie zu Live-Incidents werden.
Simulieren sie Fehler und führen Sie Tests in Produktions- und Vorproduktionsumgebungen aus. Es ist von Vorteil, dass fehler in der Produktion auftreten, damit Sie realistische Erwartungen für die Wiederherstellung festlegen können. Dadurch können Sie Entwurfsentscheidungen treffen, die ordnungsgemäß auf Fehler reagieren. Außerdem können Sie die Schwellenwerte testen, die Sie für Geschäftsmetriken festgelegt haben.
Erstellen Sie Komponenten unter Berücksichtigung der Automatisierung, und automatisieren Sie so viel wie möglich. Automatisierung minimiert das Potenzial für menschliche Fehler und sorgt für Konsistenz bei Tests, Bereitstellungen und Vorgängen.
Berücksichtigen Sie Routinevorgänge und deren Auswirkungen auf die Stabilität des Systems. Die Workload unterliegt möglicherweise laufenden Vorgängen, z. B. Anwendungsrevisionen, Sicherheits- und Complianceüberwachungen, Komponentenupgrades und Sicherungsprozessen. Die Überprüfung dieser Änderungen gewährleistet die Stabilität des Systems.
Lernen Sie kontinuierlich von Incidents in der Produktion. Basierend auf den Vorfällen können Sie die Auswirkungen und Versäumnisse bei Entwurf und Vorgängen ermitteln, die in der Vorproduktion möglicherweise unbemerkt bleiben. Letztendlich werden Sie in der Lage sein, Verbesserungen basierend auf realen Vorfällen voranzutreiben.

Einfachheit

Zielsymbol Vermeiden Sie das Überengineering des Architekturentwurfs, des Anwendungscodes und der Vorgänge.

Es ist oft das, was Sie entfernen und nicht das, was Sie hinzufügen, das zu den zuverlässigsten Lösungen führt. Einfachheit reduziert die Oberfläche für die Steuerung und minimiert Ineffizienzen und potenzielle Fehlkonfigurationen oder unerwartete Interaktionen. Andererseits kann eine Überimplifizierung zu single points of Failure führen. Behalten Sie einen ausgewogenen Ansatz bei.

Vorgehensweise Vorteil
Fügen Sie Ihrer Architektur Komponenten nur hinzu, wenn sie Ihnen dabei helfen, Geschäftsziele zu erreichen. Halten Sie den kritischen Pfad schlank. Das Entwerfen für geschäftliche Anforderungen kann zu einer einfachen Lösung führen, die einfach zu implementieren und zu verwalten ist. Vermeiden Sie zu viele kritische Komponenten, da jede komponente ein wichtiger Fehlerpunkt ist.
Legen Sie Standards für die Codeimplementierung, -bereitstellung und -prozesse fest, und dokumentieren Sie diese. Identifizieren von Möglichkeiten zum Erzwingen dieser Standards mithilfe automatisierter Validierungen Standards sorgen für Konsistenz und minimieren menschliche Fehler. Ansätze wie Standardbenennungskonventionen und Codestilhandbücher können Ihnen helfen, die Qualität zu erhalten und Ressourcen während der Problembehandlung einfach zu identifizieren.
Bewerten Sie, ob theoretische Ansätze auf pragmatisches Design übertragen werden, das für Ihre Anwendungsfälle gilt. Zu präziser Anwendungscode kann zu unnötigen Abhängigkeiten, zusätzlichen Vorgängen und schwieriger Wartung führen.
Entwickeln Sie gerade genug Code. Sie können Probleme verhindern, die das Ergebnis ineffizienter Implementierungen sind, z. B. unerwarteter Ressourcenverbrauch, Benutzer- oder Dataflowfehler und Codefehler.

Im Gegensatz dazu sollten Zuverlässigkeitsprobleme zu Codeüberprüfungen führen, um sicherzustellen, dass Der Code widerstandsfähig genug ist, um die Probleme zu behandeln.
Nutzen Sie plattformseitig bereitgestellte Features und vordefinierte Ressourcen, mit denen Sie Geschäftsziele effektiv erreichen können. Dieser Ansatz minimiert die Entwicklungszeit. Außerdem können Sie sich auf bewährte Methoden verlassen , die mit ähnlichen Workloads verwendet wurden.

Nächste Schritte