4.9.3 Untere Schranke für F∞ Satz 4.51: Sei 0 ≤ ε < 1/3 und 0 ≤ δ < 1/2. Jeder randomisierte r -Runden-Datenstromalgorithmus, der auf Datenströmen der Länge n ∈ {0, . . . , 2m} eine (ε, δ)-Approximation von F∞ berechnet, benötigt Speicherplatz (m/r ). 480 Beweis: Idee: Codiere DISJm in F∞ hinein. x = {x1 , . . . , xm1 } −→ ax = (x1 , . . . , xm1 ); y = {y1 , . . . , ym2 } −→ ay = (y1 , . . . , ym2 ); a := (ax , ay ). x ∩ y = ∅ ⇒ F∞ (a) = maxi fi (a) = 1 =: L; x ∩ y 6 = ∅ ⇒ F∞ (a) = 2 =: H. Technik anwendbar für ε < (H − L)/(L + H) = 1/3. Benutze untere Schranke (m) für randomisierte Kommunikationskomplexität von DISJm . 481 4.9.4 Untere Schranke für Fk , k > 2 Einfache Reduktion von DISJm funktioniert nicht, da bestenfalls (H − L)/(L + H) = 2(1/m) (→ Skript). Idee: Codiere DISJt,m in Fk hinein. Spieler i produziert Teildatenstrom ax (i) mit Elementen seiner Menge x (i) . a := (ax (1) , . . . , ax (t) ), Länge maximal tm. • DISJt,m x (1) , . . . , x (t) = 1: Fk (a) = |x (1) | + · · · + |x (t) | ≤ m =: L. • DISJt,m x (1) , . . . , x (t) = 0: Fk (a) ≥ t k =: H. Dann: tk − m H −L = k . L+H t +m 482 Wähle t so, dass t k = (1 + 3ε)m, dann ε<1/3 3εm H −L tk − m 3εm > = k = ε. = L+H 2m + 3εm 3m t +m 1-Runden-Datenstromalgorithmus mit WorstcaseSpeicherplatz s liefert t-Spieler-Einweg-Protokoll mit höchstens (t − 1)s Bits Kommunikation. Mit unterer Schranke für DISJt,m , t = 2 m1/k : (t −1)s = m/t 1+γ ⇒ s = m/t 2+γ = m1−(2+γ )/k . Benötigte Datenstromlänge höchstens tm = ((1 + 3ε)m)1/k m ε<1/3 ≤ (2m)1+1/k . 483 Satz 4.52: Sei 0 ≤ ε < 1/3, 0 ≤ δ < 1/2, γ > 0 und k > 2. Jeder randomisierte 1-Runden-Datenstromalgorithmus, der 1+1/k auf Datenströmen der Länge n ∈ 0, . . . , (2m) eine (ε, δ)-Approximation von Fk berechnet, benötigt 1−(2+γ )/k Speicherplatz m . 484 4.9.5 Untere Schranke für Häufigkeitsmomente mit D ELETEs Betrachte Variante des Problems aus Abschnitt 4.6.4 für Fk -Berechnung auf Datenbank-Relationen: I NSERT- und D ELETE-Operationen, will Fk auf resultierenden Häufigkeiten. D ELETE immer erlaubt, aber ohne Auswirkung, falls aktuelle Häufigkeit für Element 0. Satz 4.53: Sei 0 ≤ ε < 1 und 0 ≤ δ < 1/2. Jeder randomisierte r -Runden-Datenstromalgorithmus, der für das modifizierte Fk -Problem auf Datenströmen der Länge n ∈ {0, . . . , 2m} eine (ε, δ)-Approximation berechnet benötigt Speicherplatz (m/r ). 485 Beweis: Codiere DISJm in das Problem hinein. Mengen x, y ⊆ {1, . . . , m} gegeben. Datenbankrelation mit Attributswerten aus {1, . . . , m}. • Datenstrom ax : Für alle i ∈ x: I NSERT (i). • Datenstrom ay : Für alle i ∈ y : D ELETE (i). Sei a := (ax , ay ). Sei v = (v1 , . . . , vm ) ∈ {−n, . . . , n}m durch Update-Operationen resultierender Vektor. 486 Für i = 1, . . . , m: xi : yi : vi : 0 0 0 ⇒ vi = [xi ∧ yi = 1]. 0 1 0 1 0 1 1 1 0 Damit: Fk (a) = m X [xi ∧ yi = 1]k = i=1 _ xi yi = ¬ DISJm (x, y ). 1≤i≤m x ∩ y = ∅ ⇒ Fk (a) = 0 =: L; x ∩ y 6 = ∅ ⇒ Fk (a) = 1 =: H. (H − L)/(L + H) = 1 > ε, Technik anwendbar. 487 5. Peer-to-Peer-Netze Übersicht: 5.1 5.2 5.3 5.4 Einleitung Consistent Hashing Chord Kademlia 488 5.1 Einleitung Zwei grundlegende Prinzipien zur Organisation des Zugriffs auf verteilte Ressourcen: • Client-Server: – Wenige zentrale Server, die Ressourcen bereitstellen; – viele Clients, die Ressourcen in Anspruch nehmen. Aufwand für Hardware und Bandbreite konzentriert bei Servern. • Peer-to-Peer (P2P): – Gleichgestellte Netzknoten (Peers), die sowohl Clientals auch Server-Rolle übernehmen. – Knoten benutzen alle zu Netz passende Software (üblicherweise auch Client, besser vielleicht Servent). Standard-PCs, Aufwand für Bandbreite verteilt. 489 P2P-Netze – Anwendungen: Populär: Tauschbörsen“ (file sharing) ” • Aktuell ca. 10 Mio. Teilnehmer weltweit in verschiedenen Netzen. • 2006: Anteil am Internet-Datenverkehr in Deutschland 30 % (tagsüber) bzw. 70 % (nachts). • Verbreitetste Netze: BitTorrent, eDonkey. (Quelle: www.slyck.com) Weitere (legalere) Anwendungen: • Ausfallsichere verteilte Speicherung von Daten. • Verteilung von großen Datenmengen an viele Nutzer (z. B. Linux-Distributionen, TV-Live-Streams). 490 P2P-Technik: Üblicherweise realisiert als Overlay-Netz auf der Anwendungsschicht, basierend auf TCP oder UDP (also analog z. B. zu WWW/HTTP). Zu lösende Probleme: • Netzaufbau und -verwaltung ohne zentrale Instanz? (Dynamik: Häufige An-/Abmeldungen von Knoten, spontane Ausfälle von Knoten möglich.) • Wie findet man Knoten, die bestimmte Ressourcen (Dateien) anbieten? Skalierbarkeit: Ressourcenaufwand für einzelne Knoten darf nur moderat (sublinear) in Anzahl Knoten wachsen. 491 Einteilung und Historie: Nach Netztopologie: • Zentral (Index-Server): Napster (1999-2001, in urspr. Form eingestellt). • Dezentral: Gnutella (2000). • Hybridformen: Gnutella 0.6 und Gnutella2 (2002), eDonkey (2000–2006, Einstellung offizielle Website), FastTrack (2001, z. B. KaZaA-Client). Aktuelle Themen: Verschlüsselung, Anonymisierung, P2P-Streaming. 492 Einteilung und Historie (Forts.): Nach Strategie für Netzverwaltung: • Unstrukturiert: Neue Knoten verbinden sich beliebig mit bereits existierenden. Suche typischerweise ineffizient. Beispiel: Gnutella. • Strukturiert: Linkstruktur durch Protokoll geregelt → effiziente Suche. Außerdem theoretische Gütegarantien. Consistent Hashing / Distributed Hash Tables (1997). Beispiele: CAN, Chord (2001), Kademlia (2002). Auch in aktuellen P2P-Clients, z. B. eMule, BitTorrent. 493 5.1.1 Napster • Client meldet angebotene MP3-Dateien an zentralen Index-Server. • Suchanfrage: Server liefert – Nickname von Client und Dateinamen; – Nickname → IP-Adresse. • Daten lagern nur auf Clients, Transfer zwischen diesen ohne Server. IndexServer Clients 494 Vorteil: Suche nach Musikstück erfordert nur jeweils konstante Anzahl Botschaften zu/von Server (konstant bezüglich Gesamtanzahl Knoten im Netz). Nachteile: • Mangelnde Ausfallsicherheit, verletztlich gegenüber Angriffen (Server als single point of failure“). ” • Schlechte Lastverteilung: Benötigte Hardware und Bandbreite für Server wächst linear in Anzahl Knoten. Skalierbarkeit für zentralen Server nicht gegeben. 495 5.1.2 Gnutella 0.4: Dezentral und unstrukturiert. • Client benötigt IP-Adresse + Port von mindestens einem aktiven Peer (mitgeliefert / Internet). • Verbindung über TCP (+ Gnutella). • Daten bei den Peers gelagert, Austausch über HTTP. Spezielle Datenpakete (Deskriptoren): • P ING/P ONG : Suche nach aktiven Peers. • Q UERY/Q UERY H IT: Suche nach Daten. • P USH: Datenübertragung durch Firewall. Für Suche nach aktiven Peers oder Daten: Flutung des Netzes / Broadcast. 496 Suche nach Daten: • Deskriptoren haben eindeutige ID (Hashcode), Felder TTL“ (Time to live) und Hops“. ” ” • Vor Weiterleitung von Deskriptor: TTL--, Hops++. Deskriptoren mit TTL = 0 nicht weiterleiten. • Mittels ID: Deskriptor nur einmal pro Knoten weiterleiten. Routing von Q UERY-Deskriptor: ttl = 3, hops = 1 497 Suche nach Daten: • Deskriptoren haben eindeutige ID (Hashcode), Felder TTL“ (Time to live) und Hops“. ” ” • Vor Weiterleitung von Deskriptor: TTL--, Hops++. Deskriptoren mit TTL = 0 nicht weiterleiten. • Mittels ID: Deskriptor nur einmal pro Knoten weiterleiten. Routing von Q UERY-Deskriptor: ttl = 2, Treffer! hops = 2 ttl = 2, hops = 2 497 Suche nach Daten: • Deskriptoren haben eindeutige ID (Hashcode), Felder TTL“ (Time to live) und Hops“. ” ” • Vor Weiterleitung von Deskriptor: TTL--, Hops++. Deskriptoren mit TTL = 0 nicht weiterleiten. • Mittels ID: Deskriptor nur einmal pro Knoten weiterleiten. Routing von Q UERY-Deskriptor: ttl = 1, hops = 3 ttl = 1, hops = 3 ttl = 1, hops = 3 497 Suche nach Daten: • Deskriptoren haben eindeutige ID (Hashcode), Felder TTL“ (Time to live) und Hops“. ” ” • Vor Weiterleitung von Deskriptor: TTL--, Hops++. Deskriptoren mit TTL = 0 nicht weiterleiten. • Mittels ID: Deskriptor nur einmal pro Knoten weiterleiten. Routing von Q UERY H ITS-Deskriptor: ttl = 2, hop = 1 497 Suche nach Daten: • Deskriptoren haben eindeutige ID (Hashcode), Felder TTL“ (Time to live) und Hops“. ” ” • Vor Weiterleitung von Deskriptor: TTL--, Hops++. Deskriptoren mit TTL = 0 nicht weiterleiten. • Mittels ID: Deskriptor nur einmal pro Knoten weiterleiten. Routing von Q UERY H ITS-Deskriptor: ttl = 1, hop = 2 497 Vorteile: Dezentral, einfache An-/Abmeldung von Knoten. Nachteile: • Für zu kleine TTL-Werte nur Teile des Netzes erreichbar. (Original-Client: maximal 4 Verbindungen, TTL = 5.) • Anzahl Botschaften bei P ING / Q UERY = Anzahl Kanten im (erreichten Teil-) Graphen. Gesamtbandbreite für Verwaltung wächst linear (konstanter Grad) oder sogar superlinear in Knotenanzahl. • Flaschenhälse durch langsame Knoten. 498 5.1.3 Gnutella 0.6, FastTrack: Hybridform, semi-dezentral. Hierarchische Einteilung in Ultrapeers und Blätter. • Blätter: Nur verbunden mit Ultrapeers. • Ultrapeers: – Serverartig, u. a. hohe Bandbreite; – alleine zuständig für Routing; – Skizze eines Index für Daten in ihren Blättern (Query Routing Protocol, QRP). Ultrapeers Blätter Scheinbar bessere Skalierbarkeit, aber Suche nach wie vor nicht besonders effizient. 499 5.2 Consistent Hashing Arbeit: Karger u. a. (1997). Motivation: Hot Spots“ im Internet: Server, die durch populäre ” ” Downloads“ überlastet werden (z. B. Fußball-WM, neue Linux-Distribution etcpp.) Abhilfe: Web-Caches, verteilte Kopien der Seiten. Zuordnung von Seiten auf Caches? Idee: Lastverteilung durch Hashing. 500 Beispiel: Buckets Hashfunktion x 7 → x mod 4 3 2 1 0 2 3 4 9 10 12 17 19 Daten 501 Beispiel: Hashfunktion x 7 → x mod 5 Buckets 4 3 2 1 0 2 3 4 9 10 12 17 19 Daten Beobachtung: Bei Update fast alle Objekte auf neue Buckets gehasht. : – ( 501 Grundlegende Operationen: • I NITIALIZE. • J OIN (v ): Erzeugt neuen Knoten in Netz, dem Knoten v bereits angehört. • L EAVE (v ): Löschen von Knoten v . • L OOKUP (k ): Liefere Knoten mit Schlüssel k oder nicht vorhanden“. ” Natürlich auch Einfügen/Ändern von Daten, aber dazu im Wesentlichen L OOKUP-Operation. 502 Entwurfsziele / Komplexitätsmaße: Anzahl Knoten sei n, Anzahl Daten d. Oh-Notation bezüglich n. • Speicherplatz pro Knoten: Sublinear in n, idealerweise O(1). • Balance (Lastverteilung): Idealerweise höchstens c · d/n, c ≥ 1 Konstante. • Rechenzeit für Operationen: J OIN, L EAVE und L OOKUP in sublinearer Zeit, idealerweise auch O(1). Außerdem: – Ausfallsicherheit; – Behandlung mehrerer J OINs / L EAVEs zur gleichen Zeit. 503 Consistent Hashing – Prinzip: 0 1 Hashe Knoten und Daten unabhängig auf [0, 1]. Daten werden an nächstgelegenem“ Knoten gespeichert. ” Nach J OIN-Operation: 0 1 504 Consistent Hashing – Prinzip (Forts.): • J OIN: Aufteilung des Gebietes, für das Knoten zuständig. • L EAVE : Verschmilz Gebiet mit passenden von übrig bleibenden Knoten. • L OOKUP : – Irgendwie sicherstellen, dass von aktuellem Punkt solcher gefunden werden kann, der Punkt von gesuchtem Datum näher liegt. – Halbierung des Abstandes → logarithmische Suchzeit. Abstandsmaße: • Chord: Abstand auf Kreis der Länge 1. • CAN: Abstand auf Einheitstorus in Rd . • Kademlia: Binärwert von XOR(ID1 , ID2 ). 505