Grundbegriffe

  • Failure
    Beobachtetes Fehlverhalten, System reagiert nicht wie erwartet
  • Error
    Inkorrekter interner Zustand (Nicht beobachtet)
  • Fault
    Physikalischer Defekt, Periodisch oder Dauerhaft
  • Fault Tolerance
    System fällt trotz Fault nicht aus.

Byzantinisch

Stammt aus der Geschichte, beschreibt böswilliges Verhalten.
Ein Byzantinischer Ausfall beschreibt willkürliche, zufällig falsche Antworten

Zusätzlich wird zwischen “Omissionsfehlern”, bei denen eine Handlung unterlassen wird und “Commissionsfehlern” unterschieden. Im zweiten Fall wird eine Handlung vorgenommen, aber nicht korrekt ausgeführt.

Fault Masking

Fehlertolerante Systeme müssen Fehler vor anderen Prozessen verbergen. Wichtigste Technik dazu ist Redundanz.

Triple Modular Redundancy

Jede Komponente wird dreifach umgesetzt, nach jeder Stufe sitzt ein Mehrheitsschalter. So kann der Ausfall einer jeder beliebigen Komponente maskiert werden.

Da dieser Einsatz vieler Redundanter Bauteile sehr teuer ist, wird es typischerweise nur bei sehr kritischen Systemen angewendet (Raumfahrt / Industrie)

Prozess-Elastizität

Prozesse werden in Gruppen repliziert. Nachrichten an eine Gruppe werden von allen Mitgliedern empfangen. (Typisch: Totally ordered Multicast)

Organisiert können diese Gruppen flach (symmetrisch) sein oder hierarchisch mit einem zentralen Koordinator.

k Fehlertoleranz

Um einen stillen Crash in Prozessen zu maskieren, sind Prozesse nötig.
Um einen byzantinischen Fehler zu maskieren, werden Prozesse gebraucht.

Two Army Problem

Mit unzuverlässiger Kommunikation ist ein allgemeiner Konsens unmöglich.

Byzantinische Generäle

Viele Prozesse müssen Konsens finden. Die Kommunikation ist verlustfrei, allerdings arbeiten ein Teil der Prozesse nicht korrekt.

Um einen Konsens erreichen zu können, müssen korrekt arbeiten. Dann kann in jeder Kombination von mehr als der Teilnehmer eine korrekte Mehrheitsentscheidung getroffen werden.

Zuverlässige Kommunikation

Zuverlässige Kommunikation ist der Schlüssel zur Fehlertoleranz. Verlässliche Übermittlung vereinfacht die Fehlerbehandlung.

Wiederherstellung

Nach einem Error soll das System selbst in einen korrekten Zustand zurückgeführt werden.
Dazu kann ein Rollback auf einen vergangenen Zustand verwendet werden, oder mit ‘Forward-Recovery’ in einen neuen, korrekten Zustand übergegangen werden.

Checkpointing

Der Einsatz von Checkpoints vereinfacht die Recovery, verwendet allerdings Speicherplatz und Koordination.

Independent Checkpointing

Prozesse Speichern ihren Zustand unabhängig voneinander. Die Implementierung ist hier sehr einfach, aber beim Rollback kann es zu einem Domino-Effekt kommen. Abhängige Prozesse müssen ggf. ebenfalls zurückrollen, eventuell sogar bis zum Anfang.

Koordinierte Checkpoints

Es wird ein global konsistenter Checkpoint erzeugt. Mit dem Algorithmus von Lamport können diese erzeugt werden.

Alternativ kann ein blockierendes 2 Phasen Modell verwendet werden. Dies vereinfacht das Erstellen der Checkpoints, blockiert aber alle Prozesse im Verlauf.

Lokale Checkpoints mit Message-Logging

Der Absturz eines Knoten kann lokal behoben werden, die eingegangenen Nachrichten zwischen Checkpoint und Crash können repliziert werden.
Um mit potentiell doppelt gesendeten Nachrichten keine Probleme zu verursachen, ist eine komplexere Wiederherstellungslogik notwendig.