5 Verteilte Algorithmen vs5 1
Charakterisierung eines verteilten Systems? Prozesse als Systemkomponenten: Spezifikation eines Prozesses (Vgl. Spezifikation eines ADT) syntaktisch: z.b. Ports oder Parameter vom Typ Prozeß semantisch: Ein/Ausgabeverhalten Unterschiedliche Arten von Beziehungen zwischen Prozessen Interaktionsparadigmen, Architekturstile (Prozesse spielen Rollen in diesen Beziehungen) Datenfluß-Architektur Client/Server-Architektur Verteilter Algorithmus vs5 2
Datenfluß-Architektur (dataflow architecture, pipes and filters ) z.b. Unix Pipeline: keine ausgezeichneten Rollen, keine Erwartungen an Kommunikationspartner grep pat sort lpr oder Datenflußmaschine: + - * vs5 3
Client/Server-Architektur Rollen: Auftraggeber (Klient) und Auftragnehmer (Server) Einseitige Erwartung des Klienten an den Server z.b. so: lpr file grep pat file print server file server mail server vs5 4
Def.: Verteilter Algorithmus Prozesse kooperieren zwecks Erreichung eines gemeinsamen Ziels in verschiedenen oder gleichen Rollen, mit bestimmten, vereinbarten Interaktionsmustern = "Protokoll" Gerne in Pseudocode formuliert, mit prozessbezogener Adressierung Behandelt häufig Fehlertoleranz bei unzuverlässigen Prozessen oder unzuverlässiger Kommunikation vs5 5
z.b. zuverlässige unidirektionale Nachrichtenübertragung über unzuverlässigen bidirektionalen Kanal: Kommunikationsprotokoll Daten Sender Empfänger Quittungen oder Einigung auf Anführer : Auswahlprotokoll vs5 6
5.1 Zeit und Kausalität Zur Erinnerung: Charakteristika eines verteilten Systems: es gibt keinen gemeinsamen Speicher es gibt keine globale Zeit absolute Zeit sehr schwer realisierbar aber: relative Zeitpunkte einzelner Ereignisse können wichtig sein (z.b. push vor pop - oder pop vor push? ) vs5 7
Speziell Nachrichten-Reihenfolge: Bei Sender/Empfänger-Paar: leicht darstellbar durch Durchnumerieren der Nachrichten 0 1 2 Bei mehreren Beteiligten: wie numerieren? Insbesondere Darstellung von Kausalketten - wurde b nach Eintreffen von a versendet oder nicht? a b' vs5 8 b c
5.1.1 Kausale Ordnung von Ereignissen Def.: Ereignis (event) local - prozessinterne Aktion (z.b. Zuweisung an Variable x ) send - Senden einer Nachricht (Ausführung von send) recv - Empfangen einer Nachricht (Ausführung von recv) Ereignismenge, nicht näher spezifiziert: E Prozesse werden als sequentiell vorausgesetzt Kommunikation wird als verlustfrei vorausgesetzt vs5 9
Def.: Kausale Abhängigkeit Zwei Ereignisse a,b E stehen in der Beziehung a b ( a vor b, a happened before b, b ist kausal abhängig von a ) zueinander, wenn gilt: entweder oder oder 1) a und b gehören zum selben Prozess und geschehen in dieser Reihenfolge 2) a ist das Senden einer Nachricht, b ist das Empfangen dieser Nachricht 3) es gibt ein Ereignis c mit a c und c b (Transitivität von ) vs5 10
Def.: Mit der kausalen Abhängigkeit " " definieren wir eine Relation "gleich oder vor". Diese ist eine partielle Ordnung auf E: die Kausalordnung. Def.: Zwei Ereignisse a,b sind voneinander unabhängig (auch nebenläufig, concurrent, causally unrelated), wenn weder a b noch b a vs5 11
Veranschaulichung der partiellen Ordnung durch Zeitdiagramm (ähnlich dem Hasse-Diagramm für partielle Ordnungen) Zeit a c d f e y x b z.b. a c e b d e c h! nicht a d, g j! g i h j Aus x b, d y folgt, daß die beiden Nachrichten nicht FIFO übertragen wurden! vs5 12
5.1.2 Logische Uhren Numerische Repräsentation der kausalen Abhängigkeit - anstelle von pysikalischen Zeitpunkten Idee: Jedem Ereignis e E wird eine Zeit C(e) T zugeordnet. Die Zeiten sind partiell geordnet, und die Ordnung sollte isomorph zur Kausalordnung sein: (E, ) (T, <) Die Abbildung C: E T heißt logische Uhr. vs5 13
1. Versuch: Skalare Zeit [Lamport 1978] T = natürliche Zahlen Jeder Prozess - führt in einer lokalen Uhr eine lokale Zeit c (anfangs 0) - versieht jede versendete Nachricht mit Zeitstempel (timestamp) t = c. Vor jedem Ereignis wird c um 1 erhöht. Nach recv mit Zeitstempel t wird c auf max(c,t+1) gesetzt. Bemerkung: Hängt man an die Skalarzeit noch die Prozessnummer an, so kann man die Ereignisse gemäß dieser Kennung linear anordnen verträglich mit ihrer Kausalordnung ( topologisches Sortieren ). vs5 14
Naiver Ansatz: Durchnumerieren der Ereignisse pro Prozess A 1 2 3 4 B 1 2 3 4 C 1 2 3 4 Lineare Anordnung mit Skalar-Zeit A 1 2 3A 8 B 1 3B 4 5B C 1 5C 6 7 vs5 15
Für beliebige Ereignisse a,b E gilt aber nicht die Umkehrung! Auch gilt zwar a b C(a) < C(b), 4 5B 5C 6 C(a) = C(b) (a b b a), aber nicht C(a) = C(b) a = b vs5 16
2. Versuch: Vektorzeit [Fidge, Mattern 1988] T = n-tupel natürlicher Zahlen (bei n Prozessen 1,..,n) t s : t i s i für alle i=1,..,n Halbordnung! Jeder Prozess p - führt in einer lokalen Uhr eine lokale Vektorzeit c (anfangs (0,0,..) ), - versieht jede versendete Nachricht mit Zeitstempel t = c. Vor jedem Ereignis wird c p um 1 erhöht. Nach recv mit Zeitstempel t werden für alle i=1,..,n die c i auf max(c i,t i ) gesetzt. vs5 17
Lineare Anordnung mit Skalar-Zeit A 1 2 3A 8 B 1 3B 4 5B C 1 5C 6 7 Vektor-Zeitstempel A 100 200 300 434 B 010 220 230 240 C 001 232 233 234 vs5 18
Mit der Vektorzeit C erreichen wir die gewünschte Isomorphie: (E, ) (T, <) vs5 19