1-fach - KBS TU

Werbung
Verteilte Algorithmen
Fehlertoleranz
PD Dr.-Ing. Gero Mühl
Kommunikations- und Betriebssysteme
Fakultät für Elektrotechnik u. Informatik
Technische Universität Berlin
Übersicht
> Einführung
> Maskierende Fehlertoleranz
> Konsens und verwandte Problem
> Nichtmaskierende Fehlertoleranz
> Selbststabilisierung
G. Mühl
VA / Fehlertoleranz
2
Fehlertoleranz (Fault Tolerance)
> Kein (nicht-triviales) System ist fehlerfrei!
> Berücksichtigung möglicher Fehler absolut notwendig!
> In großen Systemen (z.B. dem Internet) werden stets
einige Komponenten fehlerhaft arbeiten
> Einfache Motivation: Alle Rechner eines Systems müssen
gleichzeitig verfügbar sein (Reihenschaltung)
>
>
>
>
G. Mühl
1 Rechner
10 Rechner
100 Rechner
1000 Rechner
 System 1% der Zeit nicht verfügbar
 System 10% der Zeit nicht verfügbar
 System 63% der Zeit nicht verfügbar
 System 99.99% der Zeit nicht verfügbar
VA / Fehlertoleranz
3
Grundlegende Begriffe
> Störung (fault)
> Auslösendes Ereignis, beispielsweise
verursacht, durch externe Störungen oder
durch Abnutzung
Störung
> Fehler (error)
> Interner Systemzustand, der nicht der
Spezifikation entspricht, verursacht durch
eine Störung
> Ausfall (failure)
> System erbringt nach außen nicht mehr den
Dienst, den es erbringen sollte, verursacht
durch einen Fehler
G. Mühl
Fehler
Ausfall
VA / Fehlertoleranz
4
Klassifizierung von Fehlern – Gutmütige Fehler
> „Crash Failure“: Ein Knoten fällt plötzlich aus, d.h. bis zum
Zeitpunkt des Fehlers verhält er sich spezifikationsgerecht,
danach werden keine Aktionen mehr durchgeführt
> Auch als „Halting Failure“ oder „Fail Stop“ etc. bezeichnet. Oft
bedeuten diese Begriffen aber zusätzlich, dass alle nicht
ausgefallenen Knoten den Ausfall sicher feststellen können
> „Omission Failure“: Manche Aktionen werden nicht ausgeführt
> „Timing Failure“: Im Prinzip spezifikationsgerechtes Verhalten,
aber manche Aktionen werden zu spät ausgeführt
> Allen gemeinsam: Der fehlerhafte Prozess führt keine Aktionen
aus, die ein korrekter Prozess nicht machen würde
⇒ Nicht immer realistisch!
G. Mühl
VA / Fehlertoleranz
5
Klassifizierung von Fehlern – Bösartige Fehler
> Häufig als Byzantinische Fehler bezeichnet
(Lamport, 1982)
> Fehlerhafte Prozesse können beliebige Aktionen
ausführen und dabei auch untereinander kooperieren
> Z.B. beliebige Berechnungen durchführen und beliebige
Nachrichten senden
> Häufig auch etwas eingeschränktes Modell
> Z.B. fehlerhafte Prozesse können beliebige mit polynomieller
Komplexität berechenbare Aktionen ausführen (also z.B.
keine digitalen Signaturen von korrekten Knoten fälschen!)
> Modell umfasst alle beliebigen Arten von Fehlern, z.B.
auch gezielte Angriffe von außen auf ein System
G. Mühl
VA / Fehlertoleranz
6
Paradigmen der Fehlertoleranz
> Maskierende Fehlertoleranz (masking fault tolerance)
> Ziel: Systemausfall möglichst verhindern
> Nichtmaskierende Fehlertoleranz
(non-masking fault tolerance)
> System darf teilweise oder zeitweise ausfallen
> Besser als ein vollständiger und / oder permanenter Ausfall
G. Mühl
VA / Fehlertoleranz
7
Maskierende Fehlertoleranz
> Notwendig, wenn ein (auch temporäres) Versagen des
Systems inakzeptable Folgen hätte
> Z.B. Tod von Menschen oder hohe finanzielle Verluste
> Sinnvoll auch bei vielen anderen Anwendungen
> Sicherheit und Lebendigkeit sicherstellen!
> Beispiel Autobremsen: Getrennte Bremskreisläufe für
rechtes Vorderrad und linkes Hinterrad sowie für linkes
Vorderrad und rechtes Hinterrad
G. Mühl
VA / Fehlertoleranz
8
Maskierende Fehlertoleranz
>
>
>
>
Benötigt stets Redundanz zur Umsetzung
Ist stets nur für dedizierte Fehler möglich
Kann nie alle möglichen Fehler berücksichtigen
Ist nur dann erfolgreich, wenn lediglich ein begrenzter Teil
der Komponenten fehlerhaft ist
> Wie groß der fehlerhafte Anteil der Komponenten sein
darf, ist abhängig vom Fehlermodell
G. Mühl
VA / Fehlertoleranz
9
Redundanz im Raum bzw. in der Zeit
> Redundanz im Raum:
Mehrfache Auslegung von Komponenten
> Beispiel: Ein Server hat mehrere unabhängige Netzteile
> Einzelnes, funktionsfähiges Netzteil ausreichend
> Fehlerhafte Netzteile werden im Betrieb ausgetauscht
> Redundanz in der Zeit:
Mehrfache Durchführung von Aktionen
> Beispiel: Pakete werden mehrmals hintereinander mittels
eines unzuverlässigen Netzwerks übertragen; aus diesen
Duplikaten wird (falls möglich) ein fehlerfreies Paket erzeugt
G. Mühl
VA / Fehlertoleranz
10
Aktive und Passive Replikation
> Aktive Replikation
> Alle Replikate arbeiten produktiv mit
> Z.B. Augen, Triebwerke, Bremssysteme, ...
> TMR (Triple Modular Redundancy)
A1
A2
A3
x
y
Voter
x
x
> Passive Replikation
> Replikate treten nur im Fehlerfall in Aktion (primary/backup)
> Z.B. Ersatzreifen (keine Maskierung), Notstromaggregat, ...
G. Mühl
VA / Fehlertoleranz
11
Fehlertoleranz durch redundante Komponenten
> k-Zuverlässigkeit eines Systems in Bezug auf eine
Komponente, die n-fach vorhanden ist: System kann Ausfall von
bis zu k der n Instanzen der Komponenten tolerieren
> Nicht-byzantinische Fehler
> System mit einer n-fach vorhandenen Komponente
ist (n – 1)-zuverlässig in Bezug auf diese Komponente
> Byzantinische Fehler
> Annahme: korrekte Ausgabe kann eindeutig durch einen
hochzuverlässigen Voter aus den n Ausgaben bestimmt werden
> System mit einer n-fach vorhandenen Komponente ist
-zuverlässig in Bezug auf diese Komponente
G. Mühl
VA / Fehlertoleranz
12
Beispiel: 1–Zuverlässigkeit
> Betrachte File Server S mit Operationen read() und write()
> Nicht-byzantinische Fehler
> S schickt bei read() entweder richtigen Inhalt oder gar nichts
> Realisierung mit zwei Servern S1 und S2
> write( ): an beide Server
> read( ): wenn S1 nicht antwortet dann S2
auch möglich: S1 und S2 fragen; 1. Antwort verwenden
> Byzantinische Fehler
> S schickt bei read( ) entweder den richtigen Inhalt oder einen
falschen Inhalt oder gar nichts
> Realisierung mit drei Servern S1, S2 und S3
> write( ): an alle drei Server
> read( ): an alle drei Server, Mehrheitsentscheid beim Client
G. Mühl
VA / Fehlertoleranz
13
Beispiel: N-Version Programming
> Anwendung wird von unabhängigen Programmierteams
mehrfach entwickelt
> Ergebnisse der Module werden zur Laufzeit durch
Mehrheitsentscheid bewertet
> Probleme
> Vergleich von Ergebnissen mit zulässiger Ungenauigkeit
(z.B. Ergebnis einer numerischen Approximation)
> Vergleich bei mehreren möglichen korrekten Lösungen
(z.B. Nullstellen eines Polynoms)
> Entwicklung häufig nicht wirklich „unabhängig“
> …
G. Mühl
VA / Fehlertoleranz
14
Nichtmaskierende Fehlertoleranz
> Anwendbar, wenn ein teilweises oder temporäres
Versagen des Systems/der Komponente akzeptabel ist
> 1. Mögliches Ziel: Bei einem Fehler, das System in einen
sicheren Zustand bringen (fail safe)
> Sicherheit gewährleisten
> Beispiel Ampelsteuerung: Bei einem Fehler der
Ampelsteuerung werden alle Ampeln auf Rot geschaltet
> Beispiel mechanisches Haltesignal für Züge:
Beim Reißen des Zugseiles fällt der Arm des Signals in die
Stellung „Halten!“
G. Mühl
VA / Fehlertoleranz
15
Nichtmaskierende Fehlertoleranz
> 2. Mögliches Ziel: Bei einem Fehler, das System mit
eingeschränkter Funktionalität weiter betreiben
(graceful degradation)
> Sicherheit und eingeschränkte Lebendigkeit gewährleisten
> Beispiel Servolenkung: Bei Ausfall der Servopumpe ist das
Lenken weiterhin möglich, allerdings nur mit größerem
Kraftaufwand
G. Mühl
VA / Fehlertoleranz
16
Nichtmaskierende Fehlertoleranz
> 3. Mögliches Ziel: Bei einem Fehler, das System so
umkonfigurieren, dass es wieder korrekt arbeitet
> Sicherheit nach Rekonfiguration (eventual safety) wieder
gewährleisten
> Lebendigkeit ist nicht betroffen, wenn die Rekonfiguration
nur eine beschränkte Zeit dauert
> Beispiel Kommunikation über mehrere hintereinander
geschaltete Strecken: Bei Ausfall einer oder mehrerer
Strecken, wird ein Alternativroute ohne Verwendung der
ausgefallenen Strecken aufgebaut
G. Mühl
VA / Fehlertoleranz
17
Maskierende Fehlertoleranz:
Konsens und verwandte Probleme
Konsens und verwandte Probleme
> Byzantinische Generäle (Byzantine generals)
> Ein Wert wird von einem ausgezeichneten Prozess vorgegeben
1. Alle korrekten Prozesse einigen sich auf den gleichen Wert (IC1)
2. Ist der vorgebende Prozess fehlerfrei, erfolgt die Einigung auf
dessen Wert (IC2)
> Interaktive Konsistenz (interactive consistency)
> Von jedem Prozess wird ein Wert vorgegeben
1. Alle korrekten Prozesse einigen sich auf den gleichen Wertevektor
2. Die Vorgabewerte fehlerfreier Prozesse werden in dem
Wertevektor richtig wiedergegeben
> Konsens (consensus)
> Von jedem Prozess wird ein Wert vorgegeben
1. Alle korrekten Prozesse einigen sich auf den gleichen Wert
2. Wenn alle korrekten Prozesse den gleichen Wert vorgeben,
einigen sich alle auf diesen Wert
G. Mühl
VA / Fehlertoleranz
19
Agreement vs. Consensus vs. Consistency
> Die drei Problemstellungen können ineinander überführt werden!
> Siehe auch Coulouris, Seiten 452-455
Byzantinische
Generäle
Verteilung des
Initialwerts an alle
Jeder Knoten startet
Instanz des Algorithmus
Berechnung aus
gemeinsamen Vektor
Konsensus
G. Mühl
Interaktive
Konsistenz
VA / Fehlertoleranz
20
Byzantinische Generäle  Interaktive Konsistenz
> Lösung für die byzantinischen Generäle vorhanden, für
Interaktive Konsistenz gesucht
> Jeder Knoten startet eine Instanz des Algorithmus für die
byzantinischen Generäle mit seinem Wert
> Jeder fehlerfreie Knoten nimmt als i-te Komponente seines
Ergebnisvektors, den Wert, den er als Lösung für die
byzantinischen Generäle mit Prozess Pi als Anführer erhält
> Die Ergebnisvektoren der Knoten sind eine korrekte Lösung
des Problems der interaktiven Konsistenz
G. Mühl
VA / Fehlertoleranz
21
Interaktive Konsistenz  Konsens
> Lösung für Interaktive Konsistenz vorhanden, für Konsens
gesucht
> Die Knoten bestimmen eine Lösung für die interaktive
Konsistenz
> Jeder Knoten gibt dabei den Wert vor, den er auch für den
Konsens vorschlagen würde
> Dann bestimmt jeder Knoten aus seinem Ergebnisvektor
mittels der Mehrheitsfunktion einen Wert; falls keine
Mehrheit vorhanden ist, nimmt er den Default-Wert
> Die aus den Werten der Knoten gebildete Lösung ist eine
korrekte Lösung des Konsensproblems
G. Mühl
VA / Fehlertoleranz
22
Konsens  Byzantinische Generäle
> Lösung für Konsens vorhanden, für byzantinische
Generäle gesucht
> Der Initialwert wird vom Anführer an alle Leutnants und an
sich selber verteilt
> Dann wird eine Lösung des Konsensproblems unter allen
Generälen bestimmt
> Jeder Leutnant hat danach einen Konsenswert. Die
Konsenswerte aller Leutnants bilden zusammen eine
korrekte Lösung des Problems der byzantinischen Generäle
G. Mühl
VA / Fehlertoleranz
23
Byzantinische Generäle
> Lamport, Shostak, and Pease, 1982
> n > 3 Generäle, m davon sind Verräter
(verursachen byzantinische Fehler)
> Einer der Generäle ist der Anführer
(commanding general) und gibt einen
Wert v ∈ {0, 1} vor
> Die anderen Generäle (lieutenant
generals) sollen den Befehl des
Anführers ausführen
> Mindestens 1 Leutnant ist loyal
(fehlerfrei)
> Auch Anführer kann Verräter sein
> Frage: Zusammen angreifen (v = 1)
oder abwarten (v = 0)?
G. Mühl
Anführer
Verräter
VA / Fehlertoleranz
24
Byzantinische Generäle – Annahmen
> Synchrones Systemmodel
> Jeder Prozess ist mit jedem anderem direkt verbunden
 vollständige Vermaschung
> Nachrichten
>
>
>
>
>
G. Mühl
gehen nicht verloren
werden nicht dupliziert
kommen wie gesendet an
können nicht fälschungssicher signiert werden
erlauben die Bestimmung der Identität des Absenders
 oral messages
VA / Fehlertoleranz
25
BG – Algorithmus für m = 1
1. Der Anführer nennt den anderen seinen Wert (0 oder 1)
2. Dann teilt jeder General jedem anderen General den
Wert mit, den er vom Anführer erhalten hat
3. Jeder der Generäle trifft aus seinen erhaltenen Werten
eine Mehrheitsentscheidung
> Achtung: Ein fehlerhafter Anführer oder General kann
schicken, was er will!
G. Mühl
VA / Fehlertoleranz
26
BG – Versagen des Algorithmus für n = 3 und m = 1
1. Fall: Anführer ist fehlerhaft  Gute Generäle erhalten {a, b}
2. Fall: Rechter General ist fehlerhaft  Linker General erhält {a, b}
3. Fall: Linker General ist fehlerhaft  Rechter General erhält {a, b}
Anführer: 0
Leutnants: 1, 2
1. Fall
2. Fall
0:a
G. Mühl
0:b
Es gilt a ≠ b !
3. Fall
0:a
0:a
0:b
0:b
1:0:a
1:0:a
1:0:a
2:0:b
2:0:b
2:0:b
VA / Fehlertoleranz
27
BG – Versagen des Algorithmus für n = 3 und m = 1
> Der linke General kann den 1. und 2. Fall nicht
unterscheiden. Daher muss er den vom Anführer
vorgegebenen Wert a wählen, um IC2 zu erfüllen
> Der rechte General kann den 1. und 3. Fall nicht
unterscheiden. Daher muss er den vom Anführer
vorgegebenen Wert b wählen, um IC2 zu erfüllen
> Dies bedeutet aber, dass im 1. Fall die beiden Generäle
unterschiedliche Werte wählen. Daher ist IC1 verletzt
⇒ Widerspruch
> Für n = 3 und m = 1 ist keine Lösung möglich!
> Dieser Resultat lässt sich verallgemeinern auf:
Für n ≤ 3m ist keine Lösung möglich!
G. Mühl
VA / Fehlertoleranz
28
Byzantinische Generäle für n = 4 und m = 1
> Einfachster Fall mit n ≥ 3m + 1
1. Fall: Anführer ist fehlerhaft
> Jeder General erhält {a, a, b} und entscheidet sich für a
0:a
0:b
0:a
1:0:a
2:0:a
2:0:a
Anführer: 0
Leutnants: 1, 2, 3
Es gilt a≠ b !
3:0:b
3:0:b
1:0:a
G. Mühl
VA / Fehlertoleranz
29
Byzantinische Generäle für n = 4 und m = 1
2. Fall: Ein General ist fehlerhaft
> Linker General erhält {a, a, b} und entscheidet sich für a
> Mittlerer General erhält {a, a, b} und entscheidet sich für a
0:a
0:a
0:a
1:0:a
2:0:a
2:0:a
3:0:b
Es gilt a ≠ b !
3:0:b
1:0:a
G. Mühl
VA / Fehlertoleranz
30
Byzantinische Generäle
> Algorithmus kann auf größere m verallgemeinert werden,
durch eine rekursive Ausführung des Algorithmus
> Der Algorithmus benötigt m + 1 Runden (dies ist minimal!)
⇒ Einheitszeitkomplexität m + 1
> Bei m fehlerhaften Prozessen ist Agreement möglich,
wenn es mindestens 2m + 1 korrekte Prozesse gibt
⇒ Es muss gelten: n ≥ 3m + 1 (Die Schranke ist also hart!)
⇒ Mehr als 2 / 3 aller Prozesse müssen korrekt arbeiten
G. Mühl
VA / Fehlertoleranz
31
Rekursiver Algorithmus OM für Oral Messages
Initial action at commander:
OM(m, 0, {1, …, n - 1}, v);
Initial action at lieutenant L: ML={}
PROC OM(m, C, G, t) {
FOREACH L in G DO
SEND (m, G, C + ":" + t ) TO L;
END
}
{Message (m, G,
IF (m, G, t)
ML := ML ∪
IF m != 0
FI
t) is received by lieutenant L}:
is pending THEN
t;
THEN OM(m - 1, L, G \ {L}, t); FI
{Lieutenant P has received all messages}:
v:=tree_majority(ML);
G. Mühl
VA / Fehlertoleranz
32
Rekursionsbaum für n = 4 und m = 1
0
1. Runde
1
2
3
4
2. Runde
2
G. Mühl
3
4
1
2
4
1
2
4
1
2
3
VA / Fehlertoleranz
33
Byzantinische Generäle – Nachrichtenkomplexität
G. Mühl
>
>
>
>
>
Eine Instanz von OM(m) startet (n – 1) Instanzen von OM(m – 1)
Jede Instanz von OM(m – 1) startet (n – 2) Instanzen von OM(m – 2)
Jede Instanz von OM(m – 2) startet (n – 3) Instanzen von OM(m – 3)
…
Jede Instanz von OM(1) startet (n – m) Instanzen von OM(0)
>
>
>
>
>
>
Jede Instanz von OM(m) verschickt (n – 1) Nachrichten
Jede Instanz von OM(m – 1) verschickt (n – 2) Nachrichten
Jede Instanz von OM(m – 2) verschickt (n – 3) Nachrichten
…
Jede Instanz von OM(1) verschickt (n – m) Nachrichten
Jede Instanz von OM(0) verschickt (n – 1 – m) Nachrichten
VA / Fehlertoleranz
34
Byzantinische Generäle – Nachrichtenkomplexität
>
>
>
>
>
1. Runde:
2. Runde:
3. Runde:
…
(m+1)-te R.:
1 Instanz mit je n – 1 Nachrichten
n – 1 Instanzen mit je n – 2 Nachrichten
(n – 1)(n – 2) Instanzen mit je n – 3 Nachrichten
(n – 1)! / (n – 1 – m)! Instanzen
mit je n – 1 – m Nachrichten
> Ableitung der Nachrichtenkomplexität
G. Mühl
VA / Fehlertoleranz
35
Byzantinische Generäle – Nachrichtenkomplexität
> n = 4, m = 1
> 3 + 3 · 2 = 3 + 6 = 9 Nachrichten
> n = 7, m = 2
> 6 + 6 · 5 + 6 · 5 · 4 = 156 Nachrichten
> n = 10, m = 3
> 9 + 9 · 8 + 9 · 8 · 7 + 9 · 8 · 7 · 6 = 3.609 Nachrichten
> n = 13, m = 4
> 13 + 13 · 12 + 13 · 12 · 11 + 13 · 12 · 11 · 10 + 13 · 12 · 11 ·
10 · 9 = 108.384 Nachrichten
G. Mühl
VA / Fehlertoleranz
36
Nachrichtenbaum / Baummehrheitsfunktion
> Jeder General bildet einen Nachrichtenbaum aus den
Nachrichten, die er empfangen hat
> Hierfür ordnet er die empfangenen Nachrichten
entsprechend des Postfixes ihres Nachrichtenpfades
> Wiederholte Mehrheitsbildung, bis sich ein einzelner Wert
ergibt, nach folgender Methode
> Für jeden Knoten direkt oberhalb der Blätter wird die
Mehrheit gebildet aus seinem Wert und den Werten der
unter ihm liegenden Blätter
G. Mühl
VA / Fehlertoleranz
37
Nachrichtenbaum für General 1 und n = 7, m = 2
0:a
Postfix 2:0
3:0:a
2:0:a
4:0:a
5:0:b
6:0:b
2:5:0:b
3:2:0:a
2:3:0:a
4:2:0:a
4:3:0:a
5:2:0:b
6:2:0:b
G. Mühl
2:4:0:a
3:4:0:a
5:3:0:b
6:3:0:b
2:6:0:b
6:5:0:b
3:5:0:b
5:4:0:b
3:6:0:b
4:5:0:b
6:4:0:b
4:6:0:b
5:6:0:b
VA / Fehlertoleranz
38
Nachrichtenbaum für General 1 und n = 7, m = 2
0:a
a
a
a
b
b
Diese Abbildung zeigt den Nachrichtenbaum
der vorigen Folie nach der 1. Mehrheitsbildung.
G. Mühl
VA / Fehlertoleranz
39
Nachrichtenbaum für General 1 und n = 7, m = 2
a
Diese Abbildung zeigt den Nachrichtenbaum
der vorigen Folie nach der 2. Mehrheitsbildung.
G. Mühl
VA / Fehlertoleranz
40
Byzantinische Generäle – Signed Messages
> Können Nachrichten fälschungssicher signiert werden
(signed messages), dann kann Agreement bei beliebig
vielen fehlerhaften Prozessen erreicht werden
> Voraussetzung bisher: Synchrones System
> "In einem asynchronen System ist kein Agreement möglich."
Fisher et al., 1985
> Viele weitere (theoretische) Arbeiten zu diesem Thema
mit den vielfältigsten Annahmen
G. Mühl
VA / Fehlertoleranz
41
Nicht-Maskierende Fehlertoleranz:
Selbststabilisierung
Selbststabilisierende Systeme
„We call the system "self-stabilizing" if and only if, regardless
of the initial state […], the system is guaranteed to find itself
in a legitimate state after a finite number of moves.“
Dijkstra, 1974
Legitimer
Zustand
Initialer
Zustand
G. Mühl
VA / Fehlertoleranz
43
Nachweis der Selbststabilisierung
> Menge aller Zustände Z
> Menge der legitimen Zustände L ⊆ Z
> Zu zeigen: Konvergenz und Abgeschlossenheit
Z
L
> Konvergenz: Startend von einem Zustand aus Z \ L wird nach
einer beschränkten Zahl von Schritten ein Zustand in L erreicht
> Konstruiere eine Funktion t (Terminierungsfunktion) von Z nach ℕ,
die mit jedem Schritt abnimmt und am Ende mit t = 0 die
Stabilisierung anzeigt
> Abgeschlossenheit: Startend in einem Zustand aus L ist jeder
Folgezustand wieder in L
> Nachweis in der Regel durch eine Invariante
G. Mühl
VA / Fehlertoleranz
44
Erholung von transienten Fehlern
> Selbststabilisierende Systeme erholen sich von beliebigen transienten
Fehlern, wenn genügend lange Zeit keine neuen Fehler auftreten
> Der Zustand nach dem Ende des letzten noch wirkenden Fehlers ist der
betrachtete „initiale“ Zustand  Erholung garantiert
> Die Klasse der transienten Fehler beinhaltet unter anderem
> Temporäre Netzwerkfehler
> Den Absturz und anschließenden Neustart von Prozessen
> Die willkürliche Korruption von Datenstrukturen
> Beachte: Nichtselbststabilisierende Systeme fallen auch nach
transienten Fehlern eventuell permanent aus!
> Beliebiger Teil der Ressourcen kann von Fehlern betroffen sein
> Ausnahme: Programmcode und Daten im ROM werden nicht korrumpiert
G. Mühl
VA / Fehlertoleranz
45
Selbststabilisierende Systeme – Eigenschaften
> Brauchen nicht initialisiert zu werden, da sie aus jedem
Startzustand einen legalen Zustand erreichen
> Tolerieren beliebige transiente Fehler mit einem einheitlichen
Mechanismus
> Können nicht sicher wissen, ob sie stabilisiert sind
> Dürfen nicht terminieren
> Passen sich ggf. an dynamische Änderungen der Topologie an
> Brauchen Fehler nicht notwendigerweise zu detektieren, um
sich von ihnen zu erholen
> Bieten effiziente Lösungen für viele Probleme
> Informationsverteilung, Wechselseitiger Ausschluss,
Spannbaumkonstruktion, Auswahl, …
G. Mühl
VA / Fehlertoleranz
46
Komposition von Algorithmen
> Herkömmliche Komposition von Algorithmen A und B
> Hintereinanderausführung von A und B
> B wird gestartet, wenn A terminiert ist
> Die Ausgabe von A dient als Eingabe für B
A
B
G. Mühl
VA / Fehlertoleranz
47
Komposition von Algorithmen
> Komposition selbststabilisierender Algorithmen
> Gleichzeitige Ausführung von A und B
> Wenn A stabilisiert hat, wird danach auch B stabilisieren
> Voraussetzung: B schreibt keine Daten, die A liest
> Stabilisierungszeit der Komposition ist die Summe der
Stabilisierungszeiten der einzelnen Algorithmen und
etwaiger Verzögerungen
A
A beginnt zu
stabilisieren
A ist stabilisiert
B
B beginnt zu
stabilisieren
G. Mühl
B ist stabilisiert
VA / Fehlertoleranz
48
Selbst-Stabilisierender Token Ring (Dijkstra, 1974)
> n + 1 Prozesse sind in einem unidirektionalen Ring angeordnet
> Jeder Prozess kann einen von k Zuständen annehmen (k > n)
 Variable s ∈ {0, …, k - 1}
> Jeder Prozess kann auf den Zustand seines linken Nachbarn
durch eine gemeinsame Variable left zugreifen
> Jeder Prozess, der ständig ziehen kann, zieht auch irgendwann
ON bottom process (P0):
WHILE TRUE DO
IF (left == s) THEN
‹token›
s := (s+1) mod k;
FI
END
END
G. Mühl
ON other process (Pi, i≠0):
WHILE TRUE DO
IF (left != s) THEN
‹token›
s := left;
FI
END
END
VA / Fehlertoleranz
49
Selbst-Stabilisierender Token Ring
Prozess
Zustand
0
3
3
3
3
3
0
0
0
0
1
1
2
3
3
3
3
3
0
0
0
0
2
0
0
0
3
3
3
3
0
0
0
3
1
1
0
0
3
3
3
3
0
0
Beispielablauf
für n = 3 und k = 4
Prozess führt
Schritt aus und
greift auf das
Token zu.
Zustand nach
Schritt in
nächster Zeile
Prozess könnte
Schritt ausführen
und auf das
Token zugreifen
G. Mühl
VA / Fehlertoleranz
50
Selbst-Stabilisierender Token Ring
> Originale Spezifikation
> Sicherheit: Es gibt höchstens ein Token im System
> Lebendigkeit: Mindestens ein Token zirkuliert im Ring
> Fairness: Kann ein Prozess ständig ziehen, so zieht er auch
nach endlicher Zeit
> Selbststabilisierende Variante
> Sicherheit: Nach endlich vielen Schritten gibt es höchstens
ein Token im System
> Lebendigkeit und Fairness wie oben
G. Mühl
VA / Fehlertoleranz
51
Selbststabilisierende Spannbaumkonstruktion
> Prozesse {P1, …, Pn} sind in einer beliebigen,
zusammenhängenden Topologie angeordnet
> Annahmen
> Jeder Prozess hat eine eindeutige Identität > 0, in seinem
ROM gespeichert
> Jeder Prozess hat denselben Timeout-Wert ρ in seinem
ROM gespeichert
> Im fehlerfreien Fall gehen keine Nachrichten verloren und
Nachrichten haben eine beschränkte Laufzeit
G. Mühl
VA / Fehlertoleranz
52
Selbststabilisierende Spannbaumkonstruktion –
Grundidee im Fehlerfreier Fall
> Wurzel (Knoten mit kleinster ID) schickt mit der Periode ρ Heartbeats
an alle ihre Nachbarn
> Knoten leiten empfangene Heartbeats an alle anderen Nachbarn weiter
> Jeder Knoten wählt als Vater den Nachbarknoten, der der Wurzel am
nächsten liegt; bei Gleichheit wird der Knoten mit kleinerer ID gewählt
> Empfangener Heartbeat unterdrückt den Wunsch anderer Knoten,
Wurzel zu werden  rechtzeitige Zustellung sicherstellen
7
4
10
9
3
1
5
2
11
13
G. Mühl
12
14
15
VA / Fehlertoleranz
53
Selbststabilisierende Spannbaumkonstruktion –
Grundidee im Fehlerfall
> Fällt eine Verbindung aus, so bildet sich ein anderer Spannbaum mit
der gleichen Wurzel
> Fällt die Wurzel aus oder ist sie nicht mehr erreichbar, bildet sich ein
Spannbaum mit einer anderen Wurzel
> In beiden Fällen ist der Auslöser für das Bilden eines neuen
Spannbaums das Auftreten von Timeouts
> Ist der Fehler transient, so bildet sich nachdem z.B. der Knoten wieder
verfügbar ist, wieder der ursprüngliche Spannbaum aus
7
4
10
9
3
1
5
2
11
13
G. Mühl
12
14
15
VA / Fehlertoleranz
54
Selbststabilisierende Spannbaumkonstruktion
> Jeder Prozess P hat
> eine Variable PV, die auf einen seiner Nachbarn
(seinen Vater) zeigt
> eine Variable PW, die auf die aktuelle Wurzel zeigt
> eine Variable PL, die seinen Level im Baum angibt und
> eine Variable PF, welche bei einem Timeout ausgelesen und
evtl. verändert wird
> Ziel: Nach endlicher Zeit sollen die PV -Verweise aller Knoten
einen Spannbaum bilden
> Bemerkung zur nächsten Folien:
> (v1, v2, v3) < (w1, w2, w3)
⇔ v1 < w1 ∨ (v1 = w1 ∧ v2 < w2) ∨ (v1 = w1 ∧ v2 = w2 ∧ v3 < w3)
G. Mühl
VA / Fehlertoleranz
55
Selbststabilisierende Spannbaumkonstruktion
> Ein Knoten P empfängt eine Nachricht (w, l, i)
> Falls (PW, PL, Pv) < (w, l + 1, i) oder P < w, ignoriert er
die Nachricht
> Falls (PW, PL, Pv) = (w, l + 1, i), setzt er PF auf 2 und schickt
dann eine Nachricht (PW, PL, P) an alle anderen Nachbarn
> Ansonsten setzt er (PW, PL, Pv) := (w, l + 1, i) sowie PF := 2
und schickt dann eine Nachricht (PW, PL, P) an
alle anderen Nachbarn
> Bei einem Prozess P läuft der Timeout ρ ab
> Falls PF ≥ 2, setzt er PF := 1
> Falls PF = 1, setzt er PF := 0
> Falls PF ≤ 0 setzt er (PW, PL, Pv) := (P, 1, P), lässt PF unverändert
und schickt dann eine Nachricht (PW, PL, Pv) an alle Nachbarn
Fehlerfreier Fall
G. Mühl
Fehlerbehafteter Fall
VA / Fehlertoleranz
56
Selbststabilisierende Spannbaumkonstruktion
7
4
10
9
3
(1,1,1)
1
(9,1,9)
5
2
11
13
12
14
15
(Wurzel, Level, Vater)
G. Mühl
VA / Fehlertoleranz
57
Selbststabilisierende Spannbaumkonstruktion
7
(1,2,1)
4
Knoten 5 und 7
ignorieren die Nachricht
von Knoten 9!
9
3
(9,1,9)
5
(1,2,1)
10
(1,1,1)
1
2
11 (9,2,9)
(1,2,1) 13
12
(1,2,1)
14
15
(Wurzel, Level, Vater)
G. Mühl
VA / Fehlertoleranz
58
Selbststabilisierende Spannbaumkonstruktion
(1,3,3)
(1,3,3)
7
(1,2,1)
4
9
3
5
(1,2,1)
(1,3,3) 10
(1,1,1)
(9,1,9)
1
(1,3,2)
2
11 (9,2,9)
(1,2,1) 13
12
(1,2,1)
14
(1,3,2)
15
(9,3,11)
(Wurzel, Level, Vater)
G. Mühl
VA / Fehlertoleranz
59
Selbststabilisierende Spannbaumkonstruktion
(1,3,3)
(1,3,3)
7
(1,2,1)
4
9
3
5
(1,2,1)
(1,3,3) 10
(1,1,1)
(1,4,5)
1
(1,3,2)
2
11 (1,4,14)
(1,2,1) 13
12
(1,2,1)
14
(1,3,2)
15
(1,4,14)
(Wurzel, Level, Vater)
G. Mühl
VA / Fehlertoleranz
60
Eigenschaften des konstruierten Spannbaumes /
Nachweis der Konvergenz
> Der aufgebaute Spannbaum ist im fehlerfreien Fall eindeutig, da
> der Prozess mit der kleinsten Identität die einzige Wurzel wird und
> jeder Prozess außer der Wurzel denjenigen Prozess unter seinen
Nachbarn als Vorgänger wählt, welcher unter den Nachbarn mit
kleinstem Level die kleinste Identität hat
> Im fehlerfreien Fall dürfen nur die von der Wurzel getriggerten
Auffrischungsnachrichten unterwegs sein
> Das System ist in einem legalen Zustand, wenn
1. der Zustand der Prozesse dem obigen Spannbaum entspricht und
2. keine fehlerhaften Nachrichten mehr unterwegs sind
> Für die Konvergenz ist zu zeigen, dass das System startend aus
einem beliebigen Zustand einen legalen Zustand erreicht
G. Mühl
VA / Fehlertoleranz
61
Sicherstellung der Abgeschlossenheit
> Jeder Knoten außer der Wurzel muss immer wieder eine
Auffrischungsnachricht erhalten, jeweils bevor dieser sich selbst zur
Wurzel erklären würde
> Sei δmin die minimale und δmax die maximale Nachrichtenlaufzeit auf
einem Link und d die Länge des längsten Pfades in der Topologie
> Die Höhe des sich ergebenden Baumes ist immer kleiner als d
> Der maximale zeitliche Abstand zwischen zwei
Auffrischungsnachrichten tritt ein,
> wenn die Wurzel und der betrachtete Knoten maximal weit voneinander
entfernt sind (also d Hops) und
> die 1. Nachricht minimal ( d δmin) sowie
> die 2. Nachricht maximal ( d δmax) verzögert wird
G. Mühl
VA / Fehlertoleranz
62
Sicherstellung der Abgeschlossenheit
> Der Empfang der 1. Auffrischungsnachricht setzt
PF auf 2
> Der 1. Timeout kann direkt nach dem Empfang
auftreten; dieser setzt PF auf 1
> Die 2. Auffrischungsnachricht muss eintreffen,
bevor zwei weitere Timeouts auftreten
Wurzel
t1
ρ
2ρ > a1 - a0
⇒
t0
a0 = t0 + d δmin
a1 = t1 + d δmax
t1 = t0 + ρ
d δmax
2ρ > ρ + d (δmax - δmin)
1
2
⇒
Max.
d Hops
ρ > d (δmax - δmin)
d δmin
G. Mühl
a0
2ρ
a1
VA / Fehlertoleranz
63
Literatur
1.
2.
3.
4.
5.
G. Mühl
E. W. Dijkstra. Self-Stabilizing Systems in Spite of Distributed Control.
Communications of the ACM, 17(11):643--644, 1974.
S. Dolev. Self-Stabilization. MIT Press, 2000.
M. Schneider. Self-stabilization. ACM Computing Surveys, 25(1):45--67, 1993.
L. Lamport, R. Shostak, and M. Pease. The Byzantine Generals Problem.
ACM Transactions on Programming Languages and Systems, 4(3):382-401, 1982.
F. C. Gärtner. A survey of self-stabilizing spanning-tree construction algorithms.
Technical Report 200338, Swiss Federal Institute of Technology (EPFL),
School of Computer and Communication Sciences, Lausanne, Switzerland,
June 2003.
VA / Fehlertoleranz
64
Herunterladen