Seminario: Algoritmi per Protocolli Peer-To-Peer
Transcript
Seminario: Algoritmi per Protocolli Peer-To-Peer
3/11/2006 Algoritmi per protocolli peer-to-peer Netgroup – Politecnico di Torino Livio Torrero – [email protected] 3/11/2006 Approccio client-server Client 1 Client 3 Server Client 2 Paradigma molto comune Un client richiede dati o servizi, un server risponde Scalabilità e affidabilità ottenuta attraverso ridondanza e sistemi di supporto (DNS…) 2/72 Client 4 Single point of failure nel server Richiede un amministratore di sistema per la gestione Esempi: Web, FTP… Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Paradigma peer-to-peer (1/2) 3/72 Peer 2 Peer 4 Specifica come si fa, non cosa Può essere applicato in diversi contesti: file sharing, voip… Non esistono nodi centrali, tutti i nodi hanno pari dignità I nodi interagiscono direttamente per lo scambio delle risorse I nodi che mantengono la rete sono gli stessi che ne usufruiscono Peer 3 Il peer-to-peer è un paradigma Peer 1 No single point of failure Elevata scalabilità e affidabilità Si adattano meglio a infrastrutture dinamiche Sfruttano la maggiore potenza dei nuovi computer Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Overlay peer-to-peer I peer si organizzano in un overlay: L’overlay è una “rete sulla rete” I peer si organizzano creando dei link virtuali fra loro Normalmente nell’overlay esistono più copie della stessa risorsa per massimizzarne la raggiungibilità 4/72 Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Caratteristiche delle reti peer-to-peer Tutti i nodi sono potenzialmente sia client che server I nodi in quanto tali non hanno le stesse disponibilità di risorse di un server tradizionale (banda…) Alcuni peer hanno connettività limitata (NAT, firewall…) Le reti peer-to-peer sono reti di grandi dimensioni Potenzialmente 5/72 di dimensioni mondiali Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Peer-to-peer: operazioni fondamentali Un nodo p2p svolge le seguenti operazioni di base: BOOT: è la fase di ingresso nella infrastruttura peer-to-peer Cache preesistenti Configurazione statica Nodi centralizzati di bootstrap LOOKUP RISORSE: come localizzo le risorse su una infrastruttura p2p? SCAMBIO DI FILE: per queste operazioni tutti gli algoritmi sono p2p puri 6/72 Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Classificazione infrastrutture peer-to-peer (tecniche di lookup): approccio centralizzato Infrastrutture peer-to-peer Approccio centralizzato Prime implementazioni di infrastrutture peer Approccio ancora fortemente simile al client server Basate su nodi fissi 7/72 Approccio decentralizzato Colli di bottiglia => non scalano Single point of failure => infrastruttura fragile Napster è un esempio di approccio centralizzato Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Napster: introduzione Nato come applicativo per lo scambio di file musicali Nel 1999 le major disocgrafiche fanno causa a Napster => il bacino di utenza decolla 13,6 milioni di utenti nel febbraio 2001 Nel settembre 2001 viene ordinata la chiusura di Napster Napster si converte in servizio a pagamento Nel 2002 chiude 8/72 Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Funzionamento di Napster Quando un nodo entra nell’infrastruttura si registra presso il server Upload della lista delle risorse gestite Peer query answer Server centrale In base ai risultati ottenuti il peer si connette a un altro peer per scaricare la risorsa Peer Server centrale Dow nload Peer 9/72 Server centrale Quando un nodo cerca una risorsa fa un lookup sul server centralizzato Peer Upload Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Classificazione infrastrutture peer-to-peer (tecniche di lookup): approccio non centralizzato Infrastrutture peer-to-peer Approccio centralizzato Implementazioni più evolute Non c’è più un nodo di lookup centralizzato Lookup distribuito e reti gerarchiche Contro: maggiore complessità 10/72 Le informazioni di lookup sono distribuite direttamente sui nodi Pro: maggiore scalabilità Approccio decentralizzato Se non c’è più server centrale, come si trovano le risorse? Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Approcci non centralizzati Approccio decentralizzato non strutturato L’approccio non strutturato non fornisce un controllo stretto sulla topologia della rete peer to peer Non esiste un directory service vero e proprio Uso estensivo del flooding Agenda: 11/72 strutturato Gnutella: caso di studio Kazaa: caso di studio Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Gnutella introduzione Gnutella è un client p2p sviluppato nel 2000 da Justin Frankel e Tom Pepper di Nullsoft, appena acquisita da AOL Pare sia stato scritto in 14 giorni… In origine il codice sorgente doveva uscire in formato GPL Tuttavia attraverso tecniche di reverseengineering sono stati sviluppati numerosi cloni open-source Limewire è software open-source che supporta la rete Gnutella 12/72 Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Gnutella: evoluzione Originariamente tutti i nodi in Gnutella erano uguali I peer erano detti servent Tuttavia questo approccio non scalava Fare un flooding su tutti i nodi della rete non funziona Bisogna tenere conto del fatto che non tutti i nodi sono uguali Per meglio tenere conto delle caratteristiche della rete Gnutella è stato riorganizzato Il risultato è una rete gerarchica a 2 livelli 13/72 Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Gnutella(limewire): rete gerarchica leaf leaf leaf ultrapeer ultrapeer ultrapeer leaf leaf leaf Es: nodi con connessioni dialup Sono fuori dall’overlay (si connettono agli ultrapeer come client) Non accettano connessioni Gnutella Se un nodo leaf vuole diventare ultrapeer, prima si disconnette dalla rete per ripresentarsi tentando di diventare ultrapeer Ultrapeer Fa da proxy per i nodi leaf Un nodo ultrapeer deve avere una connessione Internet veloce non bloccata da firewall 14/72 leaf Nodi leaf ultrapeer limewire => upload 10kB/s, download 20kB/s Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Gnutella: overlay discovery Un nodo per accedere all’overlay Gnutella deve conoscere almeno un ultrapeer Come scoprire altri nodi? Pong caching Messaggio Ping (richiesta): chi lo riceve risponde con un messaggio Pong Messaggio Pong (risposta): contiene le informazioni relative a un computer (IP + porta) 15/72 Le modalità con cui questo avviene non sono oggetto di Gnutella Solo gli ultrapeer mandano i pong Quando un ultrapeer riceve dei messaggi pong li mette nella sua pong cache Quando un ultrapeer riceve un messaggio ping risponde con tutti i pong nella sua cache Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Da nodo leaf a ultrapeer I nodi decidono da soli se connettersi alla rete come Ultra peer o nodi normali Un nodo DEVE restare leaf per un ora ultrapeer 1h leaf ultrapeer ultrapeer ultrapeer Poi può tentare di connettersi a un ultrapeer come ultrapeer ultrapeer? ultrapeer connect ultrapeer ultrapeer ultrapeer ultrapeer Se ultrapeer? l’ultrapeer lo rifiuta, torna leaf per un’altra ora Refuse connection ultrapeer ultrapeer ultrapeer ultrapeer Leaf for 1h leaf (!) 16/72 leaf connect ultrapeer ultrapeer Algoritmi per protocolli peer-to-peer - Torrero ultrapeer ultrapeer 3/11/2006 I Connection Slot: organizzazione delle connessioni in Gnutella Un connection slot rappresenta la necessità di un nodo di creare una connessione verso un altro o la disponibilità ad accettare le connessioni Un nodo leaf ha 3 connection slot verso gli Ultrapeer Un ultrapeer si connetterà con al più 32 altri ultrapeer questo valore è detto network degree Un ultrapeer ha 30 connection slot verso i nodi leaf 17/72 Creerà fino a 3 connessioni verso ultrapeer diversi Un ultrapeer non permette a più di 30 nodi foglia di connettersi a lui Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Gnutella handshake Ogni connessione Gnutella comincia con un handshake Un nodo accede all’overlay con un messaggio GNUTELLA CONNECT che apre un socket TCP I messaggi di handshake sono costituiti da gruppi di header di formato simile ad HTTP (testo ASCII) Ogni header è nella forma <nome>:<valore1>,<valore2>… Ogni gruppo inizia con una greeting line che identifica il messaggio 18/72 Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Esempi di handshake Gnutella(1/2) Un nodo leaf si connette a un UltraPeer (connessione generica) 0.6 è la versione corrente di Gnutella leaf ultrapeer GNUTELLA connect/0.6 X-Ultrapeer=false GNUTELLA/0.6 200 OK Un nodo leaf dietro un NAT si connette a un ultrapeer Listen-IP indirizzo del peer che manda messaggio Remote-IP indirizzo nodo leaf visto da UltraPeer leaf NAT GNUTELLA connect/0.6 X-Ultrapeer=false ultrapeer 217.254.98 .153 Un ultrapeer si connette a un ultrapeer ultrapeer GNUTELLA connect/0.6 X-Ultrapeer=true 19/72 GNUTELLA/0.6 200 OK Listen-IP:68.37.233.44:9376 Remote-IP: 217.254.98.153 Algoritmi per protocolli peer-to-peer - Torrero ultrapeer GNUTELLA/0.6 200 OK 3/11/2006 Esempi di handshake Gnutella(2/2) Un nodo si connette a un ultrapeer che rifiuta la connessione L’ultrapeer deve fornire ultrapeer alternativi Nodo Gnutella generico ultrapeer GNUTELLA connect/0.6 GNUTELLA/0.6 service unavailable X-Try-Ultrapeers:68.37.233.44:9376, 172.195.105.218:3988… Un nodo si connette a un ultrapeer che accetta e fornisce indirizzi alternativi È consigliato fornire altri ultrapeer a cui connettersi Limewire ne fornsice 10 Nodo Gnutella generico ultrapeer GNUTELLA connect/0.6 GNUTELLA/0.6 200 OK X-Try-Ultrapeers:68.37.233.44:9376, 172.195.105.218:3988… 20/72 Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Lookup in Gnutella: introduzione L’algoritmo di lookup è il dynamic querying Obiettivo: localizzare una risorsa con il minor numero di messaggi possibile Viene eseguito solo dagli ultrapeer Si articola in 3 fasi: “Search our leaves” “Probe Query” “Controlled Broadcasting” Il dynamic querying interagisce con il Query Routing Protocol (QRP) Obiettivo: impedire che siano inviati messaggi di lookup che non ritornerebbero risultati 21/72 Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Dynamic Querying: search our leaves L’ultrapeer manda a tutti i suoi nodi foglia una query di lookup con TTL=1 Dopo l’invio si attende per 2,4s I nodi foglia che hanno copia della risorsa risponderanno alla query leaf T leaf 22/72 TTL =1 1 L= T leaf 1 ultrapeer = L T T =1 L r TT e w s An leaf Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Dynamic Querying: probe query L’ultrapeer manda a tutti gli ultrapeer ad esso collegati una query di lookup con TTL=1 Gli Ultrapeer che hanno copia della risorsa risponderanno alla query Gli ulrapeer inoltrano la richiesta ai loro nodi leaf Questa query serve a stimare la popolarità della risorsa Se si ottengono 150 risposte positive in tutto l’algoritmo finisce leaf TTL=1 ultrapeer Answer leaf 23/72 =1 L T T ultrapeer Algoritmi per protocolli peer-to-peer - Torrero TTL =1 1 ultrapeer = L T T 1 = L T r T e w s n A ultrapeer 3/11/2006 Dynamic Querying: controlled broadcasting Ogni 2.4s ultrapeer manda una query a uno solo degli ultrapeer connessi Se si ottengono 150 risposte positive l’algoritmo finisce Se trascorrono più di 200s dall’inizio della ricerca l’algoritmo è interrotto E’ una ricerca in profondità: La probe query stimava la popolarità della risorsa presso i soli ultrapeer vicini Il controlled broadcasting effettua una ricerca approfondita partendo da uno solo degli ultrapeer vicini A seconda del valore del TTL si parla di: 24/72 TTL=2 oppure TTL=3 a seconda del numero di risposte ottenute nella fase precedente Ricerca TTL2 Ricerca TTL3 Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Ricerca TTL2 e ricerca TTL3 Ultrapeer A TTL=2 Ultrapeer B TTL=1 Leaf 1 Ultrapeer C Leaf 2 A inizia la ricerca: manda query con TTL=2 SOLO a B B decrementa il TTL=> TTL=1 C decrementa il TTL => TTL=0 25/72 TTL<>0 => inoltra la query a TUTTI gli ultrapeer ad esso collegati (in figura, C è il solo connesso) TTL=0 => inoltra la query a TUTTI i leaf ad esso collegati La TTL3 funziona nello stesso modo (TTL=3) Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Gnutella: Query Routing Protocol Nel Dynamic Querying gli ultrapeer inoltravano le query ai nodi leaf collegati Se il nodo leaf non mantiene risorse, è inutile propagare la query Se l’utente del nodo leaf non vuole rispondere alle query, è inutile propagargli la query Il QRP a questo scopo permette al nodo leaf di mandare all’ultrapeer una descrizione delle risorse gestite mentre si connette Le informazioni sono contenute nella QRP table leaf GNUTELLA connect/0.6 X-Ultrapeer=false QRP table 26/72 Algoritmi per protocolli peer-to-peer - Torrero ultrapeer GNUTELLA/0.6 200 OK 3/11/2006 Kazaa: introduzione 27/72 Kazaa è stato scritto da Niklas Zennstrom e Janus Friis nel 2001 Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Kazaa: overlay gerarchico TCP P TC SN ON TC P TC P SN TCP ON SN 28/72 SN Basata sul protocollo Fast Track Rete gerarchica a 2 livelli TCP SuperNodi (SN) Nodi Ordinari (ON) Le connessioni tra SN e ON e tra SN e SN sono su TCP Si utilizza HTTP per il download dei dati Tutto il traffico di segnalazione (connessione + lookup) è criptato Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Kazaa: ingresso nella rete 1. Ogni nodo mantiene una cache di SN (SN cache list) Esistono default server se la cache è vuota All’inizio un ON prova tutti i SN nella cache con pacchetti UDP ON 2. SN UDP prob e SN L’ON inizia connessioni TCP simultanee con più SN ON 3. be UDP pro ect TCP conn SN TCP conn ec SN t L’ON seleziona un SN e si disconnette dagli altri ON ct disocnne SN SN 29/72 Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Kazaa: metadata Quindi manda in upload al suo SN metadati circa i file che contiene Manda IP della macchina ON, nomi dei file, metadati sui file stessi I metadati per un file includono: nome file dimensione contenthash che identifica la risorsa (file) ON 30/72 Metadata SN E’ come se ogni SN fosse un piccolo server Napster Ogni SN tiene informazioni solo sui suoi ON (non su quelli dei SN vicini) Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Kazaa: neighbor selection Ogni SN manda ai suoi ON una lista con 200 altri SN alla connessione ON Lista SN alternativi SN Queste informazioni sono usate per popolare la SN cache List I SN nella cache list sono quasi tutti nodi “vicini” al nodo Vicinanza valutata sulla base dell’RTT (il 60% dei nodi in cache list RTT<50ms) 31/72 Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Kazaa: lookup delle risorse(1/2) 1. Ricerca di blocchi di metadati che corrispondono alla parola chiave ‘Gatto’ ? ON 2. SN Query(‘Gatto’) I SN inoltrano ad altri SN le richieste di lookup Algoritmo non noto, forse dynamic querying o random walk: SN sceglie a caso un vicino e gli passa la richiesta Migliorabile parallelizzando richieste Scelgo SN 3 SN 32/72 Query(‘Gatto’) Algoritmi per protocolli peer-to-peer - Torrero SN 1 Query(‘Gatto’) Rispondo alla query SN 3 3/11/2006 Kazaa: lookup delle risorse(2/2) 3. Le risposte contengono i metadati relativi al file includendo le informazioni sui peer su cui si trovano ‘Gatto_bianco.txt’ ‘Gatto_nero.txt’ ON 4. La connessione per il download è diretta Per incrementare le prestazioni il download è fatto scaricando in parallelo il file a frammenti dall’insieme di nodi che lo contengono ON Download(chash) SN Se il download fallisce si cerca di nuovo il file direttamente con il contenthash ON 33/72 SN ON sceglie un file e fa una richesta di download con il contenthash del file come parametro (simile a HTTP GET) 5. Answer Query(chash) Algoritmi per protocolli peer-to-peer - Torrero SN 3/11/2006 Kazaa: download con firewall Se il peer richiedente è dietro NAT/firewall, inizia lui il trasfrerimento ON A Downolad(chash) Kazaa peer Downolad(chash) Se il peer con il file è dietro NAT/firewall, inizia lui il trasferimento 1. 2. 3. 4. ON A chiede di iniziare attraverso il SN SN risponde con IP e porta del peer con il file Il peer con il file manda una richiesta a ON A: pin hole sul NAT ON A inizia il download come al solito SN q e _r d o la i nf no w r o e pe 1:D : 2 3:GIVE ON A 1:Downolad(chash) 34/72 N A T 1:Do wno lad N A T Algoritmi per protocolli peer-to-peer - Torrero _re q 3:GIVE Kazaa peer 2:Downolad(chash) 3/11/2006 Approccio strutturato Approccio decentralizzato non strutturato I peer si organizzano secondo una topologia precisa Esiste un directory service distribuito Ricerche efficienti, ma quanto costa mantenere il directory service? Programma: 35/72 strutturato Le infrastrutture DHT CHORD) Kademlia (Emule) Algoritmo di ricerca avanzato: Chord Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Le infrastrutture DHT: introduzione (1/2) Le distributed hash table offrono le funzionalità tradizionali delle tabelle di hash su un insieme di nodi Memorizzazione coppia <chiave, valore> Il nodo che memorizza la coppia <chiave, valore> è detto nodo responsabile della chiave Hash table 36/72 Le DHT nelle infrastrutture peer-to-peer sono usate per realizzare un name service distribuito Sono completamente decentralizzate Sono scalabili Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Le infrastrutture DHT: introduzione (2/2) La DHT è realizzata su uno spazio delle chiavi astratto Le DHT espongono i messaggi put e get Put(chiave, valore): inserisce la coppia su un nodo dell’infrastruttura Il messaggio può essere inviato a qualsiasi nodo della DHT: il messaggio viene inoltrato fino al nodo responsabile per la chiave che memorizzerà il valore Get(chiave): recupera il valore associato alla chiave 37/72 Solitamente chiavi a 160 bit Lo spazio degli identificatori delle chiavi coincide con quello dei nodi Il messaggio può essere inviato a qualsiasi nodo della DHT: il messaggio viene inoltrato fino al nodo responsabile per la chiave non viene raggiunto. Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 DHT: caratteristiche Assegnazione delle chiavi ai nodi con loadbalancing Le chiavi sono assegnate a nodi “vicini” alle chiavi nello spazio degli ID A prescindere dal nodo che riceve la richiesta di lookup, viene localizzato sempre lo stesso nodo Ogni algoritmo DHT è caratterizzato da una funzione distanza fra i nodi Ogni nodo ha una sua routing table La routing table è costruita in modo da adattarsi alle variazaioni della rete (join e leave dei nodi) 38/72 Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 CHORD CHORD realizza un DHT con le seguenti caratteristiche: Load balance: CHORD distribuisce uniformemente le chiavi fra i nodi Scalabilità: le operazioni di lookup sono efficienti Robustezza: CHORD è in grado d modificare dinamicamente le routing table dei nodi per riflettere i mutamenti della rete (nodi che entrano o escono) CHORD fornisce il metodo lookup(key) che ritorna l’indirizzo IP del nodo responsabile per la chiave CHORD si basa sul consistent hashing 39/72 Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Consistent hashing in CHORD (1/2) Se N è il numero di nodi presenti sulla rete, al variare di N si desidera che: La quantità di dati da rimappare nel sistema sia bassa Si garantisca l’uniformità della distribuzione delle chiavi sui nodi Il consistent hashing organizza i nodi in un cerchio modulo 2 m (m = #bit ID) 0 1 6 2 4 40/72 m=3 #bit chiave 3 L’algoritmo di hash usato è SHA1 Gli ID dei nodi sono i codici hash ottenuti dagli indirizzi IP Gli ID delle chiavi sono i codici hash ottenuti dalle chiavi NOTA: gli ID dei nodi e gli ID delle chiavi sono nello stesso spazio Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Consistent hashing in CHORD (2/2) La chiave k è assegnata al primo nodo n il cui identificatore è uguale o maggiore all’identifcatore di k nello spazio degli identificatori La metrica di distanza in CHORD è la differenza lineare Si dice n=successor(k) 41/72 n, il nodo responsabile di k è detto successore di k CHORD espone la chiamata find_successor per localizzarlo Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 CHORD: lookup scalabile (1/5) Per fare le ricerche ogni nodo in teoria ha bisogno solamente di conoscere il nodo che segue Dove si trova la chiave 5? 0 1 6 2 Chiave 5 4 42/72 3 CHORD assicura la validità di questi puntatori Tuttavia questo è un approccio non ottimale Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 CHORD: lookup scalabile (2/5) Si suppone che il nodo abbia informazioni su TUTTI gli altri nodi (routing table completa) Dove si trova la chiave 5? 0 6 1 2 Chiave 5 3 4 Impraticabile: richiede N entry nella routing table! 43/72 Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 CHORD: lookup scalabile (3/5) Per ottimizzare CHORD mantiene le finger table i−1 -iesima entry = identità di s = successor(n + 2 ) con 1≤i ≤ m Al più m nodi, a regime O(log(n)) in finger table s è detto –iesima finger del nodo n La entry contiene l’ID del nodo e il suo IP il primo finger è l’immediato successore del nodo sull’anello 0 1 m=3 #bit chiave 3 44/72 Algoritmi per protocolli peer-to-peer - Torrero Finger table(1) Valore i entry 1 successor(2)=3 2 successor(3)=3 3 successor(5)=0 3/11/2006 CHORD: lookup scalabile (4/5) finger[i].start = (n + 2 i −1) mod 2 m La entry –iesima della finger table copre l’intervallo [finger[i].start, finger[i+1].start) m=3 #bit chiave 45/72 Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 CHORD: lookup scalabile (5/5) 46/72 Cosa succede se un nodo cerca una chiave k di cui non è responsabile? Il nodo cerca nella finger table il nodo j che precede immediatamente k e gli inoltra una richiesta per successor(k) Nodo 3 vuole successor(1) 1 ∈ [7,3) : quindi 3 manda una query al nodo 0 (entry #3 della finger table) 1 ∈ [1,2): il nodo 0 ha le informazioni su 1 e le manda a 3 Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 CHORD: lookup scalabile (4/4) Si dimostra che con buona probabilità il numero di nodi da contattare per trovare successor(k) è O(log(n)) (n=num totale nodi) Dimostrazione: n Sia n il nodo che cerca k e p=predecessore (k) f = -iesima finger i −1 n +2 f p Finger[i].start 2 i −1 d(f,n) ≥ 2i−1, d(p,f) ≤ 2i−1 n +2 ∗ 2 i −1 Finger[i+1].start 2 i −1 => Al massimo d(p,f) = (1/2)*d(p,n) => A ogni passo la distanza da p si dimezza m => la distanza massima è N= 2 in m passi al massimo si arriva 47/72 Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 CHORD: join dei nodi Per semplificare le operazioni ogni nodo tiene conto del suo predecessore Operazioni da svolgere al join di un nodo n: Inizializzare predecessore e finger di n Aggiornare le finger e i predecessori degli altri nodi per tenere conto di n Il nodo n deve entrare nelle finger table degli altri Muovere sul nodo n tutte le chiavi di cui è il successore N diventa responsabile solo per parte delle chiavi contenute nel suo successore 48/72 Basta contattare un solo nodo Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 CHORD: stabilization Il join (o l’uscita) dei nodi dall’anello rendono le informazioni nelle finger table non coerenti Per completare una ricerca è sufficiente che i nodi conoscano il loro successore Tuttavia questo non è ottimale Occorre che le finger table convergano rapidamente A questo scopo un nodo n esegue periodicamente stabilize Verifica periodicamente il nodo che lo segue sull’anello e gli dice che è connesso 49/72 Periodicamente un nodo n aggiorna le sue finger Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 CHORD: uscita dei nodi L’uscita dei nodi si potrebbe trattare come una failure degli stessi e non fare nulla La stabilization gestirebbe l’uscita automaticamente: approccio inefficiente Per ottimizzare, quando un nodo esce dall’overlay (graceful leave): Trasferisce le chiavi di cui è responsabile al suo successore Aggiorna il puntatore al nodo che lo precede del nodo che lo segue sull’anello Aggiorna il puntatore al nodo che lo segue del nodo che lo precede sull’anello 50/72 Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 CHORD: ridondanza informazioni Perché CHORD funzioni occorre che ogni nodo conosca il suo immediato successore sull’anello Per evitare problemi dovuti a failure dei nodi, ogni nodo mantiene una lista dei nodi che lo seguono (lista di successori) Nel caso in cui un nodo non è utilizzabile attraverso la lista di successori è possibile individuare percorsi alternativi. Per tenere conto delle liste di successori occorre modificare opportunamente le operazioni svolte durante la stabilizzazione 51/72 Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Kademlia Sistema di lookup che utilizza metriche basate su XOR Kademlia utilizza query parallele asincrone Gli identifcatori delle risorse sono chiavi su 160 bit (SHA-1) Date due chiavi x e y la loro distanza è d(x,y)=x xor y Kademlia è unidirezionale = per ogni d e x, c’è un solo y per cui d(x,y)=x xor y => Le ricerche convergono sullo stesso percorso 52/72 Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Kademlia: binary tree Kademlia tratta i nodi come foglie di un albero binario 53/72 La posizione di un nodo è determinata dal suo prefisso univoco più corto Il primo sottoalbero a sinistra è la prima metà che non contiene il nodo e così via, recursivamente Kademlia garantisce che il nodo con prefisso univoco 000 conosca almeno un nodo in ciascuno degli altri sottoalberi Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Kademlia: binary tree Grazie alla conoscenza di tutti i sotto alberi ogni nodo può trovare qualsiasi altro nodo dell’albero Un nodo attraverso la sua routing table riesce a localizzare in una serie di passaggi successivi qualsiasi nodo sull’albero in modo ottimale La routing table è organizzata come un insieme di k-bucket 54/72 Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Kademlia: k-buckets (1/5) Per ogni 0 ≤i<160, ogni nodo ha una lista di <IP,porta,NodeID> per i nodi che distano tra 2^i e 2^(i+1) da se => k-buckets m=3 #bit chiave Tabella nodo 0 0 [1,2) 1 [2,4) 2 [4,0) nodo1 nodo2 nodo3 nodo4 nodo5 K-bucket K = numero massimo di elementi in un k-bucket: parametro di sistema fisso (qui k=2) 55/72 Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Kademlia: k-buckets (2/5) 56/72 Quando un nodo riceve un quasliasi messaggio, aggiorna il kbucket corrsipondente Algoritmo (il nodo A riceve un messaggio dal nodo B): Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Kademlia: k-buckets (3/5) Esempio: Tabella nodo 0 0 [1,2) 1 [2,4) 2 [4,0) nodo1 nodo2 nodo3 nodo4 nodo5 nodo4 m=3; k=2 1. 6 manda un messaggio a 0, ma il k-bucket è pieno (k=2) 2. 0 interroga 4 3. 4 risponde e viene spostato al fondo (6 è fuori) 57/72 Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Kademlia: k-buckets (4/5) Esempio: Tabella nodo 0 miss 0 [1,2) 1 [2,4) 2 [4,0) nodo1 nodo2 nodo3 nodo4 nodo5 nodo6 m=3; k=2 1. 6 manda un messaggio a 0, ma il k-bucket è pieno (k=2) 2. 0 interroga 4 3. 4 non risponde: 6 è messo in fondo al k-bucket 58/72 Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Kademlia: k-buckets (5/5) Tabella nodo 0 Tabella nodo 0 0 [1,2) 1 1 [2,4) 2 3 2 [4,0) 4 5 6 0 000- 1 1 001- 2 3 2 01-- 4 5 k-bucket 1 k-bucket 2 k-bucket 0 59/72 Algoritmi per protocolli peer-to-peer - Torrero 6 3/11/2006 Kademlia: metodi esportati Kademlia offre 4 funzioni: PING: verifica se un nodo è attivo STORE: memorizza la coppia <chiave, valore> nel nodo più vicino alla chiave Le informazioni vengono replicate STORE(chiave) FIND_NODE: data una chiave ritorna (IP, porta, NodeID) per i k nodi più vicini alla chiave. 60/72 <chiave, valore> I k nodi possono provenire da più k-bucket se il kbucket più vicino non è pieno FIND_VALUE: variante della precedente per ottenere un valore data una chiave Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Kademlia: node lookup (1/4) Obiettivo: localizzare il nodo più vicino a un Node ID A. Se il nodo 1 vuole contattare il nodo 5: 1 1 6 0 0 1 0 4 1 3 1 0 0 1 2 1 0 0 5 1. Nodo 1 manda FIND_NODE(5) a uno dei nodi nel k-bucket 1--. (perche il bucket 1– è il più vicino a 5) (si suppone che 5 non sia nei k-bucket di 1) 61/72 Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Kademlia: node lookup (2/4) 1 1 6 0 0 1 5 0 4 1 3 1 0 0 1 2 1 0 0 2. Il nodo 6 ritorna al nodo 1 l’indirizzo del nodo 4 (il più vicino a 5) (si suppone che 5 non sia nei k-bucket di 6) 3. Il nodo 1 manda una FIND_NODE(5) al nodo 4 62/72 Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Kademlia: node lookup (3/4) 1 1 6 0 0 1 5 0 4 1 3 1 0 0 1 2 1 0 0 4. Il nodo 4 risponde infine al nodo 1 dicendogli l’indirizzo del nodo 5 5. Il nodo 1 può contattare il nodo 5 63/72 Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Kademlia: node lookup (4/4) E’ possibile dimostrare che il numero di passi per localizzare un nodo è logaritmico Nell’algoritmo reale vengono inviate più richieste in parallelo 64/72 Si manda un numero di richieste < k In questo modo si evitano problemi con i timeout dei nodi offline Le risposte alle richieste contengono i k nodi più vicini L’algoritmo recursivo termina quando i k nodi più vicini al nodo destinazione hanno risposto Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Kademlia: join, leave, refresh Come fa un nodo a entrare nell’overlay: Ottiene in qualche modo dei contatti da un nodo nell’overlay Fa un lookup di se stesso Il costo del join è circa O(log(n)) Un nodo esce dall’overlay: Nessuna 65/72 operazione da svolgere Refresh periodico (orario se necessario) del contenuto dei k-bucket Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Confonto tra CHORD e Kademlia In CHORD la routing table è rigida Richiede costose operazioni per essere mantenuta in caso di failure di un nodo Kademlia offre una routing table flessibile Esiste sempre più di un percorso alternativo Le ricerche sono parallelizzate La manutenzione della routing table è più bassa 66/72 E’ possibile dimostrare che il numero di entry nella routing table di Kademlia è logaritmico Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Limiti delle DHT (1/3) I client p2p sono transienti per natura Il tempo di connessione media per un nodo è di 60min In Gnutella se un nodo perde tutti i vicini prova semplicemente a riconnettersi Nelle DHT il problema è più grave L’uscita di un nodo graceful (=“annunciata”) comporta in genere O(log(n)) operazioni per mantenere coerenti le strutture dati Un uscita graceless (senza annuncio è trasferimento preventivo di informazioni di stato) ha esiti peggiori Richiede tempo per: 67/72 Rilevare la failure Replicare i dati persi dal peer disconnesso Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Limiti delle DHT (2/3) Le ricerche di parole chiave sono più numerose delle ricerche esatte Le DHT si prestano a ricerche esatte Dato il nome esatto di un file lo localizzano E’ possibile implementare richerche per parole chiave nelle DHT, ma è costoso Le p2p non strutturate non hanno di questi porblemi: perché le ricerche si fanno sulla base di informazioni contenute nei singoli nodi Le DHT trovano un ago in un pagliaio, i p2p non strutturati no Gnutella non può garantire di poter trovare una singola copia di un file a meno che la query non raggiunge tutti i nodi 68/72 Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Limiti delle DHT (3/3) Tuttavia la distribuzione delle richieste privilegia i file più replicati Questo limita gli svantaggi delle reti non strutturate 69/72 Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Bittorent (1/2) La rete Bittorrent si basa su tracker I Bittorrent indexer localizzano i file Per condividere un file il client creano un torrent Spesso integrato con servizio di lookup Il tracker è un web server che offre supporto per il download Il torrent è un metadata che descrive il file La pubblicazione di un file su Bittorrent richiede: Creazione di un file “.torrent” che descrive un file Creare un tracker per quel file sul webserver locale Creare una copia “seed” per quel download 70/72 La copia seed altro non è che una copia integrale del file Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Bittorrent(2/2) I file condivisi sono suddivisi in frammenti Normalmente piccoli Il download avviene in parallelo sui frammenti Bittorrent si basa sul meccanismo tit-for-tat Più si fa scaricare, più si scarica in fretta Bittorrent trackerless Ogni client diventa un un tracker leggero I client sono organizzati in una DHT L’algoritmo DHT usato è Kadmelia Kadmelia permette di memorizzare e localizzare contatti per interagire con altri peer 71/72 Algoritmi per protocolli peer-to-peer - Torrero 3/11/2006 Conclusioni Le reti peer-to-peer permettono un miglior sfruttamento delle risorse delle reti Partite da un approccio parzialmente client/server si sono evolute verso un peerto-peer puro Le DHT hanno migliorato le caratteristiche di scalabiltà delle reti gerarchiche Tuttavia vanno incontro a un certo overhead di gestione Attraverso successivi sviluppi le DHT stanno riducendo l’overhead, fornendo una sempre più una alternativa concreta alle reti non strutturate 72/72 Algoritmi per protocolli peer-to-peer - Torrero
Documenti analoghi
Sistemi strutturati - the Netgroup at Politecnico di Torino
Algoritmi per protocolli peer-to-peer
Reti strutturate: casi di studio
Sistemi non strutturati - the Netgroup at Politecnico di Torino
– Upload della lista delle risorse gestite
Peer