Dynamische Netzwerke für Zusammenhang

Werbung
Verteilte Algorithmen und
Datenstrukturen
Kapitel 6: Dynamische Netzwerke
für Zusammenhang
Christian Scheideler
WS 2009
Übersicht
•
•
•
•
•
Dynamische Netzwerke
Selbststabilisierende Netzwerke
Selbststabilisierende Clique
Selbststabilisierende Liste
Zufällige Graphen
Dynamische Netzwerke
• Jedes universelle verteilte System basiert auf einem
physikalischen oder logischen Netzwerk, das prinzipiell den
Austausch von Informationen zwischen beliebigen zwei
Teilnehmern (auf direktem oder indirektem Weg) erlaubt.
• Wir beschränken uns auf logische Netzwerke (auch Overlay
Netzwerke genannt), die beliebige paarweise Verbindungen
zwischen den Teilnehmern zulassen.
Dynamische Netzwerke
• In diesem Fall können die Netzwerke topologisch als
gerichtete Graphen G=(V,E) modelliert werden.
• Kante (v,w)∈E: v kennt (und hat direkten Zugang zu) w.
• N(v) = { w∈V | (v,w)∈E }: Nachbarschaft von v.
• d(v) = |N(v)|: Grad von v.
Dynamische Netzwerke
• Problem: besonders in offenen verteilten Systemen
(wie z.B. Peer-to-Peer Systemen) kann sich die
Knotenmenge stark über die Zeit verändern.
• Wir brauchen also Mechanismen, die Knoten effektiv
in ein Netzwerk integrieren oder aus einem Netzwerk
entfernen können.
• Diese Mechanismen sollten robust gegenüber
Ausfällen und gegnerischem Verhalten sein.
Dynamische Netzwerke
Grundlegende Ereignisse/Operationen:
• Join(v,w): der neue Knoten v kontaktiert Knoten w (d.h. initiiert
Kante (v,w) ), um in das Netzwerk integriert zu werden.
• Leave(v): Knoten v will das Netzwerk verlassen.
Klassischer Ansatz: finde Protokolle für Join(v,w) und Leave(v)
mit möglichst geringer Arbeit, Strukturveränderung und
Laufzeit, so dass nach Bearbeitung jeder Operation das
Netzwerk im gewünschten Zustand ist.
• Arbeit: Anzahl Botschaften
Probleme!
• Strukturveränderung: Anzahl veränderter Kanten
• Laufzeit: Anzahl Kommunikationsrunden
(Annahme: alle Knoten arbeiten synchron)
Dynamische Netzwerke
Klassischer Ansatz: finde Protokolle für Join(v,w) und Leave(v) mit
möglichst geringer Arbeit, Strukturveränderung und Laufzeit, so
dass nach Bearbeitung jeder Operation das Netzwerk im
gewünschten Zustand ist.
• Arbeit: Anzahl Botschaften
• Strukturveränderung: Anzahl veränderter Kanten
• Laufzeit: Anzahl Kommunikationsrunden
(Annahme: alle Knoten arbeiten synchron)
Probleme:
• Operationen müssen nebenläufig bearbeitet werden, was zu
Konsistenzproblemen führen kann.
• Bei kontinuierlichen Operationen ist Netzwerk nie „fertig“.
• Fehler und gegnerisches Verhalten können Netzwerk in einen
degenerierten Zustand überführen, aus dem es sich erholen muss.
Dynamische Netzwerke
Idealerweise:
• Mechanismen, die das Netzwerk ständig
reparieren/optimieren.
• Join(v,w): etabliere Kante (v,w). Den Rest
macht das Netzwerk.
• Leave(v): entferne einfach v aus dem Netz.
Solche Netzwerke nennt man auch
selbstorganisierende Netzwerke
Dynamische Netzwerke
Verschiedene Kategorien selbstorganisierender Netzwerke:
• Selbststabilisierende Netzwerke: Netzwerke, die von einem
beliebigen Zustand mit schwachem Zusammenhang wieder
zurück in einen legalen Zustand gelangen können (unter der
Voraussetzung, dass während dieses Prozesses keine join
oder leave Ereignisse stattfinden).
• Selbsterhaltende Netzwerke: Netzwerke, die (bis zu einer
bestimmten Rate an join und leave Ereignissen) nie einen
legalen Zustand verlassen.
• Selbstoptimierende Netzwerke: Netzwerke, die ihre Struktur
optimal an eine Zielfunktion (die von Kantenkosten oder
Anfragen in der Anwendungsebene abhängen mag)
anpassen können.
Hier Fokus auf selbststabilisierende Netzwerke.
Selbststabilisierende Netze
Problem: finde geeignete lokale Regeln, so
dass das Netz von jedem Zustand mit
schwachem Zusammenhang in einen
legalen Zustand zurückkehren kann.
ungerichtet: beidseitig gerichtet
Selbststabilisierende Netze
• Knoten kennen nur den lokalen Zustand
ihrer direkten Nachbarn.
• Nur folgende Netzwerk-Befehle:
– u.insert(v,w): u kontaktiert Knoten v∈N(u), um
eine Kante zu Knoten w∈N(u) aufzubauen
v
u
v
u
w
– u.delete(v): u löscht Kante zu v
w
Selbststabilisierende Netze
Annahmen für die Laufzeitanalyse:
• Die Zeit verläuft in synchronen Runden.
• In jeder Runde kann jeder Knoten v jeder Menge
an Knoten w∈N(v) Botschaften schicken.
• Zeitaufwand pro Runde:
– Rundenkomplexität: 1
– Kommunikationskomplexität: maximale Anzahl an
Elementarbotschaften (z.B. Anzahl Adressen), die ein
Knoten in der Runde aussenden oder empfangen
muss.
Übersicht
•
•
•
•
•
Dynamische Netzwerke
Selbststabilisierende Netzwerke
Selbststabilisierende Clique
Selbststabilisierende Liste
Zufällige Graphen
Selbststabilisierende Clique
Definition 6.1: Ein vollständiger (gerichteter) Graph Kn
(oder kurz Clique) auf n Knoten ist ein Graph, in dem
jedes Knotenpaar durch eine Kante in jeder Richtung
verbunden ist.
Gegeben: beliebiger schwach zusammenhängender
Graph G=(V,E)
Gesucht: Verfahren, das G möglichst schnell in einen
vollständigen Graphen verwandelt
Anfangsgraph
Selbststabilisierende Clique
Gegeben: beliebiger schwach zusammenhängender
Graph G=(V,E)
Gesucht: Verfahren, das G möglichst schnell in eine
Clique verwandelt
Anfangsgraph
Zusätzliche Bedingung an Verfahren:
• Geringer Umorganisierungsaufwand bei Join- und
Leave-Operation auf perfekter Clique.
Selbststabilisierende Clique
Gegeben: beliebiger schwach zusammenhängender
Graph G=(V,E)
Gesucht: Verfahren, das G möglichst schnell in eine
Clique verwandelt
Anfangsgraph
Wichtig für unsere verteilten Konsens und Transaktionsverfahren, da diese eine Clique benötigen!
Selbststabilisierende Clique
Naives Verfahren: Pointer Doubling
Jeder Knoten v schickt in jeder Kommunikationsrunde seine gesamte Nachbarschaft N(v) an alle
Nachbarn.
v
N(v)
w
Theorem 6.1: Pointer Doubling benötigt nur O(log n)
Kommunikationsrunden, bis sich aus einem
beliebigen schwach zusammenhängenden
Graphen eine Clique gebildet hat.
Selbststabilisierende Clique
Theorem 6.1: Pointer Doubling benötigt nur O(log n) Kommunikationsrunden, bis sich aus einem beliebigen schwach
zusammenhängenden Graphen eine Clique gebildet hat.
Beweis:
• Betrachte beliebige zwei Knoten v und w mit Distanz d (im
ungerichteten Fall).
v
w
• In zwei Kommunikationsrunden hat sich d (bis auf ein
additives 1) halbiert.
v
w
Selbststabilisierende Clique
Nachteil des Pointer Doubling: in einer Kommunikationsrunde
muss ein Knoten eventuell Θ(n) Pakete mit Θ(n) Adressen
empfangen, d.h. es müssen insgesamt Θ(n2) Adressen
empfangen werden, d.h. die Kommunikationskomplexität ist
sehr hoch.
Einsicht: Im worst case (anfangs schwach zusammenhängende
Liste) muss jedes Verfahren Ω(n) Adressen an jeden Knoten
schicken, um eine Clique zu formen.
Ist es möglich, in die Nähe des Aufwands Θ(n) zu kommen?
Selbststabilisierende Clique
Pull Strategie:
• Jeder Knoten u sendet in jeder Runde eine
pull Anfrage an einen zufälligen Knoten
v∈N(u).
• Für jede pull Anfrage, die u von einem
Knoten v empfängt, setzt u N(u):=N(u)∪{v}
und schickt einen zufälligen Knoten w∈N(u)
an v zurück, den v in seine Nachbarschaft
integriert.
pull
u
v
w∈N(v)
Selbststabilisierende Clique
Leave(u): Restgraph ist nach wie vor Clique
Join(u,v):
u
v
Theorem 6.2: Join(u,v) benötigt O(n log n)
Runden m.h.W. bis u vollständig in der
Clique integriert ist.
Selbststabilisierende Clique
Beweis:
Anzahl Runden, bis u alle kennt:
• Angenommen, u kennt bereits d Knoten.
• Wkeit, dass kontaktierter Knoten einen Knoten in N(u) an u zurückschickt ist d/n, also
Pr[d(u) bleibt d] = d/n
• E[#Runden mit Grad d]=1/(1-d/n) = n/(n-d)
• E[#Runden, bis u alle kennt]
= Σd=1n-1 E[#Runden mit Grad d]
= Σd=1n-1 n/(n-d) = Σi=1n-1 n/i = O(n ln n)
Selbststabilisierende Clique
Anzahl Runden, bis alle u kennen:
• Angenommen, u kennt bereits alle.
• Für jeden festen Knoten v gilt:
Pr[u kontaktiert v] = 1/n
• Also ist Pr[u kontaktiert v keinmal in c⋅n ln n Runden]
= (1-1/n)c⋅n ln n ≤ e-c ln n = (1/n)c
• D.h. nach O(n log n) Runden kennen alle u mit hoher
Wkeit.
Arbeit:
• Erwartete Anzahl Botschaften an jeden Knoten in
jeder Runde ist konstant.
• D.h. Arbeit pro Knoten ist O(n log n), was viel besser
als Pointer Doubling (mit Arbeit Ω(n2) ) ist.
Selbststabilisierende Clique
Selbststabilisierung der Pull Strategie:
• Korrektheit einfach nachzuweisen
(Distanzen zwischen Knoten verkürzen sich über die Zeit)
• Noch keine nichttriviale Laufzeitschranke
(Vermutung: O(n log n) w.h.W.)
Beweisidee:
• d(v): Grad von Knoten v.
• Betrachte festen Knoten u.
• Zeit verläuft in Phasen. In einer Phase unterscheiden wir zwischen zwei
Fällen:
1) ∃v∈N(u): d(v)>2d(u): Gradverdopplung von u nach ~d(u)2
Kommunikationsrunden.
2) ∀v∈N(u): d(v)≤2d(u): u kennt die Nachbarn aller Nachbarn nach ~d(u)2
Kommunikationsrunden
• Nach O(log n) Phasen ist Grad jedes Knotens mindestens n m.h.W., dafür
~O(n log n) Zeit.
• Danach Verdopplung alle weiteren O(n log n) Runden m.h.W.?
Selbststabilisierende Clique
Anwendung:
• Verteilter Konsensus und Transaktionen
(auf Cliquen einfach machbar!)
Nachteil:
• Eine Clique ist kein skalierbares Netzwerk
Besser Netzwerk kleiner Cliquen?
Selbststabilisierender Clustergraph
Cluster: lokale Clique
Gegeben: zusammenhängendes Netzwerk G=(V,E).
Ziel: Transformation in zusammenhängenden Graph G´, in dem
alle Knoten in Clustern der Größe minimal K und maximal 4K
organisiert sind.
Selbststabilisierende Regel für Clustergraph sehr kniffelig!!!
Einfacher: selbststabilisierende Liste
Übersicht
•
•
•
•
•
Dynamische Netzwerke
Selbststabilisierende Netzwerke
Selbststabilisierende Clique
Selbststabilisierende Liste
Zufällige Graphen
Selbststabilisierende Liste
Unser Ziel:
20
5
8
12
2
5
2
8
12
20
Selststabilisierende Liste
Naïver Ansatz:
• Stelle Nachbarn allen Nachbarn vor
• Transformiere Nachbarschaft in sortierte
Liste
Nicht skalierbar!
Anfangsgraph
Selbststabilisierende Liste
Besserer Ansatz: Linearisierung
Jeder Knoten macht das folgende:
temporär
3
5
8
12
14
16
3
5
8
12
14
16
stabil
Selbststabilisierende Liste
Theorem 6.3: Die Linearisierungsregel transformiert
jeden schwach zusammenhängenden Graphen in
O(n2) Runden in eine doppelt verkettete sortierte
Liste.
Beweis:
• Betrachte beliebiges Nachbarpaar v,w.
v
w
Bereich des Pfades von v nach w
Selbststabilisierende Liste
• Betrachte Randknoten des Pfades, z.B. u:
u
v
w
• Fall 1: u hat zwei ausgehende Kanten
u
• Linearisierung verkürzt dann den Bereich des
Pfades von v nach w
Selbststabilisierende Liste
• Betrachte Randknoten des Pfades, z.B. u:
u
v
w
• Fall 2: mindestens eine zu u eingehende Kante
u
x
• Fall 2a: u nächster Nachbar von x. Dann führt x
Kante (u,x) ein, damit Reduktion auf Fall 1.
Selbststabilisierende Liste
• Betrachte Randknoten des Pfades, z.B. u:
u
v
w
• Fall 2: mindestens eine zu u eingehende Kante
u
y
x
• Fall 2b: u nicht nächster Nachbar von x. Dann
führt x Kante (y,u) ein, damit Kantenlänge kleiner.
Selbststabilisierende Liste
• Betrachte Randknoten des Pfades, z.B. u:
u
v
w
• Fall 2: mindestens eine zu u eingehende Kante
u
y
x
• Fall 2b kann damit maximal n-mal auftauchen, bis
Fall 2a oder Fall 1 gilt.
Selbststabilisierende Liste
• Damit verkürzt sich der Bereich des Pfades
von v nach w nach spätestens n Runden um
mindestens 1.
• Insgesamt reichen also O(n2) Runden, bis v
mit w verbunden ist.
v
w
Bereich des Pfades von v nach w
Selbststabilisierende Liste
Schnellere aber aufwändigere Linearisierung:
• Alle Kanten werden beidseitig gerichtet gehalten
3
5
8
12
14
16
3
5
8
12
14
16
Problem: Transformation von {12,16} zu {14,16} muss
mit Knoten 16 koordiniert werden.
Selbststabilisierende Liste
Theorem 6.4: Beidseitige Linearisierung kann jeden
schwach zusammenhängenden Graphen in O(n)
Runden in eine doppelt verkettete sortierte Liste
transformieren.
Beweis: ähnlich zu Theorem 6.3.
Theorem 6.5: Jede lokale Stabilisierungsstrategie für
die sortierte Liste benötigt Ω(n) Runden bis zur
sortierten Liste.
Beweis:
3
5
8
12
14
16
Selbststabilisierende Liste
Problem: Eine Liste ist sehr verwundbar gegenüber
Ausfällen und gegnerischem Verhalten.
Lösung: verwende skalierbare Strukturen mit
besserem Zusammenhang
Idee: sortierte Liste, in der jeder Knoten mit seinen d
Vorgängern und Nachfolgern verbunden ist.
Beispiel für d=2:
2
5
8
12
20
Selbststabilisierende Liste
Übung: Regel für selbststabilisierende Liste
mit Kanten zu d Vorgängern und
Nachfolgern.
Problem: Struktur jetzt zwar stärker
zusammenhängend, aber Durchmesser
noch sehr hoch.
Lösung: zufällige Graphen
Übersicht
•
•
•
•
•
Dynamische Netzwerke
Selbststabilisierende Netzwerke
Selbststabilisierende Clique
Selbststabilisierende Liste
Zufällige Graphen
Zufällige Graphen
Übersicht:
• Eigenschaften von zufälligen d-regulären
Graphen
• Selbststabilisierende Transformation eines
beliebigen schwach zusammenhängenden
Graphen in zufälligen d-regulären
Graphen
Eigenschaften zufälliger Graphen
• d-regulärer Graph: ausgehender Grad aller Knoten ist
d.
• zufälliger Graph: jede ausgehende Kante hat einen
uniform zufällig ausgewählten Knoten als Ziel
Theorem 6.6: Ein zufälliger d-regulärer Graph G erfüllt
mit hoher Wkeit
∀U⊆V, |U|≤|V|/d: |N(U)|≥d|U|/2
d.h. G ist ein Expander.
d-reguläre Graphen sind also sehr stark zusammenhängend und daher sehr robust gegenüber Ausfällen.
Eigenschaften zufälliger Graphen
Beweis:
• n: Anzahl der Knoten, m:Teilmengengröße.
n
• m : Anzahl Teilmengen der Größe m
•
dm
dm/2
: Anzahl Möglichkeiten, dm/2 der dm
ausgehenden Kanten in U auszuwählen.
• m/n : Wkeit, dass zufällige ausgehende Kante in U
hineinzeigt.
• Also gilt:
Pr[∃U⊆V, |U|≤|V|/d: |N(U)|<d|U|/2]
≤
n
m
dm
dm/2
m dm/2
≤
n
en m dm m dm/2
2
m
n
• Das ist poly klein falls m≤n/d und d genügend groß.
Dynamische zufällige Graphen
Push&Pull Strategie:
• Jeder Knoten u sendet in jeder Runde eine push Anfrage mit
einem zufälligen Knoten w∈N(u) an einen zufälligen Knoten
v∈N(u). Falls d(u)≥d, dann löscht u w aus N(u).
• Für jede push Anfrage mit Knoten w, die u von einem Knoten
v empfängt, setzt u N(u):=N(u)∪{w} und schickt eine pull
Anfrage mit einem zufälligen Knoten w´∈N(u) an v zurück.
Falls d(u)>d, dann löscht u w´ aus N(u).
• Für jede pull Anfrage mit Knoten w´, die u von einem Knoten v
empfängt, setzt u N(u):=N(u)∪{w´}.
Push&Pull realisiert einen lokalen Kantenwechsel („flip“):
w
w´
w
w´
v
u
v
push(w)
u
pull(w´)
Dynamische zufällige Graphen
Die ungerichtete flip Regel ist bereits analysiert
worden:
w
u
push(w)
pull(w´)
w´
w
w´
v
u
v
Theorem 6.7: G sei anfangs ein beliebiger dregulärer Graph. Nach O(n5) Anwendungen
der flip Regel auf ein zufälliges Paar von
Knoten {u,v} ist der resultierende Graph mit
hoher Wkeit ein zufälliger d-regulärer Graph.
Dynamische zufällige Graphen
Vermutung: Nach O(log n) vielen Runden
mit der Push&Pull-Regel ist der
resultierende Graph ein zufälliger ~dregulärer zusammenhängender Graph.
Beachte: flip-Regel gefährdet nicht
Zusammenhang
Noch Fragen?
Herunterladen