Verteilte Systeme - P2P-Computing ... [email protected] Verteilte Systeme - P2P-Computing ... [email protected] Alois Schütte 15. Oktober 2014 1 / 27 Verteilte Systeme - P2P-Computing ... [email protected] Inhaltsverzeichnis Die Kommunikation in verteilten Systemen, bei denen eine Menge von gleichberechtigten Partnern gemeinsam einen Dienst anbieten und nutzen, soll hier beleuchtet werden. 1 Einleitung 2 Verteilte Hashtabellen 3 Fallbeispiel AChord.im 2 / 27 Verteilte Systeme - P2P-Computing ... [email protected] Einleitung Einleitung Der Begri↵ Peer-to-Peer (P2P) wurde u.a. populär im Zusammenhang mit der Musik Tauschbörse Napster. • Mit dieser Anwendung traten erstmals im Internet Client-Rechner in einen großen Verbund ein. • Der Regelfall im Intranet und Internet war es bis dahin, dass es sich um sternförmige Netzstrukturen handelt: • mehrere Clients greifen auf Dienste eines Servers zu. • Die Clients bieten dabei ihrerseits keine Dienste für andere Clients an. • Bei P2P bilden die Clients an den Extremitäten des Netzes untereinander eine Verknüpfung Gleichberechtigter (englisch: Peer). 3 / 27 Verteilte Systeme - P2P-Computing ... [email protected] Einleitung Evolution der Verbindungsstruktur Die Architektur von verteilten Anwendungen wandelt sich, ausgehend von reinen Client-Server Strukturen, über Web- zu P2P Strukturen. 4 / 27 Verteilte Systeme - P2P-Computing ... [email protected] Einleitung Vorteile der P2P Kommunikation Vorteile der P2P Kommunikation Die am meisten verwendete Aktionen im Internet sind: • Suchen, • Berechnen, • Sharing. Gerade dazu wird durch P2P ein Modell zur Verfügung gestellt mit dem u.a. folgende Vorteile erzielt werden: • Ressourcen können von Peers bereitgestellt werden, für diejenigen, die sie gerade brauchen (Filesspace, CPU-Power, ....). • Die Suche kann verteilt und asynchron erfolgen, so dass Ergebnisse insgesamt schneller gefunden werden können. • Instant Messaging Systeme auf P2P Basis können Benutzer (Peers) unabhängig vom Service Provider ausfindig machen und die Kommunikation zwischen Peers ermöglichen. • Käufer und Verkäufer können in P2P Auktionen direkt Transaktionen ausführen. Was sind die Nachteile ? Kennen Sie Beispiele für P2P Anwendungen ? 5 / 27 Verteilte Systeme - P2P-Computing ... [email protected] Einleitung Architekturkonzepte Architekturkonzepte Grundsätzlich unterscheidet man P2P Architekturen • mit (Hybridarchitektur) und • ohne (Pure P2P Architektur) zentrale Kontrolle. 6 / 27 Verteilte Systeme - P2P-Computing ... [email protected] Einleitung Architekturkonzepte Hybridarchitektur Das Hybrid P2P-Modell bedient sich auf der einen Seite der Client-Server-, auf der anderen der P2P-Beziehung. • Es ist semi-zentral und beinhaltet mindestens einen zentralen Kontrollpunkt. • Der Zweck reicht von der Kontrolle des gesamten Netzwerks bis zu einem einfachen Bezugspunkt für die verbundenen Peers. • Oft existiert ein alleinstehender Peer, der für alle anderen Peers einen Index bzw. Katalog für die verfügbaren Daten darstellt. 7 / 27 Verteilte Systeme - P2P-Computing ... [email protected] Einleitung Architekturkonzepte Hybridarchitektur Vorteil • Der Indexserver bringt den Vorteil mit sich, dass kein spezieller Suchdienst erforderlich ist. Nachteil • Ausfall des Kontrollpunktes legt das gesamte P2P Netz lahm. Beispiel: Napster 8 / 27 Verteilte Systeme - P2P-Computing ... [email protected] Einleitung Architekturkonzepte Super P2P Das Super P2P-Modell ist eine Weiterentwicklung des Hybrid P2P, wobei die zentrale Verwaltungsinstanz keine einzelner Server ist, sondern selbst ein (teil-) P2P Netz. • Gut angebundene Knotenpunkte im Netzwerk werden als Super-Nodes eingesetzt, die als Übergangs-Indexserver dienen. • Hierbei erfolgt eine Peer-to-Peer-Interaktion zwischen ” ausgezeichneten“ Teilnehmern ” (Super-Peers)“ sowie zwischen normalen Peers. • Super-Nodes und normale Peers interagieren in einen Client-Server-Beziehung. Beispiel: KaZaa 9 / 27 Verteilte Systeme - P2P-Computing ... [email protected] Einleitung Architekturkonzepte Super P2P Das Pure P2P-Modell ist völlig dezentral ausgelegt. • Es beinhaltet keinen zentralen Kontrollpunkt. • Die Peers werden als völlig gleichwertig und autonom betrachtet. • Daten oder Rechenleistung sollen sich über alle Peers verteilen, die direkt oder indirekt über andere Peers miteinander kommunizieren können. • Die Organisation der Peers kann entweder eine feste Struktur aufweisen oder gänzlich unstrukturiert sein. Beispiel: Gnutella, Achord.im 10 / 27 Verteilte Systeme - P2P-Computing ... [email protected] Verteilte Hashtabellen Verteilte Hashtabellen • Verteilte Hashtabellen (distributed hash tables, DHT) bilden die Basis vieler P2P-Netze. • Wir werden hier das Chord-Verfahren diskutieren. 11 / 27 Verteilte Systeme - P2P-Computing ... [email protected] Verteilte Hashtabellen Idee Idee • Eine Hastabelle auf einem Server könnte verwendet werden, um einen Lookup-Service für Schlüssel-Werte Paare zu realisieren. Server - key = 14 Client value = 9 H = key %3 0 : (3, 17) ! (9, 5) ! (15, 0) 1) @ @12 :: (4, (8, 16) ! (14, 9) • Vorteil • einfach zu implementieren • Nachteil • Single point of attacks • Der zentrale Server bildet den Flaschenhals, wenn eine große Anzahl von Schlüssel-Werte Paare zu speichern sind. • Eine verteilte Hash-Tabelle weist diese Nachteile nicht auf. 12 / 27 Verteilte Systeme - P2P-Computing ... [email protected] Verteilte Hashtabellen Idee Chord: Verteilete Hash-Tabellen (DHT) • DHT bilden eine Klasse von verteilten Systemen zur Realisierung von Lookup Diensten. • Schlüssel-Werte Paare werden auf Knoten eines P2P Netzes gespeichert. • Jeder Knoten kann einen zu einem Schalüssel gehörenden Wert effizient finden. • Die Verwaltung des Mapping von Schlüsseln zu verantwortlichem Konten kann mit minimalem Umfang von Unterbrechungen durchgeführt werden. • Dies erlaubt eine sehr hohe Skalierung des P2P Netzes mit kontinuierlichem Hinzufügen und Entfernen von Knoten. (18, 16) '$ r X X zr(9, 15) X (3, 17) - r✓ BBN r(14, 9) value = 9 r(15, 0) r &% (4, 1) key = 14 Client 13 / 27 Verteilte Systeme - P2P-Computing ... [email protected] Verteilte Hashtabellen Chord Chord Ein grundlegendes Problem der Peer-to-Peer Technik ist es, den richtigen Knoten zu finden, der die gesuchte Information enthält. • Hierzu sind Verteilte Hash-Tabellen eine Lösung. • Wir betrachten den Chord-Ansatz (vgl. [chord]). • Chord liefert dazu eine Operation lookup(key): Finde zu einem Schlüssel den Knoten (IP-Adresse), der die Informationen zum Schlüssel enthält Server Server Server Server 14 / 27 Verteilte Systeme - P2P-Computing ... [email protected] Verteilte Hashtabellen Chord System-Modell Ein Chord-Netz hat folgende Eigenschaften: • balanciert: Chord agiert als verteilte Hash-Funktion und verteilt Schlüssel gleichmäßig über alle Knoten. • dezentral: Chord ist verteilt, es gibt keine zentrale Kontrolle und keine ausgezeichneten Knoten mit Sonderrechten. • skalierbar: Die Kosten für lookup wächst logarithmisch mit der Knotenanzahl. Daher ist es auch für große Netze geeignet. • verfügbar: Chord adjustiert die interne Verwaltungs-Tabellen automatisch, wenn Knoten entfernt werden oder neue hinzukommen. • flexibles Namensschema: Der Namensraum für Schlüssel ist flach, d.h. die Anwendungen sind flexible in der Zuordnung ihrer Namen für Objekte zu Chord-Schlüsseln. 15 / 27 Verteilte Systeme - P2P-Computing ... [email protected] Verteilte Hashtabellen Chord Chord-Protokoll - Konsistentes Hashing Die konsistente Hash-Funktion ordnet jedem Knoten und jedem Schlüssel einen m-Bit Bezeichner unter Verwendung von SHA-1 zu • Knoten n: sha1(IP von n) • Schlüssel k: sha1(k) Die Schlüssel werden den Knoten wie folgt zugewiesen: • Die Bezeichner werden sortiert in einem Kreis modulo 2m angeordnet. • Schlüssel k wird dem Knoten n = successor (k) zugewiesen mit n = k oder n ist erster Knoten im Kreis ausgehend von k im Uhrzeigersinn Bezeichner-Kreis mit - drei Knoten 0, 1, 3 - drei Schlüssel 1, 2, 6 6 1 0 7 suc(6) = 0 Knoten Schlüssel suc(1) = 1 1 6 suc(2) = 3 2 5 3 2 4 16 / 27 Verteilte Systeme - P2P-Computing ... [email protected] Verteilte Hashtabellen Chord Chord-Protokoll - Konsistentes Hashing Konsistentes Hashing ist so designed, dass es ohne große Verwaltung möglich ist, dass Knoten beitreten bzw. das Netz verlassen können. Verfahren Knoten n: beitreten n übernimmt die Schlüssel seines Nachfolgers Bezeichner-Kreis mit - drei Knoten 0, 1, 3 - drei Schlüssel 1, 2, 6 Knoten 7 tritt bei 6 1 0 7 suc(6) = 0 Knoten Schlüssel 6 suc(2) = 3 2 5 3 4 1 6 0 suc(1) = 1 1 7 suc(6) = 0 suc(1) = 1 1 6 suc(2) = 3 2 5 3 2 2 4 17 / 27 Verteilte Systeme - P2P-Computing ... [email protected] Verteilte Hashtabellen Chord Chord-Protokoll - Konsistentes Hashing Verfahren Knoten n: verlassen der Nachfolger von n übernimmt die Schlüssel von n Bezeichner-Kreis mit - drei Knoten 0, 1, 3 - drei Schlüssel 1, 2, 6 Knoten 7 tritt bei 6 1 0 7 suc(6) = 0 Knoten Schlüssel 6 suc(2) = 3 2 5 3 4 1 6 0 suc(1) = 1 1 7 suc(6) = 0 suc(1) = 1 1 6 suc(2) = 3 2 5 3 2 2 4 Dieses Verfahren sollen Sie im letzten Praktikum implementieren. P2P Echo Server ! Rechner: $ VerteilteSystem/bin/P2P/run.sh tcp 18 / 27 Verteilte Systeme - P2P-Computing ... [email protected] Verteilte Hashtabellen Chord Implementierung konsistentes Hashing Zum Implementieren von ’konsistentem Hashing’ braucht jeder Knoten als Verwaltungsinformation nur seinen Nachfolger zu kennen: Eine Querry nach einem Bezeichner folgt den succ-Pointern der Knoten bis der erste Knoten gefunden ist, der zum Bezeichner passt. Problem: Dieses Verfahren ist aber ineffizient: man muss u.U. alle N Knoten besuchen ! Lösung: Jeder Knoten wird mit zusätzlicher ’Routing-Information ausgestattet.’ 19 / 27 Verteilte Systeme - P2P-Computing ... [email protected] Verteilte Hashtabellen Chord Implementierung konsistentes Hashing - finger table Jeder Knoten n erhält eine Routingtabelle (finger table): der i-te Eintrag von n enthält den ersten Knoten s, der 2i 1 Schritte von n entfernt ist d.h. s = successor (n + 2i 1 ) mit 1 i m. (Notation: n.finger [i].node) Gespeichert werden nun folgende Informationen an jedem Knoten n: Notation finger [k].start .interval .node successor predecessor Definition (n + 2k 1 )%2m , 1 k m [finger [k].start, finger [k + 1].start] first node n.finger [k].start next node on the circle; previous node on the circle 1.finger[3].intervall = [ finger[3].start, 1 ] finger Intervalle des Knoten 1 0 1 7 6 2 1.finger[1].start = 2 1.finger[1].intervall = [ 1.finger[1].start, 5 1.finger[3].start = 5 3 1.finger[2].start ] 1.finger[2].start = 3 4 1.finger[2].intervall = [ 1.finger[2].start, 1.finger[3].start ] 20 / 27 Verteilte Systeme - P2P-Computing ... [email protected] Verteilte Hashtabellen Chord Implementierung konsistentes Hashing - finger table Dieses Schema hat folgende grundlegende Charakteristiken: 1 Jeder Knoten speichert nur wenig Informationen über andere Knoten. 2 Jeder Knoten ’weiß’ mehr über seine nahen Nachfolger als von den entfernten Nachfolgern. 3 Die finger-Tabelle eines Knotens kann nicht für jeden Schlüssel den Nachfolger bestimmen, z.B. Knoten 3 kennt nicht den Nachfolger von 1. finger Tabellen und Schlüssel Lokation im Netz mit Knoten 0, 1, 3 und Schlüssel 1, 2, 6 finger Tabelle start Interv. succ 1 2 4 [1,2] [2,4] [4,0] Schlüssel 6 1 3 0 0 7 1 finger Tabelle start Interv. succ 6 2 5 3 4 2 3 5 [2,3] [3,5] [5,1] finger Tabelle start Interv. succ 4 5 7 [4,5] [5,7] [7,3] Schlüssel 1 3 3 0 Schlüssel 2 0 0 0 21 / 27 Verteilte Systeme - P2P-Computing ... [email protected] Verteilte Hashtabellen Chord Implementierung konsistentes Hashing - Nachfolger finden Wegen Punkt 3 verwendet man folgenden Algorithmus, um den Nachfolger eines beliebigen Bezeichners zu finden, man verwendet RPC: 1 2 3 4 5 7 8 9 10 11 12 13 15 16 17 18 19 20 21 // ask node n to find id 's successor n . find_suc cessor ( id ) { n ' = f i n d_ p r e d e c e s s o r ( id ); return n '. successor ; } // ask node n to find id 's predecessor n . f i n d _ p r e d e c e s s o r ( id ){ n' = n; while ( id not in ( n ' , n '. successor )) n '= n '. c l o s e s t _ p r e c i d i n g _ f i n g e r ( id ); return n ' } // return closest finger preceding id n . c l o s e s t _ p r e c e d i n g _ f i n g e r ( id ) { for ( i = m downto 1) if ( finger [ i ]. node is in (n , id ) return finger [ i ]. node ; return n ; } finger Tabellen und Schlüssel Lokation im Netz mit Knoten 0, 1, 3 und Schlüssel 1, 2, 6 finger Tabelle start Interv. succ 1 2 4 [1,2] [2,4] [4,0] Schlüssel 6 1 3 0 0 7 1 finger Tabelle start Interv. succ 6 2 5 3 4 2 3 5 [2,3] [3,5] [5,1] finger Tabelle start Interv. succ 4 5 7 [4,5] [5,7] [7,3] Schlüssel 1 3 3 0 Schlüssel 2 0 0 0 22 / 27 Verteilte Systeme - P2P-Computing ... [email protected] Verteilte Hashtabellen Chord Implementierung konsistentes Hashing - Nachfolger finden Beispiel: Knoten 3 will successor von Bezeichner 1 wissen 1 Knoten 3: 1 gehört zu Intervall [7,3], also 3.finger[3].succ = 0. 2 Konten 3: Da O Vorgänger von 1 ist, fragt Knoten 3 Knoten 0, den Nachfolger von 1 zu bestimmen. 3 4 Knoten 0: Knoten 0 sieht in seiner finger-Tabelle, 0.finger[1].succ = 1. Knoten 0; Also gibt Knoten 0 die 1 als Ergebnis an Knoten 3 zurück. finger Tabellen und Schlüssel Lokation im Netz mit Knoten 0, 1, 3 und Schlüssel 1, 2, 6 finger Tabelle start Interv. succ 1 2 4 [1,2] [2,4] [4,0] Schlüssel 6 1 3 0 0 7 1 finger Tabelle start Interv. succ 6 2 5 3 4 2 3 5 [2,3] [3,5] [5,1] finger Tabelle start Interv. succ 4 5 7 [4,5] [5,7] [7,3] Schlüssel 1 3 3 0 Schlüssel 2 0 0 0 23 / 27 Verteilte Systeme - P2P-Computing ... [email protected] Verteilte Hashtabellen Chord Implementierung konsistentes Hashing - Aufwand Satz: Die Anzahl von Knoten, die in einem N-Knoten Netzwerk kontaktiert werden müssen, um den Successor eines Knoten zu bestimmen ist O(log N). finger Tabellen und Schlüssel Lokation im Netz mit Knoten 0, 1, 3 und Schlüssel 1, 2, 6 1 2 4 [1,2] [2,4] [4,0] Schlüssel 6 1 3 0 0 7 Beweis: vgl. [chord]) oder experimentell im Praktikum mit OpenCourd (http: // open-chord. sourceforge. net ). finger Tabelle start Interv. succ 1 finger Tabelle start Interv. succ 6 2 5 3 4 2 3 5 [2,3] [3,5] [5,1] finger Tabelle start Interv. succ 4 5 7 [4,5] [5,7] [7,3] Schlüssel 1 3 3 0 Schlüssel 2 0 0 0 24 / 27 Verteilte Systeme - P2P-Computing ... [email protected] Verteilte Hashtabellen Chord Dynamik des Netzes IN ARBEIT 25 / 27 Verteilte Systeme - P2P-Computing ... [email protected] Fallbeispiel AChord.im Fallbeispiel AChord.im Hier wird als Beispiel auf ein P2P System eingegangen, das im Rahmen vom Musterprojekten entstanden ist. Vortrag AChord 26 / 27 Verteilte Systeme - P2P-Computing ... [email protected] Fallbeispiel AChord.im Literatur- & Quellenverzeichnis [chord] Ion Stoica, Robert Morris, David Karger, M. Frans Kaashoek, Hari Balakrishnan: ’Chord: A Scalable Peer-to-peer Lookup Service for Internet Applications’ http://pdos.csail.mit.edu/papers/chord:sigcomm01/chord_sigcomm.pdf 27 / 27