Inhalte der Vorlesung (vorläufig) Einleitung Vorlesungg P2P Netzwerke • Was ist P2P? • Definition • Einsatzgebiete 6: Kademlia 6: Kademlia Dr. Dominic Battré Complex and Distributed IT‐Systems dominic battre@tu berlin de dominic.battre@tu‐berlin.de • Verteilte Hash‐Tabellen • Grundlagen • Chord, CAN, Pastry, Kademlia • Programmieren von DHTs Programmieren von DHTs • Gradoptimierte Netzwerke • SkipNet, P‐Grid • Lastverteilung in strukturierten Netzen Kademlia Fortgeschrittenes • Sicherheit Anwendungen • OceanStore • BabelPeers • Amazon • Multicast Dominic Battré ‐ P2P Netzwerke 2 Kademlia ● Kademlia ● Populäre DHT (muTorrent, Ktorrent, Vuze, BitTorrent, Cspace, eDonkey 2000, MLDonkey, … siehe Wikipedia) ● Geringer Wartungsaufwand für konsistente Routing g g g Tabellen ● Knoten haben genügend Informationen und Flexibilität um g g Low‐Latency Pfade zu wählen ● Parallele, asynchrone Anfragen, um Verzögerungen durch , y g , g g Timeouts zu umgehen ● Sehr Robust (u.A. ( ggegen gewisse Denial g g of Service Angriffe) g ) ■ Petar Maymounkov and David Mazierès: "Kademlia: A Peer‐ to‐peer information System Based on the XOR Metric", 1st International Workshop on Peer‐to‐peer Systems, 2002 Dominic Battré ‐ P2P Netzwerke • Napster • Gnutella • Super‐Peer Netzwerke Super Peer Netzwerke • Small‐World Netzwerke etc. Strukturierte Netze 28.05.2009 28.05.2009 U Unstrukturierte Netze k i N 3 28.05.2009 Dominic Battré ‐ P2P Netzwerke 4 XOR Metrik XOR Metrik ● Eigenschaften: ● Distanz d(A, B) = A ⊕ B 0 0 000 1 0 1 1 0 0 001 010 1 011 0 1 1 100 ■ d(X,X) = 0 ■ d(X,Y) = 0 → X=Y ■ d(X,Y) = d(Y,X) → Anfragen kommen von Knoten, die in Routing Tabelle d(X Y) d(Y X) → A f k K di i R i T b ll stehen können (→ Verbessern der Tabellen) ■ d(X,Y) ≤ d(X,Z) + d(Z,Y) ( , ) ( , ) ( , ) ■ Zu jedem Knoten gibt es genau einen Knoten mit Distanz d → Routingpfade konvergieren am Ende → Caching möglich → Caching möglich 0 1 ■ Knoten im gleichen Unter‐ baum sind nah beieinander 0 1 0 1 101 0 110 1 111 010 100 110 = 4 + 2 = 6 28.05.2009 0 000 Dominic Battré ‐ P2P Netzwerke 5 28.05.2009 Routing Tabelle 1 001 0 010 1 011 0 100 Dominic Battré ‐ P2P Netzwerke 1 101 0 110 1 111 6 Routing Tabelle ● Jeder Knoten kennt mindestens einen Knoten in jedem Unterbaum, sofern dieser Unterbaum einen Knoten enthält. ● Knoten Id: ● Unterbaum i: Unterbaum i: 28.05.2009 01… 01101 01101… Präfix der Länge i 000… 1… 011001010011001 (i+1)‐tes Bit geflippt 0010… Q Quelle: Kademlia: A Peer‐to‐peer p Information System Based f y on the XOR Metric Petar Maymounkov and David Mayières Dominic Battré ‐ P2P Netzwerke 7 28.05.2009 Dominic Battré ‐ P2P Netzwerke 8 Routing Beispiel Routing Tabelle ● Routing von 0011… nach 1110… Q Quelle: Kademlia: A Peer‐to‐peer p Information System Based f y on the XOR Metric Petar Maymounkov and David Mayières 28.05.2009 Dominic Battré ‐ P2P Netzwerke 9 28.05.2009 Dominic Battré ‐ P2P Netzwerke k‐Buckets k‐Buckets ● Bevorzugung alter Knoten verbessert Stabilität Ein k‐Bucket für jede Präfixlänge 0≤i<160 Jeder Bucket enthält bis zu k Knoten (z.B. k=20) Einträge in Buckets nach „least‐recently seen“ sortiert Bei Empfang von Nachricht von Peer p P(bei t + 60 n noch onlin ne) ● ● ● ● 10 ■ Wenn p schon in Bucket: verschiebe an Ende von Bucket ■ Wenn p nicht in Bucket: Wenn p nicht in Bucket: ♦ Wenn Bucket weniger als k Peers enthält: am Ende aufnehmen ♦ Sonst: ○ wenn erster Peer in Bucket auf Ping reagiert: verschiebe diesen ans Ende des Buckets , p ○ Sonst: lösche ersten Peer aus Bucket, nimm p am Ende des Buckets auf Knoten ist t Minuten online ● LRU‐Verdrängung, aber: aktive Knoten werden nie verdrängt Q Quelle: Kademlia: A Peer‐to‐peer p Information System Based f y on the XOR Metric Petar Maymounkov and David Mayières 28.05.2009 Dominic Battré ‐ P2P Netzwerke 11 28.05.2009 Dominic Battré ‐ P2P Netzwerke 12 Nachrichten Routing Protokoll – Single‐Threaded ● PING ■ Testet ob Knoten online ist ● STORE ■ Speichert Datum bei Knoten ● FIND_NODE(160 Bit ID) FIND NODE(160 Bit ID) ■ Liefert die k nächstgelegenen bekannten Knoten ( (bezüglich XOR Metrik!) g ) ■ Aus einem k‐Bucket, wenn dieser voll ist; sonst aus mehreren ● FIND_VALUE FIND VALUE 1 2 3 4 5 6 7 8 9 10 11 12 13 p.lookup(T) l k (T) N = PriorityQueue(maximale Länge k) N.add(α nächste Knoten) solange nicht alle Knoten aus N erfolgreich gefragt: k = nächster, nicht gefragter Knoten aus N N' = k.FIND_NODE(T); wenn N N' = {}: // Fehler = {}: // Fehler lösche k aus N sonst: N = k nächste Knoten aus N und N' N k nächste Knoten aus N und N wenn N weniger als k Knoten enthält: markiere alle Knoten als ungefragt, goto 3 liefere nächsten Knoten aus N ■ Wie FIND_NODE, aber liefert den Wert, wenn er bekannt ist 28.05.2009 Dominic Battré ‐ P2P Netzwerke 13 28.05.2009 Routing Protokoll – Multi‐Threaded Dominic Battré ‐ P2P Netzwerke 14 Routing Protokoll – Multi‐Threaded (wie ich es implementieren würde ‐ Paper sehr ungenau) 1 2 3 4 5 6 7 8 9 10 p.lookup(T) p p( ) N = PriorityQueue(maximale Länge k) N.add(α nächste Knoten) solange nicht alle Knoten aus N erfolgreich gefragt: warte, bis weniger als α Anfragen ausstehen p' = nächster, nicht gefragter Knoten aus N sende FIND_NODE(T) an p' wenn N weniger als k Knoten enthält: markiere alle Knoten als ungefragt, goto 3 liefere nächsten Knoten aus N 1 2 On FIND_NODE Time Out (k): Lösche k aus N 1 2 On FIND_NODE Answer (k, N'): N = nächste k Knoten aus N und N' 28.05.2009 Dominic Battré ‐ P2P Netzwerke ● ● ● ● Häufig α = 3 (sozusagen die Anzahl Worker Threads) Geringere Latenz für höheren Netzwerkverkehr getauscht Bevorzugt Routing durch Knoten mit geringer Latenz Bevorzugt Routing durch Knoten mit geringer Latenz Vermindert Verzögerungen, wenn Knoten offline gegangen sind ● Korrektheit: s. Paper 15 28.05.2009 Dominic Battré ‐ P2P Netzwerke 16 Datenspeichern Join ● Store(key, value) ● ● ● ● Neuer Knoten u kennt Knoten w u fügt w in entsprechenden k‐Bucket ein u macht Lookup nach sich selbst und gewinnt neue Knoten u macht Lookup nach sich selbst und gewinnt neue Knoten u wählt sich zufällige IDs in leeren k‐Buckets und routet dorthin ● Während dieser Vorgänge fügt sich u automatisch in k‐ Buckets bei anderen Knoten ein. bei anderen Knoten ein ■ Ermittle k nächste Knoten ■ Sende STORE an jeden dieser Knoten ● Softstate ■ Neueinfügen jede Stunde ● Lookup ■ FIND_VALUE statt FIND_NODE ■ Daten werden beim zuletzt gefragten Knoten, der sie nicht d b l f d h speicherte, repliziert ■ Lebenszeit des Replikats: exponentiell antiproportional zu Lebenszeit des Replikats: exponentiell antiproportional zu Anzahl Knoten zwischen aktuellem und zur ID nächsten Knoten 28.05.2009 Dominic Battré ‐ P2P Netzwerke 17 28.05.2009 Implementierungs Details Dominic Battré ‐ P2P Netzwerke 18 Zusammenfassung ● Pings werden nicht wirklich wie beschrieben verschickt (es wären zu viele) ■ Pings werden verzögert, bis sinnvolle Nachricht geroutet werden muss ■ Ein Replacement Cache hält Knoten, die ausgefallene Knoten kompensieren können ● ● ● ● In echten Netzen erprobt Robust Logarithmisches Routing Logarithmisches Routing Neuer Aspekt: Nebenläufige Anfragen ● Statt Binärbaum: 2b‐ärer Baum, reduziert Tiefe 28.05.2009 Dominic Battré ‐ P2P Netzwerke 19 28.05.2009 Dominic Battré ‐ P2P Netzwerke 20 Ranking nach scholar.google.com 28.05.2009 Netzwerk Referenzen nach scholar.google.com Chord (2001+2003) 7606 CAN (2001) CAN (2001) 5204 Pastry (2001 + 2001) 5338 Tapestry (2001) 1927 Kademlia (2002) 929 Dominic Battré ‐ P2P Netzwerke 21