Vorlesung P2P Netzwerke 7: Gradoptimierte Netzwerke 7: Gradoptimierte Netzwerke Dr. Dominic Battré Complex and Distributed IT‐Systems dominic battre@tu berlin de dominic.battre@tu‐berlin.de Inhalte der Vorlesung (vorläufig) Einleitung • Was ist P2P? • Definition • Einsatzgebiete U Unstrukturierte Netze k i N • Napster • Gnutella • Super‐Peer Netzwerke Super Peer Netzwerke • Small‐World Netzwerke etc. Fortgeschrittenes • Sicherheit Strukturierte Netze • Verteilte Hash‐Tabellen • Grundlagen • Chord, CAN, Pastry, Kademlia • Programmieren von DHTs Programmieren von DHTs • Gradoptimierte Netzwerke • SkipNet, P‐Grid • Lastverteilung in strukturierten Netzen 02.06.2009 Anwendungen • OceanStore • BabelPeers • Amazon • Multicast Dominic Battré ‐ P2P Netzwerke 2 Inhalt ● Gradoptimierte Netzwerke (Überblick) ■ Viceroy ■ Distance Halvingg ■ Koorde 02.06.2009 Dominic Battré ‐ P2P Netzwerke 3 Grad vs. Durchmesser ● Bisher meist O(log N) Grad und O(log N) Durchmesser ● Geht der Grad kleiner, ohne den Durchmesser zu erhöhen? Grad g , Durchmesser d , Knotenanzahl N Nach x Hops erreiche ich maximal g x Knoten Mit d Hops erreiche ich jeden Knoten im Netz Also : g d = N Nach d aufgelöst : log( g d ) = log( N ), d.h. d = log( N ) log( g ) log(N) log(log(N)) Mit konstantem Grad ist aber ein logarithmi g scher Durchmesser möglich! g Es folgt : mit g = log(N) ist bester Durchmesser d = 02.06.2009 Dominic Battré ‐ P2P Netzwerke 4 Netzwerke mit konstantem Grad ● Viceroy: ■ Dalia Malkhi, Moni Naor and David Ratajczak: "Viceroy: A Scalable and Dynamic Emulation of the Butterfly", ACM Symp. Principles of Distributed Computing, 2002 ? 02.06.2009 Dominic Battré ‐ P2P Netzwerke 5 Viceroy ● Idee: Butterfly‐Graph als Basis für P2P Netzwerke nehmen ■ Resultiert in einem Netz mit konstantem Grad ■ Ist aber ein relativ kompliziertes Verfahren p ● Interessante "Abfallprodukte": ■ Wie schätze ich log(N)? Wie schätze ich log(N)? ■ Wie stelle ich besser verteilte Intervalle her? ♦ Speziell: Speziell: Maximal konstante Abweichung, also z.B. Länge des Maximal konstante Abweichung, also z.B. Länge des größten Intervalls ist max. 4 mal die Länge des kleinsten Intervalls ♦ Î Lösung: Prinzip der mehrfachen Auswahl 02.06.2009 Dominic Battré ‐ P2P Netzwerke 6 Butterfly‐Graphen Level 3 Level 2 Level 1 Level 1 Level 0 02.06.2009 Dominic Battré ‐ P2P Netzwerke 7 Viceroy Verbindungsstruktur ● Ein Ring mit allen Knoten ■ successor, predecessor ● Ein Ring pro Level ■ nextonlevel, prevonlevel t l l l l ● Butterfly‐Kanten ■ left: succ(l+1, s) left: succ(l+1 s) ■ right: succ(l+1, s+1/2l) ■ up: succ(l‐1, s) ● Notation: ■ succ(s) ist Nachfolger von s i ll in allgemeinem Ring i Ri ■ succ(l, s) ist Nachfolger von Quelle: Dalia Malkhi, Moni Naor and David Ratajczak: s auf Level l Ringg "Viceroy: Viceroy: A Scalable A Scalable and Dynamic Emulation of Dynamic Emulation of the Butterfly Butterfly" 02.06.2009 Dominic Battré ‐ P2P Netzwerke 8 Routing in Viceroy ● cur: Aktueller Knoten, x: Ziel ● Routing in 3 Phasen ● Phase 1: Gehe zu Level 1 ■ Solange dem up‐Pointer folgen, bis cur.level = 1 ● Phase 2: Nutzung der Butterfly‐Kanten ■ Wenn der right‐Pointer existiert und nicht zu weit zeigt ♦ Folge dem right‐Pointer ■ Wenn der left‐Pointer d l f existiert ♦ Folge dem left‐Pointer ■ Sonst mache mit Phase 3 weiter Sonst mache mit Phase 3 weiter ● Phase 3: Auf dem Ring suchen ■ Folge dem successor‐Pointer, bis Ziel erreicht Folge dem successor Pointer bis Ziel erreicht 02.06.2009 Dominic Battré ‐ P2P Netzwerke 9 Knotenankunft ● Wähle eine ID s zufällig ● In allgemeinen Ring einfügen ll f ■ Suche per Routing succ(s) ■ Passe Zeiger an (succ, pred, succ.pred, pred.succ) Passe Zeiger an (succ, pred, succ.pred, pred.succ) ● Levelauswahl ■ N0 = 1/distanz(s,succ(s)) ‐‐ Schätzung der Anzahl Knoten im Netz ■ Wähle einen Level l aus [1,…,floor(log N0)] uniform zufällig ● In Level‐Ring einfügen ■ Schrittweise Suche über allgemeinen Ring Schrittweise Suche über allgemeinen Ring ■ Passe Zeiger an (nextonlevel, predonlevel, etc.) ● Butterfly‐Kanten einfügen ■ up := succ(l‐1, s) (Single‐Stepping) ■ left := succ(l+1, s) (Single‐Stepping) ■ right ::= succ(l+1, s+(1/2 succ(l+1 s+(1/2l+1) (Lookup, dann Single ) (Lookup dann Single‐Stepping) Stepping) 02.06.2009 Dominic Battré ‐ P2P Netzwerke 10 Abschätzung von log(N) ● Sei d der Abstand zum Nachbarn ● Wenn d=1/N, gilt log(N)=‐log(d) ● Es gilt aber nur: Es gilt aber nur: ■ 1/N2 ≤ d ≤ log(N)/N mit hoher Wahrscheinlichkeit ● Betrachte ‐log(d): Betrachte ‐log(d): ■ Wenn d = 1/N2, dann ist ‐log(d) = ‐log(N‐2) = 2log(N) ■ Wenn d = log(N)/N, dann ist ‐log(d) = ‐log(log(N)*N Wenn d = log(N)/N dann ist log(d) = log(log(N)*N‐11) = )= log(N)‐log(log(N)) ● Daher gilt: Daher gilt: ■ 2log(N) ≥ ‐log(d) ≥ log(N) ‐ log(log(N)) ■ Also ist ‐log(d) eine gute Abschätzung für log(N) Also ist log(d) eine gute Abschätzung für log(N) 02.06.2009 Dominic Battré ‐ P2P Netzwerke 11 Prinzip der mehrfachen Auswahl ● Problem: wie erreiche ich konstanten Ein‐Grad? ● Dazu müssen die Intervalle besser angepasst sein ● Bisher: Abweichungen sind: ■ um Faktor N kleiner ■ um Faktor log(N) größer ● Ziel: ■ Kleinstes Intervall ist 1/2N, größtes ist 2/N ■ Also Abweichung um max. Faktor 4 (konstant) ● Lösung: mehrfache Auswahl ■ Wähle bei der Knotenankunft zufällig ceil(log(N)) IDs ■ Positioniere den Knoten in der Mitte des größten Intervalls 02.06.2009 Dominic Battré ‐ P2P Netzwerke 12 Netzwerke mit konstantem Grad ● Distance Halving: ■ Moni Naor, Udi Wieder: "Novel Architectures for P2P Applications: the Continuous‐Discrete Approach", SPAA 2003 02.06.2009 Dominic Battré ‐ P2P Netzwerke 13 Distance Halving ● ID‐Bereich ist Intervall [0,1) ● Diesmal nicht zyklisch! ● Jeder Knoten bekommt ein Intervall nach dem Prinzip der mehrfachen Auswahl zugewiesen ■ Also hat jeder Knoten ein Intervall der Größe 1/2N ≤ I ≤ 2/N 1/2N I ≤ 2/N ● Sei das Intervall des Knotens [I1, I2) ● Für jedes I aus [I1, I2) hat der Knoten Zeiger auf Für jedes I aus [I1 I2) hat der Knoten Zeiger auf I/2 sowie (1+I)/2 ● Es werden auch die Rückwärtskanten verwaltet! Es werden auch die Rückwärtskanten verwaltet! ● Damit ist sowohl der Ein‐Grad aus auch der Aus‐Grad konstant! 02.06.2009 Dominic Battré ‐ P2P Netzwerke 14 Distance Halving I2/2 0 2 I2/2 = 0.2 I1/2 = 0.15 0 (1+I1)/2 = 0.65 ((1+I2)/2 = )/ 0.7 I1=0.3 I2=0.4 K2 K3 Intervall von Knoten K1 K4,K5,K6 1 Routing‐Tabelle von K1 enthält Kanten zu jedem R i T b ll K1 häl K j d Peer in den Ziel‐Intervallen, plus die Rückwärts‐ Kanten Dies ergibt einen konstanten Grad! Kanten. Dies ergibt einen konstanten Grad! 02.06.2009 Dominic Battré ‐ P2P Netzwerke 15 Routing in DH ● Wie erreiche ich vom Knoten I=[I1, I2) eine ID, die im Intervall von Knoten J=[J1, J2) liegt? ● Verfolge die Links‐Kanten beider Knoten: g ■ I trifft auf I1, I1/2, I1/4, I1/8, … ■ J trifft auf J1, J1/2, J1/4, J1/8, … , / , / , / , ● Irgendwann liegen beide Zeiger in einem Intervall: O.B.d.A. sei J1 > I1 J 1 I1 2 − ≤ (maximale Intervallgröße) 2k 2k N k J −I 2 2 N J −I J −I ⇔ 1 k 1≤ ⇔ ≥ ⇔ 2 k ≥ N 1 1 ⇔ k ≥ log( l (N 1 1 ) 2 N J 1 − I1 2 2 2 Gesucht ist ein k mit : Ab diesem k sind beide Pointer auf dem gleichen Knoten. D.h. es werden max. O (log N ) Schritte benötigt! 02.06.2009 Dominic Battré ‐ P2P Netzwerke 16 Routing in DH Start Ziel Dieses Verfahren kann zu Überlast auf den vorderen Knoten führen! Gibt es noch alternative Wege? 02.06.2009 Dominic Battré ‐ P2P Netzwerke 17 Routing in DH 1 Left‐Routing(Start, Ziel) 2 if Start und Ziel benachbart then 3 Leite Nachricht von Start nach Ziel 4 else 5 Neuer‐Start = Links‐Zeiger(Start) g ( ) 6 Neues‐Ziel = Links‐Zeiger(Ziel) 7 Sende Nachricht von Start nach Neuer‐Start 8 Left‐Routing(Neuer‐Start, Neues Ziel) 9 Sende Nachricht von Neues‐Ziel nach Ziel 02.06.2009 Dominic Battré ‐ P2P Netzwerke 18 Alternative Routen ● Beobachtung: ■ I/2‐J/2 = (I‐J)/2 ■ (1+I)/2‐(1+J)/2 = (I‐J)/2 ( ) ( ) ( ) ● D.h., egal ob ich einen Doppel‐Sprung nach Links oder nach Rechts mache: ■ Die Restdistanz wird immer halbiert ● Daher: ■ Zur Lastbalancierung wird die Reihenfolge zufällig bestimmt ■ z.B.: Recht z B : Recht – Links Links – Links Links – Rechts Rechts – Links etc. Links etc 02.06.2009 Dominic Battré ‐ P2P Netzwerke 19 Netzwerke mit konstantem Grad ● Koorde: ■ M. Frans Kaashoek, David R. Karger: "Koorde: A simple degree‐optimal distributed hash table", Proceedings of the 2nd International Workshop on Peer‐to‐Peer Systems (IPTPS '03), 2003 02.06.2009 Dominic Battré ‐ P2P Netzwerke 20 Koorde ● Betrachte folgende Operationen auf Bit‐Strings: ■ Shuffle: Bits um eine Stelle zyklisch rotieren ■ Shuffle‐Exchange: Bits um eine Stelle zyklisch rotieren, dabei g y ein Bit invertieren Sh ffl Shuffle 1 0 1 1 0 Sh ffl E h Shuffle‐Exchange 1 0 1 1 0 1 1 0 1 0 1 0 1 1 0 1 0 1 0 Exchange 0 02.06.2009 1 1 0 1 0 1 1 Dominic Battré ‐ P2P Netzwerke 21 Koorde J d Bitf l kann über Jede Bitfolge k üb Shuffle (‐Exchange) Operationen in jede andere Bitfolge übersetzt werden Quelle: Mahlmann, Schindelhauer Peer‐to‐Peer Peer to Peer Netzwerke Netzwerke 02.06.2009 Dominic Battré ‐ P2P Netzwerke 22 Der DeBruijn Graph SE 100 S S 010 000 001 SE S SE SE 101 S 011 SE S S 110 SE SE 111 Der Graph ist verbunden und hat konstanten Ein‐ und Ausgrad! g 02.06.2009 Dominic Battré ‐ P2P Netzwerke 23 DeBruijn Graph als P2P Netz ● Knoten werden auf Ring angeordnet (wie Chord) ● Statt Chord‐Fingerzeigern werden DeBruijn‐Kanten eingesetzt g 000 111 001 110 010 101 011 100 02.06.2009 Dominic Battré ‐ P2P Netzwerke 24 Imaginäre Knoten ● ● ● ● Peer‐to‐Peer Netzwerke haben selten genau 2m Knoten Im Beispiel m=4 ist Netz schon bei 16 Knoten voll Daher m=128 Daher m 128 oder m oder m=160 160 Sei n tatsächliche Knotenanzahl im Netz, dann gibt es 2m – n virtuelle Knoten n virtuelle Knoten ● Kanten auf virtuelle Peers werden auf vorangehenden echten Knoten umgebogen (dies ist der für den virtuellen echten Knoten umgebogen (dies ist der für den virtuellen Peer verantwortliche Knoten) ● Äquivalent: Jeder Peer ist für die nachfolgenden virtuellen Äquivalent: Jeder Peer ist für die nachfolgenden virtuellen Peers zuständig 02.06.2009 Dominic Battré ‐ P2P Netzwerke 25 Wohin zeigen die DeBruijn‐Kanten? Shuffle mit führender 0 Shuffle mit führender 1 0 0 1 1 0 1 0 1 1 0 1 1 0 1 0 1 0 0 0 1 1 0 1 0 1 1 1 0 1 0 1 1 ergibt (2*x+1) mod g ( ) 2m ergibt (2*x) ergibt (2 x) SE mit führender 0 0 0 0 1 SE mit führender 1 1 1 0 1 0 1 1 0 1 1 0 1 0 1 1 0 1 0 1 1 0 1 1 0 1 0 1 0 ergibt (2*x+1) 02.06.2009 ergibt (2*x) mod 2m Dominic Battré ‐ P2P Netzwerke 26 Wohin zeigen die DeBrujin‐Kanten? ● Mit hoher Wahrscheinlichkeit zeigen 2*x mod 2m und 2*x + 1 mod 2m auf den selben realen Knoten. auf den selben realen Knoten ● Daher nur eine DeBrujin Kante pro Knoten 02.06.2009 Dominic Battré ‐ P2P Netzwerke 27 Routing ● Jeder Knoten p kennt ■ Vorgänger ■ Nachfolger ■ Knoten 2*p mod 2m, bzw. Knoten, der dafür verantwortlich ist ● Datenzuordung wie bei Chord (Datum bei Nachfolger von ID gespeichert) i h t) ● Routing zwischen 2m wird auf reale Knoten abgebildet ■R Route über DeBrujin t üb D B ji Kanten zu nächstem Knoten K t ä ht K t ■ Erreichen in jedem Schritt Knoten, der für entsprechenden imaginären Knoten zuständig ist oder imaginären Knoten zuständig ist, oder ■ Landen vor Knoten, der für entsprechenden imaginären Knoten zuständig ist, dann auf Ring Nachricht weiterleiten 02.06.2009 Dominic Battré ‐ P2P Netzwerke 28 Routing in Koorde 1 2 3 4 5 6 7 n.lookup(k, kshift, i) p( , , ) if k in (n, successor] return successor; else if i in (n, successor] then return d.lookup(k, (kshift o 0) mod 2^m, (i o topBit(kshift)) mod 2^m) else return successor.lookup(k, kshift, i) Erklärungen: n k successor d i kshift Aktueller Knoten Key, zu dem geroutet wird Nachfolger von n auf dem Ring V Vorgänger von 2n (DeBruijn‐Kante) ä 2 (D B ij K t ) Imaginärer DeBruijn‐Knoten Anfangs kshift=k, dann immer weiter geshiftet 02.06.2009 Dominic Battré ‐ P2P Netzwerke 29 Imaginärer Startknoten ● Routing‐Schritte bisher: ■ Anzahl Bits im Identifier (m) ■ plus Anzahl successor‐Schritte ● Wie erreiche ich log(N) Routing? Wi i h i h l (N) R ti ? ● In der Wahl des imaginären Startknotens habe ich Freiheiten: ■ die unteren Bits können frei gewählt werden die unteren Bits können frei gewählt werden ■ Ich kann sie an die oberen Bits des Schlüssels anpassen: durch n vorgegeben 02.06.2009 frei i 0 0 1 1 0 1 0 1 k 1 0 1 0 1 1 1 0 Dominic Battré ‐ P2P Netzwerke 30 Koorde 15 0 1 14 2 13 3 12 4 11 5 10 6 9 8 02.06.2009 7 Dominic Battré ‐ P2P Netzwerke 31 Koorde 15 0 1 14 2 13 3 12 4 11 5 10 6 9 8 02.06.2009 7 Dominic Battré ‐ P2P Netzwerke 32 Koorde 15 0 1 14 2 13 3 12 4 11 5 10 6 9 02.06.2009 8 7 Dominic Battré ‐ P2P Netzwerke 33 Koorde 15 0 1 14 Route von 13 nach 12: oute o 3 ac 2 13 Quelle kann sein: 1101 (13) 1101 (13) 1110 (14) 3 12 4 11 5 10 6 9 7 8 02.06.2009 Ziel ist ist 1100 (12) Imaginäre Route: 1110 ‐> (SE) ‐> 1100 14 ‐> 12 Tatsächliche Route: 13 ‐> 9 ‐> 11 (‐> 13) ( ) Dominic Battré ‐ P2P Netzwerke 34 Zusammenfassung ● Gradoptimierte Netze: ■ Bei Grad O(1) ist Durchmesser O(log(N)) erreichbar! ● Ansätze: ■ Viceroy: Butterfly‐Graph simulieren Vi B tt fl G h i li ■ Distance Halving: Distanz in jedem Schritt halbieren ■ Koorde: DeBruijn Koorde: DeBruijn‐Graph Graph simulieren simulieren ● Bewertung: ■ Interessante Ansätze, in der Praxis nicht erprobt ■ Stabilisierung, Lokalität etc. schwierig bzw. nicht erforscht ■ Höherer Grad für Zusammenhalt durchaus wünschenswert ● "Abfallprodukte": ■ Schätzung von log(N) ■ Prinzip der mehrfachen Auswahl Prinzip der mehrfachen Auswahl 02.06.2009 Dominic Battré ‐ P2P Netzwerke 35