Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ausfälle und Fehlfunktionen sind schwerwiegende Bedenken für alle Workloads. Eine zuverlässige Arbeitslast muss diese Ereignisse überstehen und ihre beabsichtigte Funktionalität konsistent weiterhin bereitstellen. Es muss robust sein, damit es Störungen erkennen und aushalten kann, um den Betrieb fortzusetzen. Es muss wiederhergestellt werden, damit die Arbeitsauslastung innerhalb vereinbarter Wiederherstellungsziele wiederhergestellt werden kann, wenn eine Unterbrechung Resilienzmaßnahmen überschreitet. Es muss auch verfügbar sein, damit Benutzer während des versprochenen Zeitraums auf der versprochenen Qualitätsebene auf die Arbeitsauslastung zugreifen können.
Es ist nicht realistisch, davon auszugehen, dass keine Ausfälle auftreten, insbesondere wenn die Workload für verteilte Systeme konzipiert ist. Einige Komponenten können fehlschlagen, während andere weiterhin funktionieren. Irgendwann kann die Benutzererfahrung betroffen sein, was geschäftsziele beeinträchtigt.
Arbeitsauslastungsarchitekturen sollten Zuverlässigkeitsüberprüfungen in Anwendungscode, Infrastruktur und Vorgängen aufweisen. Designoptionen sollten nicht die Absicht ändern, die in den geschäftlichen Anforderungen vorgegeben wird. Solche Änderungen sollten als erhebliche Kompromisse betrachtet werden.
Die Designprinzipien sollen Anleitungen für Aspekte der Zuverlässigkeit bereitstellen, die Sie während des gesamten Entwicklungslebenszyklus berücksichtigen sollten. Beginnen Sie mit den empfohlenen Ansätzen, und rechtfertigen Sie die Vorteile für eine Reihe von Anforderungen. Nachdem Sie Ihre Strategie festgelegt haben, steuern Sie Aktionen mithilfe der Zuverlässigkeitsprüfliste.
Wenn Sie diese Prinzipien nicht auf Ihr Design anwenden, ist die Arbeitsauslastung wahrscheinlich nicht darauf vorbereitet, Probleme in der Produktion zu antizipieren oder zu behandeln. In der Folge können Dienstunterbrechungen auftreten, die zu finanziellen Verlusten führen. Wenn bei kritischen Arbeitslasten diese Prinzipien nicht angewendet werden, könnte dies die Sicherheit gefährden.
Design für Geschäftsanforderungen
|
|
|---|
Design basiert nicht auf undefinierten oder vagen Ergebnissen. Zuverlässigkeit erfordert eine gezielte Tätigkeit, die eine Einigung über akzeptable Benutzererfahrungen, Gestaltungsbeschränkungen sowie darüber erzielt, wie Erfolg aussieht und wie dieser gemessen wird.
Legen Sie klare, erreichbare und dokumentierte Ziele fest, die mit den Geschäftsbeteiligten ausgehandelt und in einer realistischen Investition und Prognose verankert sind. Diese Anforderungen beeinflussen direkt Ihre Architekturentscheidungen, von Widerstandsstrategien über Überwachungstools bis hin zu Skalierungsplänen.
| Vorgehensweise | Nutzen |
|---|---|
| Konzentrieren Sie sich auf das Sammeln von Informationen, die zum Definieren des Umfangs und der Tiefe der Lösung erforderlich sind. Klären Sie Einschränkungen, die geschäftsziele beeinflussen. Beginnen Sie mit allgemeinen Fragen, z. B.: - Welche Resilienz,Wiederherstellung, Beobachtbarkeit und Einfachheit ist erforderlich? - Gibt es definierte Einschränkungen im Zusammenhang mit Kosten, Compliance, Geografie oder Latenz? Dokumentieren Sie anhand dieser Informationen, was gut genug und einfach zu erreichen ist. |
Das Verständnis von Zielen und Grenzen verhindert Schätzarbeit. Andernfalls hängen Sie möglicherweise in einer iterativen Designschleife, was zu verschwendeten Anstrengungen und unnötigen Kosten führt. |
| Leiten Sie die Entscheidungsfindung, indem Sie Geschäftsziele in ein gemeinsames Verständnis von architektonischen Kompromissen innerhalb realer Einschränkungen übersetzen. Präsentieren Sie Optionen, die sich auf Folgendes auswirken: - Finanzielle Kosten - Technische Komplexität -Sicherheitsüberlegungen - Betriebsaufwand |
Dies hilft den Beteiligten, die Kosten, Komplexität und operative Auswirkungen ihrer Fragen zu verstehen und sie zu realistischen, abgestimmten Ergebnissen zu führen. |
|
Priorisieren Sie die Definition von Zuverlässigkeitszielen für jeden kritischen Benutzerfluss anstatt generischer Messungen wie z. B. der Betriebszeit. Identifizieren Sie die vom Benutzer zugänglichen Funktionen und Flüsse über das System, und bewerten Sie für jeden die Geschäftswerte, Nutzungsmuster und Resilienzanforderungen. Fördern Sie den Konsens auf der Flow-Ebene, um sicherzustellen, dass Designentscheidungen mit den Geschäftszielen in Einklang bleiben. |
Diese Unterhaltung hilft den Projektbeteiligten, sich von unhaltbaren Aussagen wie "die Website muss immer verfügbar sein" hin zu praktischen, erreichbaren Erwartungen zu verlagern, die an echte Funktionalität und Ergebnisse gebunden sind. Diese Ergebnisse helfen dabei, zu ermitteln, was mit Technologie gelöst wird und was mit zusätzlichen Geschäftskontinuitätsplänen behoben werden kann. |
|
Verankern Sie Designoptionen um Zeithorizonte. Definieren Sie die Nutzungserwartungen mit realistischer Prognose. Was ist beispielsweise die erwartete Benutzerladezeit beim Start? Soll das Benutzerwachstum linear, exponentiell oder unsicher sein. |
Diese Informationen helfen Ihnen, eine Architektur zu entwerfen, die kurzfristigen Zuverlässigkeitsanforderungen gerecht wird, während Entwurfsentscheidungen vermieden werden, die erhebliche Überarbeitungen erfordern, um zukünftige Horizonte zu bewältigen. Dieser Ansatz wirkt sich darauf aus, wie Sie über Dielastbarkeit, ereignisgesteuerte Workflows nachdenken und strategische Entscheidungen darüber treffen können, welche technischen Schulden entweder entstehen oder vermieden werden. |
|
Berücksichtigen Sie Abhängigkeiten, die die Gestaltungsfreiheit einschränken können, z. B. Organisationsbeschränkungen. Beachten Sie die zentrale Infrastruktur, Sicherheitsmandate, Netzwerkroutingrichtlinien oder Plattformentscheidungen, die sich direkt auf das auswirken, was Sie hinsichtlich Resilienz, Verfügbarkeit und Wiederherstellung versprechen können. |
Wenn Sie Ihre Abhängigkeit von Diensten außerhalb Ihrer Kontrolle verstehen, können Sie realistische Erwartungen an Zuverlässigkeit entwerfen. Sie stellt sicher, dass Ihre RTO/RPO-Ziele und SLOs erreichbar und klar kommuniziert werden können, wodurch Überpromisen vermieden und Überraschungen reduziert werden. |
Design für Belastbarkeit
|
|
|---|
Sie sollten davon ausgehen, dass Komponentenfehler, Plattformausfälle, Leistungsbeeinträchtigungen, eingeschränkte Ressourcenverfügbarkeit und andere Fehler auftreten. Bauen Sie Resilienz im System auf, damit es fehlertolerant ist und sich sanft verschlechtern kann.
| Vorgehensweise | Nutzen |
|---|---|
| Unterscheiden Sie Komponenten, die sich auf dem kritischen Pfad befinden, von denen, die in einem herabgestuften Zustand funktionieren können. | Nicht alle Komponenten der Arbeitsauslastung müssen gleichermaßen zuverlässig sein. Die Bestimmung der Kritikalität hilft Ihnen dabei, das Design gemäß der Kritikalität jeder Komponente zu gestalten. Sie werden die Ausfallsicherheit nicht für Komponenten überengineeren, die die Benutzererfahrung nur geringfügig verschlechtern könnten, im Gegensatz zu Komponenten, die bei einem Ausfall End-to-End-Probleme verursachen können. Der Entwurf kann effizient sein, um Ressourcen kritischen Komponenten zuzuordnen. Sie können auch Fehlerisolationsstrategien implementieren, sodass sie isoliert werden können, wenn eine nicht kritische Komponente fehlschlägt oder in einen beeinträchtigten Zustand versetzt wird, um Folgefehler zu verhindern. |
| Identifizieren Sie potenzielle Fehlerpunkte im System, insbesondere für die kritischen Komponenten, und bestimmen Sie die Auswirkungen auf Benutzerflüsse. | 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 Selbsterhaltungsfunktionen , indem Sie Entwurfsmuster korrekt verwenden und den Entwurf modularisieren, um Fehler zu isolieren. | Das System kann 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. 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ätsbeschränkungen von Diensten in den unterstützten Regionen berücksichtigen. | Die Arbeitslast kann variable Kapazitätsspitzen und Schwankungen bewältigen. Diese Funktion ist entscheidend, wenn es eine unerwartete Auslastung des Systems gibt, z. B. eine Zunahme der gültigen Nutzung. Wenn die Workload so konzipiert ist, dass sie über mehrere Regionen skaliert wird, kann sie sogar potenzielle temporäre Ressourcenkapazitätseinschränkungen oder andere Probleme, die sich auf eine einzelne Region auswirken, überwinden. |
|
Erstellen Sie Redundanz in Ebenen und Resilienz auf verschiedenen Anwendungsebenen. Zielen Sie auf Redundanz in physischen Infrastrukturen und auf sofortige Datenreplikation ab. Zielt auch auf Redundanz in der Funktionalen Ebene ab, die Dienstleistungen, Operationen und Personal abdeckt. |
Redundanz trägt dazu bei, einzelne Fehlerpunkte zu minimieren. Wenn zum Beispiel eine Komponente, ein zonaler oder ein regionaler Ausfall vorliegt, ermöglicht eine redundante Bereitstellung (in aktiv-aktiv oder aktiv-passiv) Ihnen, die Uptime-Ziele zu erreichen. Das Hinzufügen von Zwischenvermittlern verhindert die direkte Abhängigkeit zwischen Komponenten und verbessert die Pufferung. Beide Vorteile erschweren die Resilienz des Systems. |
| Überprovisionierung, um einzelne Fehler von redundanten Instanzen sofort zu mildern und gegen unkontrollierten Ressourcenverbrauch zu puffern. | Höhere Investitionen in die Überprovisionierung erhöhen die Resilienz. Das System wird während eines aktiven Fehlers weiterhin mit voller Leistungsfähigkeit arbeiten, bevor die Skalierungsvorgänge beginnen können, um den Fehler zu beheben. Ebenso können Sie das Risiko eines unerwarteten Ressourcenverbrauchs verringern, der Ihren geplanten Puffer beanspruchen könnte, um kritische Zeit für die Diagnose zu gewinnen, bevor Systemfehler oder eine aggressive Skalierung auftreten. |
Design für die Wiederherstellung
|
|
|---|
Selbst hochresiliente Systeme benötigen Notfallbereitschaftsansätze sowohl im Architekturentwurf als auch bei Arbeitsauslastungsvorgängen. Auf der Datenebene sollten Sie über Strategien verfügen, die den Zustand des Workloads im Falle von Datenbeschädigung reparieren können.
| Vorgehensweise | Nutzen |
|---|---|
| Haben Sie strukturierte, getestete und dokumentierte Wiederherstellungspläne , die den ausgehandelten Wiederherstellungszielen entsprechen. Die Pläne müssen nicht nur das System als Ganzes abdecken, sondern auch alle Komponenten. | Ein gut definierter Prozess führt zu einer schnellen Wiederherstellung , die negative Auswirkungen auf die Finanzen und den Ruf Ihres Unternehmens verhindern kann. Die Durchführung regelmäßiger Wiederherstellungsübungen testet den Prozess der Wiederherstellung von Systemkomponenten, Daten und Failover- und Failback-Schritten, um in Situationen Verwirrung zu vermeiden, in denen Zeit und Datenintegrität entscheidende Erfolgsfaktoren 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 zuletzt bekannten guten Zustand wieder in einen Arbeitszustand zu versetzen. Unveränderliche und transaktionskonsensierte Sicherungen stellen sicher, dass Daten nicht geändert werden können und dass die wiederhergestellten Daten nicht beschädigt sind. |
| Implementieren Sie automatisierte Selbstheilungsfunktionen im Design. | Diese Automatisierung reduziert Risiken von externen Faktoren wie menschlichem Eingreifen und verkürzt den Unterbrechungs-Fix-Zyklus. |
| Ersetzen Sie zustandslose Komponenten durch unveränderliche ephemerale Einheiten. | Das Erstellen ephemerer Einheiten, die Sie nach Bedarf drehen und zerstören können, bietet Wiederholbarkeit und Konsistenz. Verwenden Sie parallele Bereitstellungsmodelle, um den Übergang zu den neuen Einheiten inkrementell zu machen, wodurch Unterbrechungen minimiert werden. |
Entwurf für den Betrieb
|
|
|---|
Testen Sie Fehler frühzeitig und häufig im Entwicklungslebenszyklus, und bestimmen Sie die Auswirkungen der Leistung auf die Zuverlässigkeit. Für die Grundursachenanalyse und die Postmortems ist teamübergreifend ein gemeinsamer Einblick in den Abhängigkeitsstatus und in laufende Fehler erforderlich. Erkenntnisse, Diagnosen und Warnungen von observierbaren Systemen sind von grundlegender Bedeutung für effektives Vorfallmanagement und kontinuierliche Verbesserung.
| Vorgehensweise | Nutzen |
|---|---|
| Erstellen Sie feststellbare Systeme , die Telemetrie korrelieren können. | Überwachung und Diagnose sind wichtige Vorgänge. Wenn etwas fehlschlägt, müssen Sie wissen, dass er fehlgeschlagen ist, wenn er fehlgeschlagen ist und warum er fehlgeschlagen ist. Beobachtbarkeit auf Komponentenebene ist grundlegend, doch die aggregierte Beobachtbarkeit von Komponenten und korrelierten Nutzerflüssen bietet eine ganzheitliche Sicht auf den Gesundheitszustand. Diese Daten sind erforderlich, um Techniker*innen, die für die Websitezuverlässigkeit zuständig sind, die Priorisierung ihres Aufwands zur Behebung zu ermöglichen. |
| Vorhersage potenzieller Fehlfunktionen und anomaler Verhaltensweisen. Machen Sie mithilfe von priorisierter und umsetzbarer Warnungen aktive Zuverlässigkeitsfehler sichtbar. Investieren Sie in zuverlässige Prozesse und Infrastruktur, die zu einer schnelleren Selektierung führen. |
Site-Reliability-Engineers können sofort benachrichtigt werden, damit sie laufende Live-Site-Vorfälle mindern und potenzielle Fehler proaktiv beheben können, die durch vorausschauende Warnungen identifiziert werden, bevor sie zu Live-Site-Vorfällen werden. |
| Simulieren von Fehlern und Ausführen von Tests in Produktions- und Vorproduktionsumgebungen. | Es ist vorteilhaft, Fehler in der Produktion zu erleben, damit Sie realistische Erwartungen für die Wiederherstellung festlegen können. So können Sie Entwurfsentscheidungen treffen, die ordnungsgemäß auf Fehler reagieren. Außerdem können Sie die Schwellenwerte testen, die Sie für Geschäftsmetriken festlegen. |
| Erstellen Sie Komponenten unter Berücksichtigung der Automatisierung, und automatisieren Sie so viel wie möglich. | Die Automatisierung minimiert das Potenzial für menschliche Fehler und führt zu Konsistenz bei Tests, Bereitstellungen und Vorgängen. |
| Berücksichtigen Sie Routinevorgänge und deren Auswirkungen auf die Stabilität des Systems. | Die Workload kann laufenden Vorgängen unterliegen, z. B. Anwendungsrevisionen, Sicherheits- und Complianceüberwachungen, Komponentenupgrades und Sicherungsprozesse. Durch die Überprüfung dieser Änderungen wird die Stabilität des Systems sichergestellt. |
| Erfahren Sie kontinuierlich von Vorfällen in der Produktion. | Basierend auf den Vorfällen können Sie die Auswirkungen und Versäumnisse im Design und Betrieb bestimmen, die in der Vorproduktion möglicherweise unbemerkt bleiben. Letztendlich können Sie Verbesserungen basierend auf realen Vorfällen vorantreiben . |
Halte es einfach
|
|
|---|
Es ist oft, was Sie entfernen, anstatt was Sie hinzufügen, was zu den zuverlässigsten Lösungen führt. Die Einfachheit reduziert den Oberflächenbereich für die Steuerung, minimiert Ineffizienzen und potenzielle Fehlkonfigurationen oder unerwartete Interaktionen. Andererseits kann Übervereinfachung einen einzigen Fehlerpunkt einführen. Behalten Sie einen ausgewogenen Ansatz bei.
| Vorgehensweise | Nutzen |
|---|---|
| Fügen Sie Ihrer Architektur Nur Komponenten hinzu, wenn sie Ihnen dabei helfen, zielspezifische Geschäftswerte zu erzielen. Halten Sie den kritischen Pfad schlank. | Das Entwerfen für Geschäftsanforderungen 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 in der Codeimplementierung, Bereitstellung und in den Prozessen fest und dokumentieren diese. Identifizieren Sie Möglichkeiten, diese Standards mithilfe automatisierter Validierungen zu erzwingen. | Standards bieten Konsistenz und minimieren menschliche Fehler. Ansätze wie Standardbenennungskonventionen und Codestilführungslinien können Ihnen dabei helfen, Qualität aufrechtzuerhalten und Ressourcen während der Problembehandlung leicht zu identifizieren. |
| Bewerten Sie, ob theoretische Ansätze in pragmatisches Design übersetzt werden, das für Ihre Anwendungsfälle gilt. | Anwendungscode, der zu präzise ist, kann zu unnötigen Abhängigkeiten, zusätzlichen Vorgängen und schwierigen Wartungen führen. |
| Entwickeln Sie nur genügend Code. | Sie können Probleme vermeiden, die das Ergebnis ineffizienter Implementierungen sind, z. B. unerwartete Ressourcennutzungs-, Benutzer- oder Datenflussfehler und Codefehler. Umgekehrt sollten Zuverlässigkeitsprobleme zu Codeüberprüfungen führen, um sicherzustellen, dass Code stabil genug ist, um die Probleme zu behandeln. |
| Nutzen Sie die von der Plattform bereitgestellten Features und vordefinierten Ressourcen, die Ihnen helfen können, geschäftsziele effektiv zu erfüllen. | Dieser Ansatz minimiert die Entwicklungszeit. Außerdem können Sie sich auf bewährte Methoden verlassen , die mit ähnlichen Workloads verwendet wurden. |