Praktikable Einigungsalgorithmen Algorithmen für synchrone Systeme Atomarer Broadcast: siehe Aufgabe 4.4 Burns/Neiger Lamport/Shostak/Pease: Oral Messages; Signed Messages Algorithmen für asynchrone Systeme (mit Einschränkungen) Einigung bei perfekter Ausfallerkennung Paxos (Fail-Stop-Ausfälle) Castro-Algorithmus bzw. Byzantine Paxos Randomisierte Algorithmen (probabilistische Terminierung) Ben Or (Fail-Stop-Ausfälle) Ben Or (Byzantinische Fehler) ABBA Verteilte Algorithmen (VA), WS 2003/04 30 Algorithmen für synchrone Systeme Algorithmus wird in allen Knoten simultan gestartet Maximale Nachrichtenlaufzeit T ist bekannt Damit kann der Algorithmus in expliziten Runden ablaufen: Jeder Knoten wartet nach Start / nach jeder Runde die Zeit T ab (dann sind alle möglichen Nachrichten angekommen), verarbeitet diese und beginnt ggf. eine neue Runde Verteilte Algorithmen (VA), WS 2003/04 3
Algorithmus von Burns/Neiger Fast and Simple Distributed Consensus Synchrones Systemmodell Byzantinische fehlerhafte Knoten N M 2 + 4 M + Die N Knoten werden in M+ Gruppen eingeteilt: Gruppe : 2 M + Knoten Gruppe 2: 2 M + Knoten Gruppe 3: 2 M - Knoten... Gruppe M+: 3 Knoten Verteilte Algorithmen (VA), WS 2003/04 32 Algorithmus von Burns/Neiger Beschreibung des Algorithmus Jeder Knoten besitzt einen Wert, der mit dem Vorschlagswert des Knoten initalisiert wird In jeder Runde r senden die Knoten der Gruppe r ihren Wert an alle anderen Am Rundenende ermittelt jeder Knoten seinen Wert durch Mehrheitsbildung über die empfangenen Nachrichten. Für ausgebliebene Nachrichten wird der eigene Wert benutzt Wenn ein Knoten von allen Knoten der Gruppe r den gleichen Wert erhält, entscheidet er sich für diesen Wert Knoten, die sich bis zum Ende der (M+)-ten Runde noch nicht entschieden haben, entscheiden sich für ihren Wert zu diesem Zeitpunkt Verteilte Algorithmen (VA), WS 2003/04 33
Algorithmus von Burns/Neiger Überlegungen zur Korrektheit Wenn zwei Runden ausgeführt wurden, in denen alle Gruppenmitglieder korrekt sind, terminiert der Algorithmus In der ersten Runde treffen alle die gleiche Mehrheitsentscheidung Da (siehe unten) in jeder Gruppe die Mehrheit korrekt ist, können nachfolgende Runden mit fehlerhaften Gruppenmitgliedern diesen Wert nicht verändern In einer zweiten Runde mit nur korrekten Gruppenmitglieder erhalten alle einen Vektor aus identischen Werten Verteilte Algorithmen (VA), WS 2003/04 34 Algorithmus von Burns/Neiger Überlegungen zur Korrektheit (2) In jeder aktiven Gruppe ist die Mehrheit der Gruppenmitglieder korrekt In den ersten beiden Gruppen ist das offensichtlich (2 M + Mitglieder) Wenn die ersten beiden Gruppen nur korrekte Mitglieder hatten, terminiert der Algorithmus. Wenn die dritte Gruppe aktiv wird, kann es also nur noch M- fehlerhafte Knoten geben, damit ist bei 2 M - Knoten die Mehrheit korrekt, usw. Nach M+ Runden gabe es mindestens eine mit nur korrekten Mitgliedern Verteilte Algorithmen (VA), WS 2003/04 35
Algorithmus von Burns/Neiger Fazit Einigungsproblem lösbar in einem synchronen Modell sogar mit byzantinischen Fehlern falls nur wenige Knoten fehlerhaft sind (N M 2 + 4 M + ) Deterministischer Algorithmus, der sicher innerhalb von M+ Runden terminiert Weitere positive Eigenschaft: Je weniger Fehler, desto schneller terminiert der Algorithmus Was ist mit der "Lücke" zwischen M 2 + 4 M + > N > 3 M Beispiel M=: Ist das Problem mit einem fehlerhaften Knoten lösbar, falls N=4 oder N=5? Verteilte Algorithmen (VA), WS 2003/04 36 OM-Algorithmus von Lamport/Shostak/Pease Modell Synchrones Systemmodell, Byzantinische Fehler N > 3 M Betrachtet wird das Verständigungsproblem: Ein Anführer gibt einen Wert vor, alle korrekten Knoten sollen sich auf einen Wert einigen, der bei korrektem Anführer dessen Wert entsprechen muss Zunächst soll der einfachste Fall betrachtet werde: M =, N = 4 Verteilte Algorithmen (VA), WS 2003/04 37
OM-Algorithmus von Lamport/Shostak/Pease OM für 4 Knoten Der Anführer sendet seinen Wert (0, ) in der ersten Runde an alle anderen In einer zweiten Runde senden alle den erhaltenen Wert (oder 0, falls kein Wert erhalten) an alle anderen (ausgenommen den Anführer) Jeder der 4 Knoten trifft eine Mehrheitsentscheidung Verteilte Algorithmen (VA), WS 2003/04 38 OM-Algorithmus von Lamport/Shostak/Pease Fall : Anführer fehlerhaft: 0 0 0 Jeder Knoten erhält die Werte {,, 0} und entscheidet sich für Verteilte Algorithmen (VA), WS 2003/04 39
OM-Algorithmus von Lamport/Shostak/Pease Fall 2: anderer Knoten fehlerhaft 0 0 Jeder Knoten erhält mindestens 2x den Wert (Anführer und weiterer korrekter Knoten), damit fällt die Entscheidung sicher für den Wert Praktikable Einigungsalgorithmen Verteilte Algorithmen (VA), WS 2003/04 40 OM-Algorithmus von Lamport/Shostak/Pease OM für beliebig viele Knoten Algorithmus OM(0): Der Anführer sendet seinen Wert an alle anderen beteiligten Knoten Jeder Knoten verwendet dieses Wert, oder, falls er keinen Wert empfängt, den Wert 0 Algorithmus OM(m), m> Der Anführer sendet seinen Wert an alle anderen beteiligten Knoten Sei v i der Wert, den Knoten i im Schritt () erhalten hat, oder 0, falls er keinen Wert erhalten hat. Knoten i führt dann Algorithmus OM(m-) mit allen beteiligten Knoten außer dem Anführer durch, wobei er v i als Wert verwendet Verteilte Algorithmen (VA), WS 2003/04 4
OM-Algorithmus von Lamport/Shostak/Pease Ablauf: Sei v j (j i) der Wert, den der Knoten i im Schritt (2) vom Knoten j (durch den Algorithmus OM(m-)) erhalten hat, oder 0. Knoten i trifft eine Mehrheitsentscheidung über alle v x (einschliesslich v i ), und verwendet diesen als Ergebnis des Algorithmus OM(m) OM(m) startet n- Ausführung von OM(m-) jede dieser startet n-2 Ausführungen von OM(m-2) usw... Verteilte Algorithmen (VA), WS 2003/04 42 OM-Algorithmus von Lamport/Shostak/Pease Hinweise Um unterscheiden zu können, zu welcher Ausführung welche Nachrichten gehören, muss bei allen Nachrichten eine Pfadinformation mitgeschickt werden Bei Nancy Lynch ( Distributed Algorithms ) ist ein entsprechender Algorithmus als EIG: "Exponential Information Gathering" beschrieben Verteilte Algorithmen (VA), WS 2003/04 43
OM-Algorithmus von Lamport/Shostak/Pease Beispiel mit M=2, N=7 OM(2) Rückzug / Angriff OM() Rückzug & Angriff Rückzug OM(0) 0 2 3 4 5 6 Verteilte Algorithmen (VA), WS 2003/04 44 OM-Algorithmus von Lamport/Shostak/Pease OM(0) 0--3-2: R 0--4-2: A 0--5-2: A 0--6-2: A OM() 3-er Pfade 0--2: R OM() OM(2) OM(2) Ergebnis 0-: Angriff Knoten 2 betrachtet! 0-3--2: R 0-3-4-2: A 0-3-5-2: A 0-3-6-2: A 0-4--2: A 0-4-3-2: R 0-4-5-2: R 0-4-6-2: R 0-5--2: A 0-5-3-2: R 0-5-4-2: R 0-5-6-2: R 0-3-2: A 0-4-2: R 0-5-2: R 0-3: Angriff 0-4: Rückzug 0-5: Rückzug 0-2: A Rückzug 0-6--2: A 0-6-3-2: R 0-6-4-2: R 0-6-5-2: R 0-6-2: R 0-6: Rückzug Verteilte Algorithmen (VA), WS 2003/04 45
OM-Algorithmus von Lamport/Shostak/Pease Fazit In einem synchronen Modell lässt sich das Einigungsproblem mit byzantinischen Fehlern lösen falls N 3 M + ist (d.h. die Schranke, die durch den Beweis der Unmöglichkeit für N 3 M gesetzt wurde, ist eine "harte" Schranke) allerdings mit einem exponentiellen Nachrichtenaufwand, d.h. für größere M ist der Algorithmus nicht brauchbar Verteilte Algorithmen (VA), WS 2003/04 46 SM-Algorithmus von Lamport/Shostak/Pease Modell Synchrones Systemmodell Byzantinische Fehler Nachrichten können verifizierbar und nicht fälschbar signiert werden Siehe Besprechung der Übungsaufgabe 4 Hier lässt sich das Einigungsproblem sogar dann lösen, wenn beliebig viele Knoten fehlerhaft sind. Verteilte Algorithmen (VA), WS 2003/04 47
Algorithmen für asynchrone Systeme In der Literatur findet man viele weitere Algorithmen, die in einem synchronem System das Einigungsproblem lösen Leider hat man in der Praxis nicht immer ein System vorliegen, das die geforderten Synchronitätseigenschaften aufweist Was kann man in nicht synchronen Systemen tun? Wir wollen im Folgenden betrachten Algorithmen in einem (eingeschränkten) asynchronen Modell Paxos, Castro ( Byzantine Paxos ) Probabilistischen Algorithmen Ben Or, ABBA Verteilte Algorithmen (VA), WS 2003/04 48 Algorithmen für asynchrone Systeme Einfache Beispiele: Triviale Lösung wenn keine Fehler toleriert werden sollen Initiator-Knoten sendet seinen Wert an alle Alle übernehmen diesen Wert Funktioniert nicht, wenn Initiator ausfällt Einfache Erweiterung auf Fehler möglich? Verteilte Algorithmen (VA), WS 2003/04 49
Algorithmen für asynchrone Systeme Erster Versuch: Annahme: Ausfälle werden zuverlässig erkannt Anführer ist der lebendige Knoten mit kleinster ID. Da jeder Knoten von allen anderen weiss, ob diese ausgefallen sind, weiss jeder, ob er Anführer ist Anführer sendet seinen Wert an alle, jeder Knoten übernimmt diesen Wert Verteilte Algorithmen (VA), WS 2003/04 50 Algorithmen für asynchrone Systeme Erster Versuch: Annahme: Ausfälle werden zuverlässig erkannt Anführer ist derjenige lebendige Knoten mit der kleinsten ID. Da jeder Knoten von allen anderen weiss, ob diese ausgefallen sind, weiss jeder, ob er Anführer ist Anführer sendet seinen Wert an alle, jeder Knoten übernimmt diesen Wert Funktioniert leider nicht, falls Anführer beim Senden seines Wertes ausfällt! Kann man verhindern, dass ein neuer Anführer einen neuen, unterschiedlichen Wert sendet? Verteilte Algorithmen (VA), WS 2003/04 5
Algorithmen für asynchrone Systeme Zweiter Versuch: Zwei-Phasen-Protokoll Erst sicherstellen, dass ein Wert der einzig mögliche Entscheidungswert ist: Anführer sendet Wert als Vorschlag an alle. Jeder Knoten übernimmt diesen Wert als eigenen Vorschlagswert, für den Fall dass dieser selbst Anführer werden sollte Anführer wartet auf eine Bestätigung von allen nicht ausgefallenen Knoten Dann Entscheidung für Wert propagieren Falls Anführer beim propagieren seines Werts ausfällt, ist sichergestellt, dass der nächste Anführer den gleichen Wert propagiert, also keine Inkonsistenz entstehen kann Verteilte Algorithmen (VA), WS 2003/04 52 Algorithmen für asynchrone Systeme Zweiter Versuch: Beispielablauf P prepare(a) accept(a) decide(a) X P 2 X P 3 prepare(a) decide(a) P 4 accept(a) Verteilte Algorithmen (VA), WS 2003/04 53
Algorithmen für asynchrone Systeme Kritische Betrachtung des zweiten Versuchs Funkioniert gut bei perfekter Ausfallerkennung Probleme bei fehlerhafter Ausfallerkennung: Anführer wartet auf Antwort (accept) von allen nicht ausgefallenen Knoten. Wird ein ausgefallener Knoten nicht als solcher erkannt, wartet der Anführer ewig Wird ein funktionierender Knoten fälschlicherweise als ausgefallen betrachtet, können inkonsistente Entscheidungen entstehen Aktivierung eines neuen Anführers hängt von der exakten Erkennung des Ausfalls des alten Anführers ab Bei fehlerhafter Ausfallerkennung: Mehere Anführer zugleich, oder kein Anführer Verteilte Algorithmen (VA), WS 2003/04 54 Algorithmen für asynchrone Systeme Verbesserung des zweiten Versuchs Anführer wartet nicht auf eine Antwort von allen, sondern auf die Antwort eines Quorums aller Knoten Nicht von Ausfallerkennung abhängig, beleibiges Quorum an Knoten muss antworten (d.h. nicht zu viele Ausfälle) Bei Wechsel des Anführers muss der neue Anführer nun ein Quorum der Knoten befragen, ob es einen Vorschlagswert gab Bestimmung des Anführers Gestaltung des Algorithmus so, dass keine Inkonsistenzen entstehen, falls es mehr als einen Anführer gibt (möglicherweise aber keine gesicherte Terminierung) Verteilte Algorithmen (VA), WS 2003/04 55
Algorithmen für asynchrone Systeme Verbesserung des zweiten Versuchs Anführer wartet nicht auf eine Antwort von allen, sondern auf die Antwort eines Quorums aller Knoten Nicht von Ausfallerkennung abhängig, beleibiges Quorum an Knoten muss antworten (d.h. nicht zu viele Ausfälle) Bei Wechsel des Anführers muss der neue Anführer nun ein Quorum der Knoten befragen, ob es einen Vorschlagswert gab Bestimmung des Anführers Gestaltung des Algorithmus so, dass keine Inkonsistenzen entstehen, falls es mehr als einen Anführer gibt (möglicherweise aber keine gesicherte Terminierung) Das ist schon (fast) der komplette Paxos-Algorithmus! Verteilte Algorithmen (VA), WS 2003/04 56 Paxos Literatur zu Paxos Lamport: The Part-Time Parliament. Technical Report, DEC Systems Research Center, Sept. 989; auch in: ACM Transactions on Computer Systems, vol. 6., no. 2, 998 Lampson: How to Build a Highly Available System Using Consensus. Proc. 0th Int. Workshop on Distributed Algorithms (WDAG 96) Roberto De Prisco: Revisiting the PAXOS Algorithm. M.S. thesis, MIT, June 997; in Kurzform veröffentlicht als: R. De Prisco, B. Lampson, N. Lynch: Revisiting the PAXOS Algorithm. Proc. th Int. Workshop on Distributed Algorithms (WDAG 97) Lamport: Paxos Made Simple. ACM SIGACT News (Distributed Computing Column) 32, 4, Dec. 200 Verteilte Algorithmen (VA), WS 2003/04 57