4 Verteilte Algorithmen vs4 1 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 vs4 2 Datenfluß-Architektur (dataflow architecture, „pipes and filters“) keine ausgezeichneten Rollen z.B. Unix Pipeline: grep pat sort lpr oder Datenflußmaschine: + * vs4 3 Client/Server-Architektur Rollen: Auftraggeber (Klient) und Auftragnehmer (Server) z.B. so: lpr file grep pat file print server file server vs4 mail server 4 Def.: Verteilter Algorithmus Prozesse kooperieren zwecks Erreichung eines gemeinsamen Ziels in verschiedenen oder gleichen Rollen, mit bestimmten, vereinbarten Interaktionsmustern, „Protokollen“ Häufig Fehlertoleranz bei unzuverlässigen Prozessen oder unzuverlässiger Kommunikation Gerne in Pseudocode formuliert, mit prozessbezogener Adressierung vs4 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 vs4 6 4.1 Zeit und Kausalität Zur Erinnerung: Charakteristika eines verteilten Systems: es gibt keinen gemeinsamen Speicher es gibt keine globale Zeit absolute Zeit interessiert wenig aber: relative Zeitpunkte einzelner Ereignisse können wichtig sein (z.B. „push vor pop - oder pop vor push?“ ) vs4 7 4.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) Prozesse werden als sequentiell vorausgesetzt Dienstgüte des Nachrichtensystems bleibt zunächst offen Ereignismenge, nicht näher spezifiziert: vs4 E 8 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 1) a und b gehören zum selben Prozess und geschehen in dieser Reihenfolge oder 2) a ist das Senden einer Nachricht, b ist das Empfangen dieser Nachricht oder 3) es gibt ein Ereignis c mit a c und c b (Transitivität von ) vs4 9 Bemerkung: Die Relation „gleich oder vor“ ist partielle Ordnung auf E: Kausalordnung Def.: Zwei Ereignisse a,b sind voneinander unabhängig (auch nebenläufig, concurrent, causally unrelated), wenn weder a b noch b a vs4 10 Veranschaulichung der partiellen Ordnung durch Zeitdiagramm (ähnlich dem Hasse-Diagramm für partielle Ordnungen) Zeit a c z.B. x b d ace bde ch! e f g i nicht y ad, gj ! Aus x b , d y folgt, daß die beiden Nachrichten h j nicht FIFO übertragen wurden! vs4 11 Nochmals zur Dienstgüte des Nachrichtensystems: Reihenfolgetreue (FCFS, FIFO) bei Sender/Empfänger-Paar: gegebenenfalls erzwingen mit Durchnumerieren der Nachrichten 0 1 0 1 2 2 Kausalitätstreue bei mehreren Beteiligten: a wird vor c gesendet, also auch vor c empfangen a b c wie erzwingen ? vs4 12 4.1.2 Logische Uhren in Anlehnung an die Kausalitätsbeziehung Ziel: 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. vs4 13 1. Versuch: Skalare Zeit [Lamport 1978] T = natürliche Zahlen (totale Ordnung - daher zum Scheitern verurteilt) 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. vs4 14 Für beliebige Ereignisse a,b E gilt a b C(a) C(b) , aber nicht die Umkehrung! Auch gilt zwar C(a) = C(b) (a b b a) , aber nicht C(a) = C(b) a = b Bemerkung: Hängt man an die Skalarzeit die Prozessnummer an, so kann man die Ereignisse gemäß dieser Kennung linear anordnen – verträglich mit ihrer Kausalordnung („topologisches Sortieren“). vs4 15 2. Versuch: Vektorzeit [Fidge, Mattern 1988] T = n-Tupel natürlicher Zahlen (bei n Prozessen 1,..,n) t s : ti si 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 cp um 1 erhöht. Nach recv mit Zeitstempel t werden für alle i=1,..,n die ci auf max(ci,ti) gesetzt. vs4 16 Mit der Vektorzeit C erreichen wir die gewünschte Isomorphie: (E, ) (T, ) vs4 17