Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
1
The ultimate consensus ?
Paxos The ultimate consensus ?
2
Vortragsaufbau Teil I – Einführung Teil 2 – Paxos formal
Funktionsweise des Paxos – Algorithmus Kommunikationsprimitiven Rundenablauf Beispielrunden Teil 2 – Paxos formal Paxos als I/O – Automat Beweis von Validity und Agreement
3
PAXOS Name einer alten griechischen Hochkultur
Leslie Lamport beschrieb den Paxos-Algorithmus als Ergebnis archäologischer Studien dieser Kultur (L.Lamport[98]-„The part-time parliament“) Höchst fehlertoleranter Distributed-Consesus-Algorithmus, der Validity, Agreement und unter Umständen auch Termination garantiert
4
Complete Paxos
5
Basic Paxos Sichert Validity und Agreement
Termination nur unter der Annahme eines einzigen Leaders
6
Externe Primitiven von PAX
NewRound(value) : Startet eine neue Runde RndSuccess(value‘) : Meldet eine Entscheidung Neue Runden können beliebig oft gestartet werden.
7
Validity & Agreement Validity: Trivial
Agreement: Alle per RndSuccess(v) gemeldeten v müssen identisch sein
8
Komponenten von PAX 2 unabhängige Komponenten
Leader-Komponente bietet die externen Primitiven NewRnd(v) und RndSuccess(v‘) Acceptor dient nur interner Kommunikation
9
Interne Kommunikation
Jede Leader-Komponente kommuniziert nur mit Acceptor-Komponenten (auch mit der eigenen)
10
Runden Paxos läuft in Form von „Runden“ aus N x P
Es existiert eine Ordnung auf den Runden: r < r‘ gdw. (r.n < r‘.n) oder ( (r.n = r‘.n) und (r.p < r‘.p) ) Jede Runde r hat maximal 1 zugehörige Leader-Komponente Jede Nachricht zwischen Leader und Acceptors trägt diese Rundennummer r
11
Component states Rot: „Aktuelle Rundennummer“
Grün: „Höchste bekannte erfolgreiche Runde“ Blau: „Value der höchsten bekannten erfolgreichen Runde“
12
NewRound(v) Leader: CurRnd := CurRnd HighestRnd := RndVal := v
13
Collect()^r Leader sendet Collect()^CurRnd an alle Acceptor
14
Join(r‘,v‘)^r Acceptors: IF (r > Commit) Commit = r ; Send(Join, LastR, LastV)^r Leader: IF (r‘ > HighestRnd) HighestRnd = r‘ ; RndVal = v‘
15
Store(val)^r Sobald der Leader von einer Mehrheit der Prozesse Join-Nachrichten bekommen hat, sendet er allen Acceptors ein Store(RndVal)^CurRnd
16
Accept()^r Acceptors: if ( r >= Commit ) Commit = r ; LastR = r ; LastV = val; Send(Accept)^r Leader: Sobald von einer Mehrheit der Acceptors Accept-Nachrichten empfangen wurde, wird RndSuccess(RndVal) ausgeführt.
17
Kompaktes Beispiel
18
Frage Was passiert wenn nun ein andere Leader eine Runde 1‘ mit einem anderen Value v‘ startet ? Angenommen der neue Leader hat eine höhere Prozessnummer, d.h. seine Runde 1‘ ist höher als die Runde 1 des alten Leaders.
19
Kompaktes Beispiel (Forts.)
20
Teil II Paxos als I/O - Automat
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.