Be Software Architecture Wise
Be Wise Apps

Read in English · Leer en español · Lire en français

Abschnitt 2.5 von 2.8 · Mittelstufe · 22 Min. Lesezeit

Verfügbarkeit und Zuverlässigkeit: Neunen, MTBF, MTTR und Fehlertoleranz

Videolektion

5 Min. · auf Englisch gesprochen, mit Untertiteln
Nur anhören (Audio)
Transkript lesen

In dieser Lektion geht es darum, einen Dienst am Laufen zu halten: wie man das Ziel präzise beschreibt, wie man es beziffert und wo sich der Aufwand eines Architekten am meisten lohnt.

Denken Sie an einen Laden an der Ecke. Verfügbarkeit bedeutet, wie oft die Tür offen ist, wenn Sie ankommen. Zuverlässigkeit bedeutet, ob die Kasse, sobald Sie drinnen sind, Ihren ganzen Einkauf lang funktioniert. Läden bleiben offen dank einer Ersatzkasse, einer zweiten Arbeitskraft und einem schnellen Weg, Probleme zu bemerken und zu beheben. Softwarearchitekten treffen die gleichen Arten von Entscheidungen.

Verfügbarkeit ist der Anteil der Zeit oder der Anfragen, in dem das System bereit ist. Zuverlässigkeit ist die Wahrscheinlichkeit, dass es über einen festgelegten Zeitraum korrekt und ohne Ausfall läuft. Das ist nicht dasselbe. Stellen Sie sich einen Dienst vor, der einmal pro Stunde abstürzt und in einer Sekunde neu startet. Seine Verfügbarkeit liegt bei neunundneunzig Komma neun sieben Prozent, was hervorragend aussieht. Aber die Chance, dass ein zweistündiger Batch-Job ohne Ausfall durchläuft, liegt nur bei etwa dreizehneinhalb Prozent. Für ein Zahlungsterminal zählt die Verfügbarkeit, für einen Operationsroboter die Zuverlässigkeit.

Drei weitere Begriffe sind wichtig. Eine Fehlerursache ist der Auslöser, etwa ein Bug im Datumscode. Sie kann jahrelang schlummern. Wird sie aktiviert, erzeugt sie einen Fehler: einen falschen internen Zustand. Erreicht der Fehler die Benutzer, wird er zum Ausfall. Jedes Glied dieser Kette ist ein Ansatzpunkt. Vorbeugende Taktiken verhindern, dass Fehlerursachen entstehen. Erkennende Taktiken wie Heartbeats und Health Checks bemerken Fehler früh. Und Taktiken zur Erholung wie Failover und Wiederholung verhindern, dass Fehler zu Ausfällen werden.

Verfügbarkeitsziele werden in Neunen angegeben. Rechnen Sie sie immer in zulässige Ausfallzeit um: eins minus die Verfügbarkeit, mal den Zeitraum. Drei Neunen, neunundneunzig Komma neun Prozent, erlauben etwa acht Komma sieben sechs Stunden pro Jahr oder dreiundvierzig Komma zwei Minuten pro Monat. Vier Neunen erlauben etwa zweiundfünfzig Komma sechs Minuten pro Jahr: nur vier Komma drei zwei Minuten pro Monat. Das ist weniger Zeit, als es dauert, einen Engineer zu alarmieren, zu wecken und herauszufinden, was nicht stimmt. Oberhalb von drei oder vier Neunen muss die Wiederherstellung also automatisch erfolgen.

Verfügbarkeit verknüpft zwei Mittelwerte: die mittlere Zeit zwischen Ausfällen, MTBF, und die mittlere Reparaturzeit, MTTR. Ein Bestellservice für Essenslieferungen fällt alle dreißig Tage aus, also alle siebenhundertzwanzig Stunden, und braucht vier Stunden für die Reparatur von Hand. Das sind neunundneunzig Komma vier fünf Prozent: etwa achtundvierzig Komma vier Stunden Ausfall pro Jahr. Option eins: die Zeit zwischen Ausfällen verdoppeln. Die Verfügbarkeit steigt auf neunundneunzig Komma sieben zwei Prozent, etwa vierundzwanzig Komma drei Stunden pro Jahr. Option zwei: Erkennung und Failover automatisieren und so die Reparaturzeit auf fünfzehn Minuten senken. Die Verfügbarkeit erreicht neunundneunzig Komma neun sieben Prozent, etwa drei Stunden pro Jahr. Nur Option zwei übertrifft das Ziel von drei Neunen. Ausfälle seltener zu machen, ist ein Kampf gegen die Physik. Schneller zu erholen, liegt größtenteils in der Hand des Architekten.

Reale Systeme sind Ketten. Braucht eine Anfrage die Webschicht, den App-Server und die Datenbank, müssen alle drei funktionieren. Sie sind in Reihe geschaltet, also multiplizieren sich ihre Verfügbarkeiten. Hier ergibt die Kette neunundneunzig Komma acht vier Prozent, etwa vierzehn Stunden Ausfall pro Jahr: weniger als jedes einzelne Teil. Fügen Sie nun einen zweiten App-Server parallel hinzu. Das Paar fällt nur aus, wenn beide gleichzeitig ausfallen; also multipliziert man ihre Nichtverfügbarkeiten. Die ganze Kette steigt auf neunundneunzig Komma neun vier Prozent, etwa fünf Komma drei Stunden pro Jahr. Aber nur, wenn die Kopien unabhängig ausfallen und das Failover wirklich funktioniert. Ein Standby, der nie getestet wurde, ist eine Hoffnung, keine Komponente.

Redundanz in einem Rechenzentrum rettet Sie nicht, wenn Sie das ganze Rechenzentrum verlieren. Disaster Recovery arbeitet mit zwei Zahlen vom Fachbereich. Das Recovery Time Objective, kurz RTO, ist die längste akzeptable Zeit, um den Dienst wiederherzustellen. Das Recovery Point Objective, kurz RPO, ist die größte Datenmenge, die Sie verlieren dürfen, gemessen in Zeit. Ein RPO von fünfzehn Minuten bedeutet, höchstens die Änderungen der letzten fünfzehn Minuten zu verlieren. Testen Sie Ihre Wiederherstellungen und messen Sie die Zeit. Ein Backup, das Sie nie wiederhergestellt haben, ist kein Backup. Schließlich macht ein Service Level Objective, kurz SLO, aus Verfügbarkeit ein Budget. Ein Monatsziel von neunundneunzig Komma neun Prozent erlaubt etwa dreiundvierzig Minuten Ausfall, die Teams für Releases und Experimente ausgeben können.

Der vollständige Abschnitt enthält die ganze Tabelle der Neunen, die Verfügbarkeitstaktiken und die zwei Formen von Redundanz. Als Nächstes geht es in Abschnitt zwei Punkt sechs um das Design für Veränderung. Bis gleich.

Was Sie wissen müssen

Vier Begriffe, die oft verwechselt werden

Benutzer erleben ein System entweder als funktionierend oder nicht. Architekten brauchen genauere Begriffe, denn jeder Begriff verweist auf eine andere Antwort im Design. Verfügbarkeit ist der Anteil der Zeit (oder der Anfragen), in dem das System bereit ist, seinen Dienst auf Anforderung zu erbringen. Zuverlässigkeit ist die Wahrscheinlichkeit, dass das System über einen festgelegten Zeitraum unter festgelegten Bedingungen korrekt und ohne Ausfall arbeitet. Fehlertoleranz ist die Fähigkeit, den Dienst weiter zu erbringen, obwohl ein Teil ausgefallen ist. Resilienz ist die umfassendere Fähigkeit, Störungen aufzufangen, den wesentlichen Dienst (vielleicht eingeschränkt) aufrechtzuerhalten und sich danach wieder auf den Normalzustand zu erholen.

ISO/IEC 25010:2023 ordnet Verfügbarkeit, Fehlertoleranz und Wiederherstellbarkeit zusammen mit Fehlerfreiheit (die den Begriff Reife von 2011 ersetzt hat) als Teilmerkmale der Zuverlässigkeit ein. Bass, Clements und Kazman behandeln Verfügbarkeit in Software Architecture in Practice als eigenes Qualitätsmerkmal, weil sie so viele Architekturentscheidungen bestimmt. Keine der beiden Sichtweisen ist falsch; nutzen Sie die, die dem Gespräch hilft, aber sagen Sie ausdrücklich, welchen Begriff Sie meinen.

Der Unterschied zwischen Verfügbarkeit und Zuverlässigkeit ist in der Praxis wichtig. Stellen Sie sich einen Dienst vor, der einmal pro Stunde abstürzt und in einer Sekunde neu startet. Seine Verfügbarkeit beträgt 3599 / 3600 = 99,97 %, was hervorragend aussieht. Seine Zuverlässigkeit über einen zweistündigen Batch-Job ist schlecht: Treten Ausfälle zufällig mit einer Rate von einem pro Stunde auf, liegt die Wahrscheinlichkeit, zwei Stunden ohne Ausfall zu laufen, bei e-2, etwa 13,5 %. Für ein Zahlungsterminal zählt die Verfügbarkeit; für eine lange wissenschaftliche Berechnung, einen Operationsroboter oder ein Flugzeug zählt die Zuverlässigkeit über die gesamte Mission.

Fehlerursache, Fehler und Ausfall

Die Dependability-Forschung (Avižienis, Laprie, Randell und Landwehr, 2004) trennt drei Begriffe, die die Alltagssprache vermischt. Eine Fehlerursache (Fault) ist die Ursache: ein Bug, eine defekte Festplatte, eine Fehlkonfiguration, ein abgelaufenes Zertifikat. Eine Fehlerursache kann jahrelang schlummern. Wird sie aktiviert, erzeugt sie einen Fehler (Error): einen Teil des internen Systemzustands, der falsch ist, etwa einen beschädigten Datensatz oder einen falschen Wert im Speicher. Erreicht der Fehler die Grenze des Dienstes, ist das Ergebnis ein Ausfall (Failure): Der Dienst, den die Benutzer erhalten, weicht davon ab, wie er sein sollte.

Bass, Clements und Kazman verwenden dieselbe Idee einfacher: Ein Ausfall ist eine Abweichung von der Spezifikation, die die Benutzer des Systems beobachten können, und die Ursache eines Ausfalls ist eine Fehlerursache. Für Architekten zählt, dass jedes Glied der Kette ein Ansatzpunkt ist. Sie können verhindern, dass Fehlerursachen entstehen (Code-Reviews, eine Komponente außer Betrieb nehmen, bevor sie verschleißt), Fehler erkennen, bevor sie sich ausbreiten (Validierung, Health Checks), und Fehler eindämmen oder maskieren, sodass sie nie zu Ausfällen werden (Redundanz, Wiederholungen, Transaktionen).

Die Kette und wo Taktiken ansetzen

Eine aktivierte Fehlerursache erzeugt einen Fehler, der zum Ausfall werden kann; Erkennen, Erholen und Vorbeugen setzen an verschiedenen Stellen anUrsachez. B. Bug im DatumscodeFehlerfalscher ZustandswertAusfallNutzer sehen FalschesaktiviertpropagiertVorbeugenAußerbetriebnahme,Transaktionen,VorhersagemodelleErkennenHeartbeat, Health Check,Monitoring, Sanity-Checks, VotingErholenRedundanz, Failover,Retry, Rollback,Graceful DegradationUrsachenvermeidenFehler frühfindenvor dem Nutzermaskieren/behebenTaktikfamilien nach Bass, Clements und Kazman, Software Architecture in Practice (4. Auflage, 2021)
Vorbeugende Taktiken verhindern, dass Fehlerursachen entstehen, erkennende Taktiken bemerken Fehler, und Taktiken zur Erholung verhindern, dass Fehler zu sichtbaren Ausfällen werden.

Die Neunen zählen

Verfügbarkeitsziele werden meist als Prozentsatz mit einer Anzahl von Neunen angegeben: 99,9 % sind drei Neunen. Es hilft, jedes Ziel in zulässige Ausfallzeit umzurechnen, denn ein Prozentsatz verschleiert, wie wenig Zeit Sie wirklich haben. Die Rechnung ist einfach: Ausfallzeit = (1 - Verfügbarkeit) x Zeitraum. Ein Jahr mit 365 Tagen hat 525.600 Minuten, also erlauben 99,9 % 0,001 x 525.600 = 525,6 Minuten, etwa 8,76 Stunden. Für einen Monat mit 30 Tagen (43.200 Minuten) sind es 43,2 Minuten.

Jede weitere Neun teilt das Kontingent durch zehn, während die Entwicklungskosten meist viel schneller steigen. Bei 99,99 % haben Sie etwa 4,3 Minuten pro Monat: weniger als die Zeit, die vergeht, bis jemand alarmiert ist, aufwacht, sich anmeldet und versteht, was nicht stimmt. Oberhalb von drei oder vier Neunen muss die Wiederherstellung daher automatisch erfolgen; Menschen sind zu langsam, um Teil der Schleife zu sein.

Zulässige Ausfallzeit für gängige Verfügbarkeitsziele (Jahr mit 365 Tagen, Monat mit 30 Tagen)

VerfügbarkeitPro JahrPro MonatPro WochePro Tag
99 % (zwei Neunen)3,65 Tage (87,6 h)7,2 Stunden1,68 Stunden (100,8 min)14,4 Minuten
99,9 % (drei Neunen)8,76 Stunden43,2 Minuten10,1 Minuten1,44 Minuten
99.95%4,38 Stunden21,6 Minuten5,04 Minuten43,2 Sekunden
99,99 % (vier Neunen)52,6 Minuten4,32 Minuten1,01 Minuten8,64 Sekunden
99,999 % (fünf Neunen)5,26 Minuten25,9 Sekunden6,05 Sekunden0,86 Sekunden

MTBF, MTTF und MTTR

Drei Mittelwerte verbinden Ausfälle und Reparaturen. Mean Time to Failure (MTTF) ist die durchschnittliche Zeit, die eine Komponente läuft, bevor sie ausfällt. Mean Time to Repair (MTTR) ist die durchschnittliche Zeit vom Ausfall bis zum wiederhergestellten Dienst (manche Organisationen lesen das R als „Recover“ oder „Restore“; die Idee ist dieselbe, aber sagen Sie, welche Uhr Sie verwenden: ab dem Ausfall, ab der Erkennung oder ab dem ersten Alarm). Mean Time Between Failures (MTBF) ist die durchschnittliche Zeit von einem Ausfall bis zum nächsten.

Die klassische Formel für den stationären Zustand lautet A = MTBF / (MTBF + MTTR). Genau genommen gilt für ein reparierbares System MTBF = MTTF + MTTR, und der exakte Ausdruck ist MTTF / (MTTF + MTTR): Betriebszeit geteilt durch Betriebszeit plus Ausfallzeit. Lehrbücher schreiben oft MTBF, wo sie die mittlere Betriebszeit meinen; wenn Reparaturen im Vergleich zur Zeit zwischen Ausfällen kurz sind, wie es meist der Fall ist, ist der Unterschied vernachlässigbar. Die Formel setzt einen langfristigen Mittelwert voraus und sagt nichts darüber, wie Ausfälle verteilt sind; deshalb passt sie gut zu einem Zuverlässigkeitsmaß und zu Perzentilen der Reparaturzeit.

Ausgearbeitetes Beispiel

Ausgearbeitetes Beispiel: Ist es günstiger, seltener auszufallen oder sich schneller zu erholen?

Ein Bestellservice einer Essensliefer-App fällt im Durchschnitt einmal alle 30 Tage aus (MTBF = 720 Stunden). Jeder Ausfall braucht 4 Stunden bis zur Reparatur, weil ein Engineer alarmiert werden, das Problem diagnostizieren und eine Datenbank von Hand wiederherstellen muss. Das Unternehmen will besser als 99,9 % sein.

Aktuelle Verfügbarkeit720 / (720 + 4) = 720 / 724 = 0,99448, also 99,45 %
Aktuelle Ausfallzeit pro Jahr(1 - 0,99448) x 8760 h = etwa 48,4 Stunden
Option 1: MTBF verdoppelnBessere Hardware und Tests; Ausfälle alle 60 Tage. A = 1440 / 1444 = 0,99723 (99,72 %), etwa 24,3 Stunden pro Jahr
Option 2: MTTR auf 15 Minuten senkenAutomatische Erkennung, ein Hot Standby und skriptgesteuertes Failover. A = 720 / 720,25 = 0,99965 (99,97 %), etwa 3,0 Stunden pro Jahr
Abgleich mit dem ZielNur Option 2 übertrifft 99,9 % (8,76 Stunden pro Jahr)

Ausfälle halb so oft halbierten die Ausfallzeit. Die Reparaturzeit um den Faktor 16 zu verkürzen, senkte die Ausfallzeit um etwa denselben Faktor und erreichte das Ziel.

Eine höhere MTBF kämpft gegen Physik und Komplexität: Festplatten, Netzwerke und Menschen lassen sich nicht perfekt machen. Eine niedrigere MTTR liegt größtenteils in der Hand des Architekten: Erkennung, Automatisierung, Redundanz, kleine umkehrbare Deployments. Deshalb konzentriert sich der moderne Betrieb auf die Wiederherstellung.

MTTR ist ein Mittelwert und verbirgt lange Ausläufer. Ein achtstündiger Ausfall unter vielen fünfminütigen bestimmt das ganze Jahr; verfolgen Sie daher die Verteilung der Incident-Dauern, nicht nur den Mittelwert.

Komponenten in Reihe und parallel

Reale Systeme sind Ketten von Teilen. Braucht eine Anfrage die Webschicht, den Anwendungsserver und die Datenbank, müssen alle drei funktionieren: Die Komponenten sind in Reihe geschaltet, und ihre Verfügbarkeiten multiplizieren sich. Da jeder Faktor unter eins liegt, ist das Produkt immer niedriger als das schwächste Glied. Zehn Komponenten mit je 99,9 % ergeben 0,99910 = 0,990, nur 99,0 %.

Genügt dagegen eine beliebige von mehreren identischen Kopien, sind die Kopien parallel geschaltet (Redundanz). Das Paar fällt nur aus, wenn alle Kopien gleichzeitig ausfallen; daher multipliziert man die Nichtverfügbarkeiten: Aparallel = 1 - (1 - A)n für n identische Kopien. Zwei Server mit je 99 % ergeben 1 - 0,01 x 0,01 = 99,99 %.

Reihe und parallel in Zahlen

In Reihe multipliziert sich die Verfügbarkeit; ein redundantes paralleles Paar erhöht die Verfügbarkeit dieser StufeA. Drei Komponenten in Reihe: jede muss funktionierenWebschicht99,99 %App-Server99,9 %Datenbank99,95 %0,9999 x 0,999 x 0,9995 = 0,9984 (99,84 %, etwa 14 h Ausfall pro Jahr)B. Dieselbe Kette mit zwei parallelen App-Servern: einer genügtWebschicht99,99 %App-Server 199,9 %App-Server 299,9 %Datenbank99,95 %Paar: 1 - (0,001 x 0,001) = 0,999999; Kette: 0,9994 (99,94 %, etwa 5,3 h pro Jahr)
Die schwächste Stufe zu verdoppeln, senkt die Ausfallzeit der ganzen Kette von etwa 14 Stunden pro Jahr auf etwa 5,3.

Ausgearbeitetes Beispiel

Ausgearbeitetes Beispiel: Wofür sollte das nächste Pfund ausgegeben werden?

Fortsetzung des Diagramms. Die Kette in Teil A erreicht 99,84 %. Welche Änderung bringt sie am nächsten an 99,99 %?

Einen zweiten App-Server hinzufügen0,9999 x 0,999999 x 0,9995 = 0,99940 (99,94 %): etwa 5,3 Stunden pro Jahr
Dann ein Datenbankreplikat mit Failover hinzufügenDatenbankpaar: 1 - 0,00052 = 0,99999975. Kette: 0,9999 x 0,999999 x 0,99999975 = 0,99990 (99,99 %): etwa 53 Minuten pro Jahr
Was das System jetzt begrenztDie einzelne Webschicht (99,99 %) verursacht fast die gesamte verbleibende Ausfallzeit

Die Rechnung setzt voraus, dass die Kopien unabhängig voneinander ausfallen. Zwei Server im selben Rack, an derselben Stromversorgung, mit demselben fehlerhaften Release oder beide abhängig von einem einzigen DNS-Anbieter teilen Common-Mode-Fehlerursachen und können gemeinsam ausfallen. Die realen Gewinne sind immer kleiner, als die Formel nahelegt.

Sie setzt außerdem voraus, dass das Failover sofort erfolgt und immer funktioniert. Ein Standby, der nie in einem echten Failover getestet wurde, ist eine Hoffnung, keine Komponente.

Eine nützliche Regel der SRE-Autoren von Google (Treynor, Dahlin, Rau und Beyer, 2017): Jede kritische Abhängigkeit sollte ungefähr eine Neun mehr bieten als der Dienst, der auf ihr beruht, oder der Dienst braucht einen Weg, ohne sie zurechtzukommen.

Verfügbarkeitstaktiken: erkennen, erholen, vorbeugen

Bass, Clements und Kazman gliedern Verfügbarkeitstaktiken in drei Familien. Sie sind Designoptionen, keine Checkliste, die vollständig abzuarbeiten ist; jede hat ihren Preis.

Die drei Familien von Verfügbarkeitstaktiken

  1. Fehlerursachen erkennenHeartbeat: Eine Komponente sendet regelmäßig eine Nachricht „Ich lebe“, und Stille löst eine Aktion aus. Ping/Echo: Ein Monitor fragt an und erwartet eine Antwort. Health Checks: ein Endpoint wie /health, den ein Load Balancer oder Orchestrator abfragt (ein Liveness-Check fragt „Läuft der Prozess?“, ein Readiness-Check fragt „Kann er jetzt Traffic bedienen?“). Monitoring von Fehlerraten und Latenz, Plausibilitätsprüfungen von Werten und Abstimmung (Voting) zwischen Replikaten, die dasselbe Ergebnis berechnen.
  2. Erholen: Vorbereitung und ReparaturRedundante Reserven in drei Temperaturen: Active-Active (alle Kopien bedienen Live-Traffic), Hot oder Warm Standby (eine synchron gehaltene, bereite Kopie) und Cold Spare (wird erst bei Bedarf gestartet). Failover leitet den Traffic auf eine gesunde Kopie um. Wiederholung (Retry) behandelt vorübergehende Fehlerursachen (mit Grenzen und Backoff, sonst werden Wiederholungen zur selbst verursachten Überlast). Rollback kehrt zu einem bekannten guten Zustand oder Release zurück. Graceful Degradation hält den Kerndienst ohne eine ausgefallene Funktion am Laufen: Der Shop nimmt weiter Bestellungen an, auch wenn die Empfehlungen nicht verfügbar sind.
  3. Erholen: WiedereingliederungEine reparierte Komponente sicher zurückholen: im Schattenmodus betreiben, ihren Zustand neu synchronisieren, in eskalierenden Stufen neu starten (erst ein Thread, dann ein Prozess, dann eine Maschine).
  4. Fehlerursachen vorbeugenAußerbetriebnahme (einen Knoten für Wartung oder einen geplanten Neustart aus der Rotation nehmen, bevor ein bekanntes Speicherleck zuschlägt), Transaktionen (Alles-oder-nichts-Aktualisierungen, damit ein Absturz keinen halb geschriebenen Zustand hinterlassen kann), Vorhersagemodelle (eine Festplatte austauschen, wenn ihre Fehlerzähler steigen) und Ausnahmevermeidung (strengere Typen, Eingabevalidierung).

Zwei Formen von Redundanz

Active-Passive-Redundanz hält einen Standby bereit, der übernimmt, wenn Heartbeats ausbleiben; Active-Active verteilt Live-Traffic auf beide KopienActive-Passive (Failover)Active-ActiveLoad BalancerPrimärbedient TrafficStandbyruhend o. warmerst nachFailoverHeartbeat alle 1 sStandby übernimmt nach3 AussetzernLoad BalancerKnoten A50 % TrafficKnoten B50 % TrafficHealth Checks entfernen defekteKnoten; jeder muss allein100 % der Last tragen
Active-Passive bezahlt für ungenutzte Kapazität und eine Failover-Lücke; Active-Active nutzt die ganze Kapazität, aber jeder Knoten muss den Verlust des anderen überstehen.

Die Wahl zwischen Active-Passive und Active-Active

Active-Passive ist leichter zu durchschauen, besonders bei zustandsbehafteten Komponenten wie einer relationalen Datenbank mit einem einzigen beschreibbaren Primärknoten. Die Kosten sind der ungenutzte Standby, eine Failover-Lücke (Erkennung plus Hochstufung, oft einige zehn Sekunden) und das Risiko, dass der Standby unbemerkt aus dem Takt geraten ist. Eine klassische Falle ist Split Brain: Das Netzwerk zwischen beiden bricht ab, jeder hält den anderen für tot, und beide nehmen Schreibvorgänge an. Dagegen hilft ein Quorum oder ein externer Schiedsrichter.

Active-Active nutzt die gesamte Kapazität und hat keinen Hochstufungsschritt, aber jeder Knoten muss so dimensioniert sein, dass er die volle Last tragen kann, wenn sein Partner ausfällt. Zwei Knoten mit je 70 % Auslastung werden bei Ausfall des einen mit 140 % belastet, und der Überlebende bricht zusammen: ein redundantes Design, das trotzdem ausfällt. Active-Active zwingt Sie außerdem, die Datenkonsistenz über Kopien hinweg zu lösen, was ein großes Thema für sich ist (siehe Konsistenzmodelle, CAP und PACELC).

Disaster Recovery: RTO und RPO

Redundanz innerhalb eines Rechenzentrums schützt Sie nicht davor, das ganze Rechenzentrum, eine Region, ein Cloud-Konto oder Ihre Daten durch Ransomware zu verlieren. Die Disaster-Recovery-Planung arbeitet mit zwei Zahlen, die vom Fachbereich kommen sollten, nicht von den Engineers. Das Recovery Time Objective (RTO) ist die längste akzeptable Zeit, um den Dienst nach einer Katastrophe wiederherzustellen. Das Recovery Point Objective (RPO) ist der größte akzeptable Datenverlust, gemessen in Zeit: Ein RPO von 15 Minuten bedeutet, dass Sie höchstens die Änderungen der letzten 15 Minuten verlieren dürfen.

Die beiden Zahlen führen zu sehr unterschiedlichen Designs und Kosten. Nächtliche Backups, die in eine andere Region kopiert werden, ergeben ein RPO von bis zu 24 Stunden und ein RTO von vielen Stunden (Terabytes wiederherzustellen dauert). Kontinuierliche asynchrone Replikation zu einem Warm Standby in einer anderen Region kann ein RPO von Sekunden und ein RTO von Minuten ergeben, bei vielleicht doppelten Infrastrukturkosten. Synchrone Replikation kann das RPO nahe null bringen, fügt aber jedem Schreibvorgang die Round-Trip-Zeit zwischen den Standorten hinzu. Cloud-Anbieter beschreiben eine Stufenleiter von Strategien: Backup and Restore, Pilot Light, Warm Standby und Multi-Site Active-Active, jede schneller und teurer als die vorige. Die Einzelheiten gehören zu Multi-Region und Disaster Recovery.

Unabhängig von der Strategie gilt: Ein Backup, das Sie nie wiederhergestellt haben, ist kein Backup. Testen Sie Wiederherstellungen regelmäßig und messen Sie die Zeit; die gemessene Wiederherstellungszeit ist Ihr echtes RTO.

Von Zielen zu SLIs, SLOs und SLAs

Der moderne Betrieb drückt Verfügbarkeit mit drei verwandten Begriffen aus, die in SLIs, SLOs und Error Budgets ausführlich behandelt werden. Ein Service Level Indicator (SLI) ist die Messung, zum Beispiel der Anteil der Checkout-Anfragen, die in weniger als 800 ms erfolgreich sind. Ein Service Level Objective (SLO) ist das interne Ziel für diese Messung über ein Zeitfenster, zum Beispiel 99,9 % über 30 Tage. Ein Service Level Agreement (SLA) ist ein Vertrag mit Kunden, der Folgen benennt, etwa Gutschriften, wenn ein Niveau verfehlt wird; es wird normalerweise lockerer angesetzt als das SLO, damit das Team gewarnt ist, bevor der Vertrag verletzt wird.

Das SLO macht aus Verfügbarkeit ein Budget. Ein monatliches SLO von 99,9 % erlaubt, dass 0,1 % der Anfragen fehlschlagen; bei 2 Millionen Anfragen pro Monat sind das 2000 fehlgeschlagene Anfragen oder etwa 43 Minuten Totalausfall. Teams geben dieses Error Budget für Risiken aus: Releases, Experimente, Migrationen. Ist es aufgebraucht, treten sie kürzer und investieren in Zuverlässigkeit. So verbinden sich die abstrakten Neunen dieses Abschnitts mit alltäglichen Entscheidungen.

Häufige Fehler

Neunen versprechen, ohne die Abhängigkeiten mitzuzählen: Ein Dienst mit 99,99 %, der auf einer einzigen Datenbank mit 99,9 % aufbaut, kann sein Ziel nicht erreichen. Redundanz hinzufügen, ohne gemeinsame Ursachen zu beseitigen (dasselbe Release, derselbe Konfigurations-Push, dasselbe Zertifikat, das um Mitternacht auf jedem Knoten abläuft). Verfügbarkeit innerhalb des Systems messen, wo alles grün aussieht, während Benutzer es wegen DNS oder eines Content Delivery Network nicht erreichen. Failover planen, aber nie proben; Chaos Engineering gibt es genau dafür, diese Pfade bewusst zu üben (Chaos Engineering). Schließlich: einer Zahl um ihrer selbst willen nachjagen. Ein Dienstplansystem, das während der Bürozeiten genutzt wird, braucht keine fünf Neunen, und das Geld ist anderswo besser angelegt.

Um Verfügbarkeit testbar zu machen, schreiben Sie sie als Szenario (Abschnitt 2.3): Fällt der primäre Datenbankserver während der Stoßzeiten aus, erkennt das System dies innerhalb von 10 Sekunden und nimmt innerhalb von 60 Sekunden wieder Bestellungen an, ohne eine bestätigte Bestellung zu verlieren. Jeder Teil dieses Satzes wird zu einer Designentscheidung und zu einem Test.

Prüfen Sie Ihr Verständnis

Wie viele Minuten Ausfallzeit erlaubt ein Ziel von 99,95 % in einem Monat mit 30 Tagen?

0,0005 x 43.200 = 21,6 Minuten.

Zwei unabhängige Load Balancer haben je 99,5 % Verfügbarkeit, und jeder kann den gesamten Traffic tragen. Wie hoch ist die Verfügbarkeit des Paars?

1 - (0.005 x 0.005) = 1 - 0.000025 = 99.9975%.

Warum bringt ein zweiter, identischer Server womöglich viel weniger, als die Parallelformel vorhersagt?

Weil die Kopien gemeinsame Ausfallursachen haben können, etwa dasselbe Release, dieselbe Konfiguration, Stromversorgung, dasselbe Netzwerk oder dieselbe Abhängigkeit, sodass sie nicht unabhängig voneinander ausfallen; außerdem kann das Failover selbst langsam oder defekt sein.

Die Backups eines Teams laufen alle 6 Stunden, und eine vollständige Wiederherstellung dauert 3 Stunden. Wie hoch sind ihr effektives RPO und RTO im ungünstigsten Fall?

Ein RPO von bis zu 6 Stunden verlorener Daten und ein RTO von mindestens 3 Stunden plus der Zeit, um die Katastrophe zu erkennen und die Wiederherstellung zu beschließen.

Weiter · 2.6Änderbarkeit und DeploybarkeitWie man Veränderung spezifiziert und darauf hin entwirft: was sich ändert, wer es ändert und wann, Taktiken gegen Folgeänderungen, Testbarkeit durch Steuerbarkeit und Beobachtbarkeit, Deploybarkeit und die DORA-Metriken für die Auslieferung.Weiter →

Quellen und weiterführende Literatur

Haben Sie eine Frage zu diesem Abschnitt? ArchitectBot, der KI-Lernassistent des Kurses, antwortet zuerst aus dem Kurs.

Fragen: „Unser Checkout hängt von einem Zahlungsanbieter mit einem SLA von 99,9 % ab. Wie können wir unseren eigenen Kunden 99,95 % Verfügbarkeit bieten?“