Vorlesungg P2P Netzwerke 8: SkipNet, P 8: SkipNet , P‐‐Grid Dr. Dominic Battré Complex and Distributed IT‐Systems dominic battre@tu berlin de dominic.battre@tu‐berlin.de SkipNet ● Nicholas J.A. Harvey, Michael B. Jones, Stefan Saroiu, Marvin Theimer, Alec Wolman: "SkipNet: A Scalable Overlay Network with Practical Locality Properties", Proceedings of USITS 2003 USITS, 2003 ? ● James James Aspnes, Gauri Aspnes Gauri Shah: Shah: "Skip Skip Graphs Graphs", Fourteenth Fourteenth Annual ACM‐SIAM Symposium on Discrete Algorithms, 2003, pp. 384–393 , pp ● William Pugh: "Skip Lists", Commun. ACM, 33:6, pp. 668‐ 676, 1990 11.06.2009 Dominic Battré ‐ P2P Netzwerke 2 Probleme mit DHTs ● DHTs "zerhacken" die Daten (wie normale Hash‐Tabellen auch) ● Daten "Meyer" und "Meier" landen auf völlig g unterschiedlichen Knoten ● Daher sind keine Bereichsanfragen möglich (z.B.: Alle Daten g g ( die mit "M" beginnen) ● Eine Lösung dafür: SkipNet g p ● SkipNet basiert auf der Idee der Skip‐Graphen, die wiederum auf Skip‐Listen basieren p 11.06.2009 Dominic Battré ‐ P2P Netzwerke 3 Skip‐Listen ● ● ● ● Ausgangspunkt: Verkettete Liste, aufsteigend sortiert Hier: direkt zu einem Ring verbunden Suche ist in nur in linearer Zeit möglich Suche ist in nur in linearer Zeit möglich Zur Beschleunigung: Weiter entfernte Listenelemente "verzeigern" verzeigern A C D 11.06.2009 G I L X Dominic Battré ‐ P2P Netzwerke 4 Skip‐Listen ● Elemente bekommen eine zufällige Höhe ● Zusätzliche Verzeigerung in jeder Höhe A I A A D C D 11.06.2009 I G I X L X Dominic Battré ‐ P2P Netzwerke 5 Skip‐Listen ● ● ● ● Skip‐Liste als P2P Netzwerk? Jedes Listenelement ist ein Knoten? Wie route ich von C nach X? Wie route ich von C nach X? Probleme: Knotenausfälle, Last A I A A 11.06.2009 D C D I G Dominic Battré ‐ P2P Netzwerke I X L X 6 Skip‐Listen Æ Skip‐Graphs ● Idee: Durch weitere Verbindungen Zusammenhang stärken Höhe A L 4 3 G C A L D C G A D L I X A C D G L I X A C D G I L X 2 1 0 11.06.2009 Dominic Battré ‐ P2P Netzwerke 7 Routing 1 2 3 4 5 6 7 8 9 10 11 // route a msg by name ID RouteByNameID(msg) h = localNode.maxHeight while h >= 0 nbr b = localNode.RouteTable[h] l l d bl [h] if nbr.nameID in [localNode.nameID, msg.nameID] SendToNode(msg, nbr) return h = h ‐ 1; // h<0 implies we are the closest node // h<0 implies we are the closest node. DeliverMessage(msg) 11.06.2009 Dominic Battré ‐ P2P Netzwerke 8 Skip‐Net: Num‐ID 0 A L 0 C G 0 C 0 A 0 A 11.06.2009 A 1 G 0 C C L D 0 D 1 1 D 0 G 0 D 0 1 1 1 0 1 0 0 0 1 0 0 0 0 1 0 1 A C D G I L X 1 1 A 0 0 1 1 0 G Dominic Battré ‐ P2P Netzwerke L 1 L 0 I 0 1 I 1 I X L X 1 X 9 In welche Ringe wird ein Knoten aufgenommen? ● numID eines Knotens bestimmt die Ring‐Teilnahme ● Zufällige Bitfolge (128 Bit) ● Wird beim Start vom Knoten ausgewürfelt Wird beim Start vom Knoten ausgewürfelt ● Wie findet der Knoten die Ringe? Wie findet der Knoten die Ringe? ■ Ein Knoten des Netzwerkes muss bekannt sein ■ Dieser wird kontaktiert Dieser wird kontaktiert ■ Über eine Nachricht wird ein Knoten gesucht, dessen numID möglichst weit mit der des neuen Knotens übereinstimmt möglichst weit mit der des neuen Knotens übereinstimmt ■ Æ Routing nach numID 11.06.2009 Dominic Battré ‐ P2P Netzwerke 10 Routing nach numID ● A will an 0111 routen Höhe A L A L A D L 10 I 1 I X L X 4 000 G 3 00 001 C 010 01 011 D C G A C D G L A C D G I 11 X 2 0 1 0 11.06.2009 Dominic Battré ‐ P2P Netzwerke 11 Routing nach numID ● Statusinformationen: ■ ringLvl (Anfangswert 0) ♦ Auf welchem Level bewegt sich die Nachricht? ■ startNode (Anfangswert nil) ♦ Bei welchem Knoten begann der Durchlauf im aktuellen Ring? ■ bestNode (Anfangswert nil) ♦ Welcher Knoten ist der bisher dichteste? ■ finalDestination (Anfangswert false) ♦ Hat die Nachricht bereits den Zielknoten erreicht? 11.06.2009 Dominic Battré ‐ P2P Netzwerke 12 Routing nach numID 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 // route msg via numeric ID RouteByNumericID(msg) if msg.numID == localNode.numID || msg.finalDestination DeliverMessage(msg) return if localNode == msg.startNode msg.finalDestination = true SendToNode(msg.bestNode) return h = CommonPrefixLen(msg.numID, localNode.numID) if h > msg.ringLvl g g msg.ringLvl = h msg.startNode = msg.bestNode = localNode else if |localNode.numID‐msg.numID| < |msg.bestNode.numID‐msg.numID| msg.bestNode = localNode nbr = localNode.RouteTable[msg.ringLvl] SendToNode(nbr) 11.06.2009 Dominic Battré ‐ P2P Netzwerke 13 IDs in SkipNet ● Jeder Knoten hat eine Name‐ID und eine Num‐ID ● Die Name‐ID ist frei wählbar, die Num‐ID ist eine gewürfelte Bitfolge g ● Die Name‐ID bestimmt die Reihenfolge im Root‐Ring ● Die Num Die Num‐ID ID bestimmt, in welchen Ringen auf höheren bestimmt, in welchen Ringen auf höheren Ebenen der Knoten partizipiert ● Routing ist über beide IDs möglich Routing ist über beide IDs möglich ● Name‐IDs können ungleich verteilt sein 11.06.2009 Dominic Battré ‐ P2P Netzwerke 14 Hinzufügen von Knoten ● Über bekannten Knoten wird Nachricht an die Num‐ID des neuen Knotens geschickt ● Dieser kennt alle Ringe, in die der neue Knoten eingefügt wird ● Einfügen von Oben nach unten 1 2 3 4 5 6 While ( current Level > 0 ) If Name Id between current Node and next on level Insert between; current level = current level – 1; Else Forward to next node on current level ● Aber: Die Nachbarn werden zunächst nur aufgesammelt ● Am Ende wird in einer Operation überall der Insert durchgeführt 11.06.2009 Dominic Battré ‐ P2P Netzwerke 15 Stabilisierung des Root‐Rings ● Im Root‐Ring Liste von x Nachfolgern sammeln (z.B. x=8) ● Wenn der Nachfolger ausfällt, ist der neue Nachfolger bekannt ● Neuer Nachfolger wird über seinen neuen Vorgänger informiert ● Liste der Nachfolger wird jeweils an den Vorgänger weitergegeben g g 11.06.2009 Dominic Battré ‐ P2P Netzwerke 16 Stabilisierung der höheren Ringe ● In den höheren Ringen ist nur jeweils ein Nachfolger bekannt ● Wenn dieser ausfällt, ist der Ring zunächst defekt g ● Routing ist trotzdem möglich ■ wie? wie? ● Ein höherer Ring wird repariert, indem der neue Nachfolger im niedrigeren Ring gesucht wird im niedrigeren Ring gesucht wird ● D.h., die Ringe werden nacheinander "von unten nach oben" repariert oben repariert ● Alternative: Auch in höheren Ringen mehrere Nachfolger speichern 11.06.2009 Dominic Battré ‐ P2P Netzwerke 17 Aufwand ● Routing nach name ID: ■ O(log N) ● Routing nach num g ID: ■ O(log N) ● Intuition: ■ Die Die Zeiger in der Routing‐Tabelle sind exponentiell verteilt, Zeiger in der Routing‐Tabelle sind exponentiell verteilt daher wird in jedem Schritt die Hälfte der restlichen Distanz übersprungen 11.06.2009 Dominic Battré ‐ P2P Netzwerke 18 Zusammenfassung ● SkipNet: Strukturiertes P2P Netzwerk ohne Hashing ● Daten werden sortiert auf einem Ring abgelegt ● Zur schnelleren Suche wird der Ring rekursiv in Teilringe Zur schnelleren Suche wird der Ring rekursiv in Teilringe aufgeteilt ● Knoten haben eine Name Knoten haben eine Name‐ID ID und eine numerische ID und eine numerische ID ● Suche ist nach beiden IDs möglich ● Name‐ID Suche durchläuft die Ringe von oben nach unten Name ID Suche durchläuft die Ringe von oben nach unten ● Num‐ID Suche durchläuft die Ringe von unten nach oben 11.06.2009 Dominic Battré ‐ P2P Netzwerke 19 P‐Grid ● Karl Aberer, Anwitaman Datta, Manfed Hauswirth, Roman Schmidt: "Das P Grid Overlay Netzwerk: Von einem einfachen Schmidt: "Das P‐Grid‐Overlay‐Netzwerk: Von einem einfachen Prinzip zu einem komplexen System", Datenbank‐Spektrum 13, 2005 ● Karl Aberer: "P‐Grid: A Self‐Organizing g g Access Structure for P2P Information Systems", Sixth International Conference on Cooperative Information Systems (CoopIS 2001), Trento, Italy, Lecture Notes in Computer Science 2172, Springer Verlag, p , p g g, Heidelberg, 2001. ● www.p‐grid.org 11.06.2009 Dominic Battré ‐ P2P Netzwerke 20 P‐Grid ● Grundidee: ■ SSchlüssel werden nicht gehasht hlü l d i h h h ■ Schlüssel werden auf binäre Zeichenketten abgebildet (ASCII‐ /Huffman‐Kodierung) ■ Routing erfolgt über einen Binärbaum 0 0 0 11.06.2009 1 0 0 1 1 0 1 0 1 1 1 0 0 1 0 1 Dominic Battré ‐ P2P Netzwerke 0 0 1 1 0 1 0 1 1 0 1 21 Aufbau von P‐Grid Buckets mit jeweils gleichen Datenmengen gleichen Datenmengen 0 0 0 0 1 1 0 1 0 0 Zugeordnete Peers 1 0 1 1 0 1 0 1 1 1 0 11.06.2009 1 Dominic Battré ‐ P2P Netzwerke 22 Routing in P‐Grid ● Die ID eines Peers ist seine eindeutige Kennung im Netz ■ Kennung hat nichts mit der Position im Baum zu tun ● ● ● ● Die Position wird dynamisch festgelegt und verändert Die Position nennt sich der Pfad des Peers Der Pfad ist eine binäre Zeichenkette beliebiger Länge Für jedes Präfix seines Pfades hat der Peer einen (oder mehrere) Zeiger auf andere Peers mit ■ gleichem Präfix aber dann anderer Fortsetzung (0 → 1, 1 → 0) ■ falls so ein Peer existiert falls so ein Peer existiert ● Woran erinnert das? ● Wie funktioniert das Routing? Wie funktioniert das Routing? 11.06.2009 Dominic Battré ‐ P2P Netzwerke 23 Routing in P‐Grid Peer‐Identifikation Datenschlüssel 1 0 : 2 Routing‐Tabelleneintrag 00 1 00* 1 01 : 2 : 3 7 00* 1 01 : 6 :8 : 8 01 010 4 010* 1 : 2 00 : 7 011 : 3 5 010* 1 : 6 00 : 1 011 : 8 11.06.2009 1 2 1* 0 : 1 011 3 011* 6 1* 0 : 3 1 : 6 00 : 1 011 : 4 8 011* 1 : 2 00 : 1 010 : 5 Quelle: K. Aberer, et al.: "Das P‐Grid‐Overlay‐Netzwerk: Von einem einfachen Prinzip zu einem komplexen System" Dominic Battré ‐ P2P Netzwerke 24 Routing in P‐Grid ● Präfixrouting wie bei Pastry / Tapestry ● Pfade können aber beliebig lang werden ■ Maximale Routingtabellen‐Größe garantiert nicht mehr g g O(log N) ● Routing ist trotzdem schnell: g ■ Zufällige Knoten werden für Routingtabelleneinträge gewählt ■ Es können häufig mehrere Bits in einem Schritt aufgelöst g g werden ● Bereichsanfragen erlaubt g 11.06.2009 Dominic Battré ‐ P2P Netzwerke 25 Aufbau von P‐Grid ● Grundidee: ■ Knoten sind über unstrukturiertes Netz verbunden ■ Neuer Index (P‐Grid Struktur) wird über dieses Netz gelegt ● B Bootstrapping: Baum nur mit Wurzel, alle Peers und alle Daten tt i B it W l ll P d ll D t befinden sich in der Wurzel ● Rekursive Aufteilung: Rekursive Aufteilung: ■ Solange genügend Peers in einem Bucket: ■ Teile Bucket in zwei Hälften (0‐Pfad, 1‐Pfad) ■ Verteile Peers zahlenmäßig entsprechend der Datenmengen ● Dann dynamische Operationen ■ Peers kommen und gehen ■ Daten kommen und gehen ■ hier nicht weiter betrachtet hier nicht weiter betrachtet 11.06.2009 Dominic Battré ‐ P2P Netzwerke 26 Zusammenfassung Strukturierte P2P Netze Strukturierte P2P Netze ● Chord ■ log(N)‐Routing bei log(N)‐Grad l (N) R ti b i l (N) G d ■ Intuitiv und einfach, gut zum Einstieg ● CAN ■ Fülle Fülle Interessanter Ideen, aber Interessanter Ideen aber polynomielles Routing ● Pastry, Tapestry ■ Ähnlich zu Chord, berücksichtigen Lokalität k l ■ Pastry: Praktisch gut einsetzbar, Tapestry: Theorie interessant ● SkipNet ■ Interessante Alternative zum Hashing, aber keine Lokalität ● P‐Grid ■ Präfix‐Ansatz ohne Hashing, Lokalität könnte berücksichtigt werden ■ Konzept des Bootstrappings eines Netzwerkes ● Kademlia ■ Fehlertollerant, parallele Lookups ● Viceroy, Distance Halving, Koorde ■ Gradoptimierte Netze ■ Interessante Ansätze, aber nicht praxistauglich ■ Wichtige Abfallprodukte 11.06.2009 Dominic Battré ‐ P2P Netzwerke 27 Zusammenfassung Strukturierte P2P Netze Strukturierte P2P Netze ● Chord ■ log(N)‐Routing bei log(N)‐Grad l (N) R ti b i l (N) G d ■ Intuitiv und einfach, gut zum Einstieg ● CAN Interessanter Ideen aber ■ Fülle Fülle Interessanter Ideen, aber polynomielles Routing ● Pastry, Tapestry ■ Ähnlich zu Chord, berücksichtigen Lokalität k l ■ Pastry: Praktisch gut einsetzbar, Tapestry: Theorie interessant ● Kademlia ■ Fehlertollerant, parallele Lookups ● Viceroy, Distance Halving, Koorde ■ Gradoptimierte Netze ■ Interessante Ansätze, aber nicht praxistauglich ■ Wichtige Abfallprodukte Hashingg 11.06.2009 ● SkipNet ■ Interessante Alternative zum Hashing, aber keine Lokalität ● P‐Grid ■ Präfix‐Ansatz ohne Hashing, Lokalität könnte berücksichtigt werden ■ Konzept des Bootstrappings eines Netzwerkes Kein Kein Hashingg Dominic Battré ‐ P2P Netzwerke 28