Verteilte Systeme Fluten, Echo und Broadcast PD Dr.-Ing. Gero Mühl Kommunikations- und Betriebssysteme Fakultät für Elektrotechnik u. Informatik Technische Universität Berlin Überblick > Fluten > Verbreiten von Informationen (z.B. Knoten-ID) ohne oder auch mit Bestätigung an alle Knoten über alle Kanten > Broadcast > Verbreiten von Information an alle Knoten mit oder ohne Bestätigung bei speziellen Topologien > Echo > Verbreiten von Informationen an alle Knoten über alle Kanten mit selektiver Bestätigung > Einsammeln von Informationen > Konstruktion eines Spannbaumes G. Mühl VS / Fluten, Echo und Broadcast 2 Fluten Informationsverteilung mit Fluten > Voraussetzung: Zusammenhängende Topologie > Prinzip: Jeder Knoten erzählt neues Gerücht allen anderen Nachbarn Initiator G. Mühl VS / Fluten, Echo und Broadcast 4 Flutungs-Algorithmus I: {NOT informiert} SEND <info> TO alle Nachbarn; informiert := TRUE; R: {Eine Nachricht <info> wird empfangen} IF NOT informiert THEN SEND <info> TO alle anderen Nachbarn; informiert := TRUE; FI > Initial sei informiert == FALSE bei allen Prozessen > Aktion I wird vom Initiator spontan ausgeführt > Darf es mehrere konkurrente Initiatoren geben? G. Mühl VS / Fluten, Echo und Broadcast 5 Informationsverteilung mit Fluten > Wie viele Nachrichten werden versendet? > Sei n die Anzahl der Knoten und e die Anzahl der Kanten > Jeder Knoten sendet über alle seine inzidenten Kanten Æ +2e Nachrichten > Jedoch nicht über seine Aktivierungskante zurück Æ −n Nachrichten > Ausnahme: Initiator (hat keine Aktivierungskante) Æ +1 Nachricht ⇒ Insgesamt also 2e − n + 1 Nachrichten > Wie erfährt der Initiator, dass alle Knoten erreicht wurden? Æ Terminierungserkennung (aber wie?) G. Mühl VS / Fluten, Echo und Broadcast 6 Fluten mit Bestätigung > 2 Nachrichtentypen: Explorer und Quittungen > Ein Prozess bestätigt einen Explorer mit einer Quittung, sobald er für alle aufgrund des Empfangs dieses Explorers von ihm selbst versendeten Explorer eine Quittung erhalten hat > 1. empfangener Explorer: Quittierung nach Eingang von #Nachbarn – 1 Quittungen (Æ Blätter quittieren sofort) > Weitere Explorer: Sofortige Quittierung > Algorithmus terminiert, wenn der Initiator von jedem Nachbarn eine Quittung erhalten hat > Wie viele Nachrichten/Explorer/Quittungen insgesamt? > 2e – n +1 Explorer und genauso viele Quittungen > Insgesamt 4e – 2n + 2 Nachrichten G. Mühl VS / Fluten, Echo und Broadcast 7 Fluten mit Bestätigung – Beispiel G. Mühl VS / Fluten, Echo und Broadcast 8 Fluten mit Bestätigung – Beispiel 1 G. Mühl VS / Fluten, Echo und Broadcast 9 Fluten mit Bestätigung – Beispiel 1 1 1 G. Mühl 1 1 2 2 2 1 2 VS / Fluten, Echo und Broadcast 10 Broadcast Broadcast auf speziellen Topologien > Broadcast: Senden einer Nachricht an alle Knoten, optional auch mit Bestätigung > Fluten realisiert einen Broadcast auf beliebigen zusammenhängen, ungerichteten Topologien > Besonders fehlertolerant, weil alle Kanten für die Verbreitung der Information genutzt werden > Für spezielle Topologien ist ein Broadcast mit weniger Nachrichten möglich, vorausgesetzt der Algorithmus weiß, welche Topologie vorliegt > Weniger fehlertolerant, da im angestrebten Fall jeder Knoten nur über eine Kante erreicht wird Æ n – 1 Nachrichten > Exemplarische Topologien: Ringe, Bäume, Hypercubes G. Mühl VS / Fluten, Echo und Broadcast 12 Broadcast auf Unidirektionalen Ringen > Token zirkuliert mit Nachricht > Alle Knoten sind informiert, wenn das Token wieder beim Initiator eintrifft > n Nachrichten > Ein Ring kann auch einer anderen Topologie überlagert werden Æ logischer Ring G. Mühl VS / Fluten, Echo und Broadcast 13 Broadcast auf Bäumen > Baum hat n − 1 Kanten > Über jede Kante geht eine Nachricht > Für die Bestätigung (falls gewünscht) geht zusätzlich jeweils noch eine Nachricht über jede Kante > Statische Bäume sind nicht fehlertolerant! > Baum kann einer anderen Topologie überlagert werden ⇒ Spannbaum G. Mühl VS / Fluten, Echo und Broadcast 14 Broadcast auf Hypercubes > Initiator habe die Nummer 00...00 (binär) > Analog zum rekursiven Aufbau eines Hypercubes > Initiator sendet in Dimension 1 > Dann alle Knoten der Dimension 1 in Dimension 2 > ... G. Mühl VS / Fluten, Echo und Broadcast 15 Broadcast auf Hypercubes > Einheitszeitkomplexität > Nach d Takten sind alle Knoten informiert > Ist dies optimal? > Nachrichtenkomplexität > 1 + 2 + 4 + ... + 2d − 1 = 2d − 1 − 1 + 2d − 1 = 2d - 1 = n - 1 > Ist dies optimal? G. Mühl VS / Fluten, Echo und Broadcast 16 Echo Echo-Algorithmus > Initial sind alle Knoten weiß > Der eindeutige Initiator wird rot und schickt rote Nachrichten (Explorer) an alle seine Nachbarn G. Mühl VS / Fluten, Echo und Broadcast 18 Echo-Algorithmus > Ein weißer Knoten, der einen Explorer empfängt, wird selber rot, merkt sich diese „erste“ Kante (Aktivierungskante) und schickt Explorer an alle seine anderen Nachbarn > Auf einer Kante, auf der sich zwei Explorer begegnen, wird der Zyklus aufgebrochen (d.h., die Explorer werden verschluckt) G. Mühl VS / Fluten, Echo und Broadcast 19 Echo-Algorithmus > Ein roter Knoten, der über alle seine Kanten einen Explorer oder ein Echo erhalten hat, wird grün und sendet ein grünes Echo über seine „erste“ Kante, die auch grün wird > Blätter senden beim Empfang eines Explorers sofort ein Echo zurück G. Mühl VS / Fluten, Echo und Broadcast 20 Echo-Algorithmus > Nach und nach werden alle Knoten und ein Teil der Kanten grün > Der Algorithmus terminiert, wenn der Initiator grün wird > Dies geschieht, wenn das letzte Echo bzw. der letzte Explorer bei ihm ankommt G. Mühl VS / Fluten, Echo und Broadcast 21 Echo-Algorithmus – Beispiel 1 1 1 G. Mühl 1 1 1 VS / Fluten, Echo und Broadcast 22 Echo-Algorithmus – Beispiel 1 1 G. Mühl 1 1 1 2 1 2 1 2 2 3 1 1 1 1 VS / Fluten, Echo und Broadcast 23 Echo-Algorithmus – Beispiel 2 2 G. Mühl 3 2 3 3 1 1 VS / Fluten, Echo und Broadcast 24 Kompletter Echo-Algorithmus I: {NOT informiert}: // wird vom Initiator ausgeführt SEND <Explorer> TO alle Nachbarn; informiert := TRUE; R: {eine Nachricht <Explorer> oder <Echo> von Nachbar E wird empfangen} IF NOT informiert THEN SEND <Explorer> TO alle anderen Nachbarn; informiert := TRUE; N := E; FI Anzahl := Anzahl + 1; IF Anzahl == #Nachbarn THEN IF NOT Initiator THEN SEND <Echo> TO Nachbar N; ELSE EXIT; // Algorithmus hat terminiert FI FI > G. Mühl Initial sei informiert == falsch und Anzahl == 0 bei allen Knoten VS / Fluten, Echo und Broadcast 25 Echo-Algorithmus – Eigenschaften > Über jede Kante laufen genau zwei Nachrichten > Entweder ein Explorer und ein gegenläufiges Echo oder zwei gegenläufige Explorer > Paralleles Traversieren eines (zusammenhängenden ungerichteten) Graphen mit 2e Nachrichten > Der Echo-Algorithmus ist ein Wellenalgorithmus > Hinwelle: Rot werden > Verteilen einer Information (an alle Knoten über alle Kanten) > Rückwelle: Grün werden > Einsammeln von Informationen (von potentiell allen Knoten über die Aktivierungskanten) G. Mühl VS / Fluten, Echo und Broadcast 26 Echo-Algorithmus – Eigenschaften > Echo-Kanten bilden einen Spannbaum > Je nach Nachrichtenlaufzeit sieht der Spannbaum anders aus, weil schnelle gegenüber langsamen Kanten bevorzugt werden G. Mühl VS / Fluten, Echo und Broadcast 27 Verbesserung des Echo-Algorithmus? > Idee: Vermeide den Besuch von Knoten, von denen bekannt ist, dass sie von anderen Explorern besucht werden > Zusammen mit einem Explorer wird eine Menge von Tabuknoten z verschickt und empfangen > Die vom Initiator verschickte Tabumenge ist z = <Nachbarn vom Initiator> ∪ <Initiator> > Explorer nur an die Menge von Nachbarn y schicken, die nicht in z sind. Dabei wird die neue Tabumenge z‘ = z ∪ y angehängt > Vorteil: Einsparung von Nachrichten > Extremfälle: Baum u. vollständiger Graph > Nachteile: 1. Nachrichtenlänge O(n) 2. Nachbaridentität muss bekannt sein G. Mühl 1 2 3 4 Z.B. die Nachricht von 2 an 3 enthält die Info, dass 4 nicht besucht werden muss. VS / Fluten, Echo und Broadcast 28 Literatur > G. Mühl E. Chang. Echo algorithms: Depth parallel operations on graphs. IEEE Transactions on Software Engineering, 8(4):391--400, 1982. VS / Fluten, Echo und Broadcast 29