Vorlesungg P2P Netzwerke 6: Kademlia 6: Kademlia 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 28.05.2009 Dominic Battré ‐ P2P Netzwerke Anwendungen • OceanStore • BabelPeers • Amazon • Multicast 2 Kademlia ● Kademlia ■ 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 28.05.2009 Dominic Battré ‐ P2P Netzwerke 3 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 ) 28.05.2009 Dominic Battré ‐ P2P Netzwerke 4 XOR Metrik ● Distanz d(A, B) = A ⊕ B 0 0 000 1 001 0 1 1 0 0 010 1 0 011 1 1 100 0 101 1 110 111 010 100 110 = 4 + 2 = 6 28.05.2009 Dominic Battré ‐ P2P Netzwerke 5 XOR Metrik ● Eigenschaften: ■ 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 0 000 28.05.2009 1 001 0 010 Dominic Battré ‐ P2P Netzwerke 1 011 0 100 1 101 0 110 1 111 6 Routing Tabelle 000… 1… 28.05.2009 01… 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 Routing Tabelle ● Jeder Knoten kennt mindestens einen Knoten in jedem Unterbaum, sofern dieser Unterbaum einen Knoten enthält. ● Knoten Id: ● Unterbaum i: Unterbaum i: 011001010011001 01101 01101… Präfix der Länge i 28.05.2009 (i+1)‐tes Bit geflippt Dominic Battré ‐ P2P Netzwerke 8 Routing Beispiel ● Routing von 0011… nach 1110… 28.05.2009 Dominic Battré ‐ P2P Netzwerke 9 Routing Tabelle 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 10 k‐Buckets ● ● ● ● 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 ■ 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 ● LRU‐Verdrängung, aber: aktive Knoten werden nie verdrängt 28.05.2009 Dominic Battré ‐ P2P Netzwerke 11 k‐Buckets P(bei t + 60 n noch onlin ne) ● Bevorzugung alter Knoten verbessert Stabilität Knoten ist t Minuten online 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 12 Nachrichten ● 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 ■ Wie FIND_NODE, aber liefert den Wert, wenn er bekannt ist 28.05.2009 Dominic Battré ‐ P2P Netzwerke 13 Routing Protokoll – Single‐Threaded 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 28.05.2009 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 15 Routing Protokoll – Multi‐Threaded ● ● ● ● 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 28.05.2009 Dominic Battré ‐ P2P Netzwerke 16 Datenspeichern ● Store(key, value) ■ 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 Join ● ● ● ● 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 28.05.2009 Dominic Battré ‐ P2P Netzwerke 18 Implementierungs Details ● 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 ● Statt Binärbaum: 2b‐ärer Baum, reduziert Tiefe 28.05.2009 Dominic Battré ‐ P2P Netzwerke 19 Zusammenfassung ● ● ● ● In echten Netzen erprobt Robust Logarithmisches Routing Logarithmisches Routing Neuer Aspekt: Nebenläufige Anfragen 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