Università degli Studi di Napoli Federico II Facoltà di Ingegneria Corso di Laurea Specialistica in Ingegneria Informatica Corso di Sistemi Distribuiti Prof. Stefano Russo Sistemi distribuiti peer-to-peer Ing. Marcello Cinque Sommario • Introduzione e classificazione • Evoluzione dei sistemi P2P • Esempi: o Napster, BitTorrent, o Gnutella, Freenet, o Chord, Pastry. Riferimenti: • G. Coulouris et al.: Distributed Systems: Concepts and Design (Cap. X, da 10.1 a 10.5.1), IV ed., 2005; • E.K. Lua et al. “A Survey and Comparison of Peer-to-Peer Overlay Network Schemes”, IEEE Communications Surveys and Tutorial, Vol. 7, No. 2, Second Quarter 2005; • I. Stoica, R. Morris, D. Liben-Nowell, D. R. Karger, M. F. Kaashoek, F. Dabek, H. Balakrishnan, “Chord: A Scalable Peer-to-peer Lookup Protocol for Internet Applications”. In IEEE/ACM Trans. on Networking, 2003. Corso di Sistemi Distribuiti, prof. S. Russo Sistemi distribuiti peer-to-peer 2 Sistemi distribuiti peer-to-peer (P2P) Un sistema peer-to-peer (P2P) è un sistema distribuito nel quale ogni nodo ha identiche capacità e responsabilità e tutte le comunicazioni sono potenzialmente simmetriche; Obiettivi: condividere risorse e servizi (dove per risorse e servizi intendiamo: scambio di informazioni, cicli di CPU, spazio sul disco …); I sistemi P2P sono caratterizzati da: controllo decentralizzato; adattabilità; si organizzano e si gestiscono da soli; Corso di Sistemi Distribuiti, prof. S. Russo Sistemi distribuiti peer-to-peer 3 Peer-to-Peer vs Client-Server Architettura Client-Server • Approccio centralizzato • Risorse poste nei server • Localizzazione e gestione semplificate • Limiti di scalabilità e affidabilità Corso di Sistemi Distribuiti, prof. S. Russo Architettura Peer-to-Peer • Approccio distribuito • Risorse condivise dai peer • Consente scalabilità e affidabilità • Richiede algoritmi per la localizzazione e gestione delle risorse Sistemi distribuiti peer-to-peer 4 P2P: Applicazioni e Requisiti Applicazioni File sharing system; File storage system; Distributed file system; Redundant storage; Chat service; Distributed computation; Requisiti non funzionali Availability; Reliability; Performance; Scalability; Anonymity; Corso di Sistemi Distribuiti, prof. S. Russo Sistemi distribuiti peer-to-peer 5 Operazioni sottese ad applicazioni peer-to-peer Il ciclo di vita di applicazioni peer-to-peer è scandito da tre fasi distinte: Boot: un’applicazione appena avviata intende far parte del sistema ottenendo informazioni per connettersi agli altri membri del sistema P2P; Lookup: un’applicazione intende acquisire una risorsa (ad esempio un file), pertanto ricerca chi dei peer del sistema detiene la risorsa di interesse; Resource Sharing: un’applicazione contatta un peer identificato nella fase di lookup per acquisire una risorsa e effettua lo scambio dati. Corso di Sistemi Distribuiti, prof. S. Russo Sistemi distribuiti peer-to-peer 6 Soluzioni architetturali per boot e lookup Corso di Sistemi Distribuiti, prof. S. Russo Le fasi di boot e di lookup possono essere realizzate secondo tre pattern architetturali: Centralizzato: esiste un server centrale a cui ogni peer richiede informazioni di boot e lookup; Federato: esiste un server per ogni gruppo di peer, e i server sono interconnessi per garantire consistenza dei dati gestiti; Distribuito: non esiste un server dedicato, ma i dati sono distribuiti tra i peer e sono ottenuti applicando appositi algoritmi decentralizzati. 7 Sistemi distribuiti peer-to-peer P2P: Classificazione Parleremo di: P2P puro se: le fasi di boot, lookup e sharing sono P2P; P2P se: le fasi di lookup e sharing sono P2P; la fase di boot utilizza dei SERVER (centralizzati o federati); P2P Ibride se: la fase di sharing è P2P; la fase di boot utilizza dei SERVER (centralizzati o federati); nella fase di lookup vengono usati Peer particolari (server federati): Hub (Direct Connect) Supernodo (KaZaA) MainPeer (EDonkey) Corso di Sistemi Distribuiti, prof. S. Russo SuperPeer , Ultra Peer(Gnutella2) NodoRandezVous (JXTA) Server (WinMX) Sistemi distribuiti peer-to-peer 8 Peer-to-peer overlay - 1/3 I nodi di un sistema peer-to-peer sono interconnessi per mezzo di una overlay network costruita al di sopra del protocollo IP: I nodi rappresentano applicazioni interconnesse per mezzo di link virtuali o logici, ognuno dei quali corrisponde a uno o più link fisici nella rete sottostante; I nodi di una overlay network realizzano operazioni di “store&forward” per consegnare un messaggio a destinazione. 9 Corso di Sistemi Distribuiti, prof. S. Russo Sistemi distribuiti peer-to-peer Peer-to-peer overlay - 2/3 IP routing Overlay routing Scala Gli indirizzi IP sono in numero limitato [IPv4: 232 ma IPv6 2128] Il peer-to-peer consente di indirizzare più oggetti [>2128] Load Balancing Il carico dei router dipende dalla topologia ed il relativo traffico Oggetti disposti a caso, scollegando il carico dalla topologia Dinamiche di rete Tabelle di routing aggiornate asincronamente ad ogni ora Tabelle di routing aggiornate in frazioni di secondi in maniera sincrona e/o asincrona Fault Tolerance Ridondanza realizzata dagli ISP ed amministratori di rete Percorsi ed oggetti replicati all’occorrenza Identificazione destinazione Ogni indirizzo IP identifica un singolo nodo Messaggi indirizzati verso la replica più vicina di un oggetto Sicurezza e anonimità Sicurezza ottenuta solo se tutti i nodi sono affidabili, non è garantita l’anonimità Sicurezza ottenubile anche su reti non pienamente affidabili. Una limitata anonimità è ottenibile Corso di Sistemi Distribuiti, prof. S. Russo Sistemi distribuiti peer-to-peer 10 Peer-to-peer overlay - 3/3 I sistemi peer-to-peer sono comunemente classificati in base all’organizzazione imposta all’overlay network: P2P Strutturati: la topologia dell’overlay network è lascamente controllata e le risorse non sono collocate a caso, ma in precise posizioni in modo da rendere la loro ricerca più efficiente; P 2 P N o n S t r u t t u r a t i : i p e e r n o n s o n o interconnessi secondo una precisa struttura, ma adottando grafi casuali. Overlay network strutturate: maggiore efficienza di ricerca, ma vulnerabilità ai fallimenti di nodo; richiedono la gestione di uno stato complesso. Overlay network non strutturate: più affidabili, ma meno efficienti per quanto riguarda i tempi di lookup. Corso di Sistemi Distribuiti, prof. S. Russo Sistemi distribuiti peer-to-peer 11 Evoluzione sistemi P2P Peer-to-Peer strutturati Peer-to-Peer non strutturati Third Generation Second Generation First Generation Corso di Sistemi Distribuiti, prof. S. Russo Sistemi distribuiti peer-to-peer 12 P2P di I generazione Peer-to-Peer strutturati Peer-to-Peer non strutturati Third Generation Second Generation First Generation Sistemi con fase di boot e lookup centralizzati (o federati), mentre lo sharing è realizzato in modalità peer-to-peer. Esempio: BitTorrent, Napster Corso di Sistemi Distribuiti, prof. S. Russo Sistemi distribuiti peer-to-peer 13 Esempio P2P di I generazione: Napster Sistema per lo sharing di file musicali Nel 2000, 50 milioni di utenti hanno scaricato il client di Napster; Napster ha avuto un picco di traffico di circa 7 TB in un giorno; Soluzione con lookup centralizzata Corso di Sistemi Distribuiti, prof. S. Russo Sistemi distribuiti peer-to-peer 14 Esempio P2P di I generazione: BitTorrent - 1/3 BitTorrent è una soluzione P2P di prima generazione per file sharing: .torrent File • U n s e r v e r m a n t i e ne .torrent files che .torrent Server Tracker contengono metainformazioni sui file da scaricare; • Un Tracker tiene traccia di tutti i peer che detengono un dato file. Un downloader contatta periodicamente il tracker per aggiornare le sue informazioni e ricevere la lista di peer che posseggono il file in download, così da contattarli. Riferimento: www.imconf.net/imc-2006/papers/p20-legout.pdf Corso di Sistemi Distribuiti, prof. S. Russo Sistemi distribuiti peer-to-peer 15 Esempio P2P di I generazione: BitTorrent - 2/3 Il tracker tiene traccia di tutti i membri dello swarm, e i frammenti di file in loro possesso. Il downloader riceve e diffonde più frammenti del file allo stesso tempo da/verso molteplici peers. Corso di Sistemi Distribuiti, prof. S. Russo Sistemi distribuiti peer-to-peer 16 Esempio P2P di I generazione: BitTorrent - 3/3 Quale frammento del file viene richiesto dal downloader? Inizialmente un peer richiede frammenti scelti a caso (Random First Policy), quando ne sono stati scaricati almeno 4, si passa ad eseguire il Rarest First Algorithm: Ogni peer mantiene una peer list col numero di peer aventi ogni frammento (RepID). Gli identificativi dei frammenti con il minore RepID sono memorizzati nella rarest piece list, da cui a caso viene scelto il frammento da scaricare. Quando un blocco di un frammento è stato scaricato, anche gli altri saranno richiesti con altissima priorità (Strict Priority Policy). Corso di Sistemi Distribuiti, prof. S. Russo Sistemi distribuiti peer-to-peer 17 P2P di II generazione: Peer-to-Peer strutturati Peer-to-Peer non strutturati Third Generation Second Generation First Generation Sistemi con fase di boot centralizzata (o federata), e lookup e sharing distribuite; l’overlay non presenta organizzazione. Esempio: Gnutella, Freenet Corso di Sistemi Distribuiti, prof. S. Russo Sistemi distribuiti peer-to-peer 18 Esempio P2P di II generazione: Gnutella Raccoglie l’eredità di Napster; Nel 2000 la dimensione della rete cresce in 7 mesi da 2K a 48K nodi; Applicazioni più conosciute basate su Gnutella: BearShare; LimeWire (anche client BitTorrent); … Fase di boot centralizzata: un Server (gnutellahost.com) viene usato dai nodi per il boot. Fase di lookup distribuita: le richieste di Ricerca vengono propagate con tecniche di flooding. Corso di Sistemi Distribuiti, prof. S. Russo Sistemi distribuiti peer-to-peer 19 Flooding – 1/2 I sistemi di seconda generazione sono interconnessi secondo un grafo casuale, dove ogni nodo mantiene una lista degli identificativi dei vicini, che riceve a conclusione la fase di boot. Come realizzare il lookup senza un server centralizzato o federato? Il nodo invia una richiesta di query a tutti i vicini, i quali inoltrano la richiesta ai propri vicini se non dispongono dell’informazione cercata. Il messaggio di query si propaga all’interno del sistema fino a raggiungere un nodo che detiene l’informazione (flooding), che viene inoltrato al richiedente. Corso di Sistemi Distribuiti, prof. S. Russo Sistemi distribuiti peer-to-peer 20 Flooding – 2/2 Il flooding presenta l’inconveniente che i messaggi possono circolare nel sistema indefinitamente, ripassando per nodi già visitati precedentemente. Soluzioni: • Ogni nodo mantiene la lista di query già valutate, qualora una query passata è nuovamente ricevuta, viene scartata; • Ogni query ha associato un TTL, che viene decrementato ad ogni ricezione, cosicché quando il suo valore è nullo la query viene scartata. Siccome diverse repliche della stessa query sono disseminate nel sistema, sussiste l’inconveniente che il sender della query riceva l’informazione più di una volta se nel sistema più di un nodo la detiene. Corso di Sistemi Distribuiti, prof. S. Russo Sistemi distribuiti peer-to-peer 21 Esempio P2P di II generazione: Freenet - 1/2 Freenet migliora le prestazioni del flooding strutturando scarsamente l’overlay network: • Ogni dato è identificato da una chiave. • Dati con chiavi simili tendono a raggrupparsi su un simile insieme di peer, così da ridurre i peer da visitare per il lookup. Ogni nodo presenta due liste di chiavi: • Quella dei propri dati; • Quella delle locazioni dei dati noti. Corso di Sistemi Distribuiti, prof. S. Russo Sistemi distribuiti peer-to-peer 22 Esempio P2P di II generazione: Freenet - 2/2 C 3 A 1 2 Richiedente Quando D riceve la richiesta, non contatta direttamente A, ma ripercorre al contrario il percorso di lookup. 2 B Il peer A avvia il flooding di richieste per un dato detenuto da D. F Peer con dato richiesto D 3 E Richiesta Oggetto Corso di Sistemi Distribuiti, prof. S. Russo Definizione scorciatoia Sistemi distribuiti peer-to-peer Ogni nodo contattato memorizza nella seconda lista la chiave e il next_hop così da definire una scorciatoia (routing short-cut) per successive query dello stesso dato. 23 Scalabilità I protocolli di I e II generazione non sono scalabili, in quanto le prestazioni (es. tempo di ricerca di un file) peggiorano linearmente all’aumentare del numero dei nodi. In altri termini, la quantità di lavoro richiesta a un determinato nodo deve crescere linearmente in funzione del numero di nodi nel sistema; La scalabilità è direttamente legata all’efficienza dell’algoritmo usato per il lookup; Per questo motivo, diviene necessario: Minimizzare il numero di messaggi necessari per fare lookup; Minimizzare, per ogni nodo, le informazioni relative agli altri nodi; Per migliorare la scalabilità sono nati i cosiddetti protocolli P2P di terza generazione che supportano DHT (Distributed Hash Table); Corso di Sistemi Distribuiti, prof. S. Russo Sistemi distribuiti peer-to-peer 24 P2P di III generazione: Peer-to-Peer strutturati Peer-to-Peer non strutturati Third Generation Second Generation First Generation Corso di Sistemi Distribuiti, prof. S. Russo Sistemi con tutte le fasi completamente distribuite, con la overlay strutturata secondo il paradigma DHT. Esempi: Chord, CAN e Pastry 25 Sistemi distribuiti peer-to-peer Distributed Hash Table (DHT) Nei sistemi di I e II generazione le informazioni sono organizzate senza alcuno schema. Nella III generazione, gli oggetti sono deterministicamente collocati nei peer i cui identificatori corrispondono alla chiave associata all’informazione. Le Distributed Hash Tables (DHT) forniscono un’astrazione simile alle hash tables, per cui a una chiave corrisponde un valore, sebbene i dati non siano locali ma distribuiti. Corso di Sistemi Distribuiti, prof. S. Russo Sistemi distribuiti peer-to-peer 26 DHT: funzionamento di base A ogni file e ad ogni nodo è associata una chiave; La chiave viene di solito creata facendo l’hash del nome del file o dell’IP del nodo; Ogni nodo del sistema è responsabile di un insieme di file/chiavi e tutti realizzano una DHT; La principale operazione che un sistema DHT deve fornire è lookup(key), la quale restituisce l’identità del responsabile di una determinata chiave. IP Address Corso di Sistemi Distribuiti, prof. S. Russo Sistemi distribuiti peer-to-peer 27 DHT: funzionamento di base Tutti i nodi del sistema condividono una tabella hash; Conoscono la struttura della tabella… Ma non conoscono il responsabile di una data chiave! ID Nodo x Nodo y Nodo z … Corso di Sistemi Distribuiti, prof. S. Russo 0 1 2 3 4 5 6 … 2m Sistemi distribuiti peer-to-peer 28 DHT: scalabilità Messaggi necessari per trovare una chiave Anello n -1 DHT Grafo Totalmente connesso O(log n) 1 1 O(log n) n è il numero dei peer; Corso di Sistemi Distribuiti, prof. S. Russo n -1 Dimensione tabella di routing Sistemi distribuiti peer-to-peer 29 Esempio P2P di III generazione: Chord - 1/6 Soluzione DHT che associa a peer e chiavi un identificativo di m bit attraverso una funzione di hash SHA-1 (in totale N = 2m identificativi); Si basa su un overlay ad anello in cui i peer sono ordinati in base agli id. Il nodo responsabile di una determinata chiave K è quello con il primo identificativo W tale che W succede K in senso orario; Ogni nodo x di Chord mantiene due insiemi di vicini: gli m successori del nodo x più il predecessore. m=6 N4 N56 F i n g e r s : U n i n s i e m e m n o d i costituito dai responsabili delle chiavi N51 distanziate esponenzialmente dal nodo x, vale a dire l’insieme delle N48 chiavi che si trovano a distanza 2i da x dove 0 ≤ i ≤ m-1. N8 K54 K24 N42 K30 N38 Corso di Sistemi Distribuiti, prof. S. Russo Sistemi distribuiti peer-to-peer K10 N14 N21 N32 30 Esempio P2P di III generazione: Chord - 2/6 Successors table: utilizzata per ricerche nelle immediate vicinanze; contiene gli id degli m successori e del predecessore N4 N56 N8 N51 N14 N48 N21 N42 N38 Corso di Sistemi Distribuiti, prof. S. Russo N32 Sistemi distribuiti peer-to-peer Grado del successore NodeID 1 N14 2 N21 3 N32 4 N38 5 N42 6 N48 Predecessor N4 31 Esempio P2P di III generazione: Chord - 3/6 Finger Table: utilizzata per velocizzare la ricerca; contiene gli id degli m peer a distanza 2i con 0 ≤ i ≤ m-1 N4 N56 N8 +1 N51 +2 +4 +32 +8 N14 +16 N48 N21 N42 N38 Corso di Sistemi Distribuiti, prof. S. Russo N32 Sistemi distribuiti peer-to-peer Grado del finger NodeID 1 (N8+1) N14 2 (N8+2) N14 3 (N8+4) N14 4 (N8+8) N21 5 (N8+16) N32 6 (N8+32) N42 32 Esempio P2P di III generazione: Chord – 4/6 La Finger Table consente di realizzare un algoritmo di lookup, più scalabile, minimizzando le informazioni da memorizzare nei peer. E’ usata per identificare il nodo più prossimo alla chiave, così da ridurre i nodi da contattare. ALGORITMO DI LOOKUP N4 n.find_successor(id) N56 if (id ∈ (n, successor]) N8 return successor; Lookup 54 else N51 N14 n’= closest_preceding_node(id); return n’.find_successor(id); N48 N21 n.closest_preceding_node(id) N42 for i = m downto 1 N32 if (finger[i] ∈ (n, id)) N38 return finger[i]; return n; Corso di Sistemi Distribuiti, prof. S. Russo Sistemi distribuiti peer-to-peer 33 Esempio P2P di III generazione: Chord – 5/6 La correttezza di Chord si basa sul presupposto che ogni peer conosca esattamente i successori e i finger. Tale requisito può essere compromesso dalla dinamicità dei peer (churn o fallimenti). Per mantenere la correttezza dei dati di routing sono eseguiti periodicamente appositi algoritmi di stabilizzazione. Corso di Sistemi Distribuiti, prof. S. Russo n.stabilize() x = successor.predecessor; if (x ∈ (n, successor)) successor = x; successor.notify(n); n.notify(n’) if (predecessor is nil or n’ ∈(predecessor,n)) predecessor = n’; n.fix_fingers() next = next + 1 ; if (next > m) next = 1; finger[next] = find_successor(n + 2next-1); n.check_predecessor() if (predecessor has failed) predecessor = nil; Sistemi distribuiti peer-to-peer 34 Esempio P2P di III generazione: Chord – 6/6 Analisi di Complessità Le informazioni che il nodo deve mantenere sugli altri nodi sono m + m + 1 = 2m +1 (O(log N)); Il numero di messaggi necessari per fare lookup è m (O(log N)); Il costo che si paga quando un nodo lascia o si connette alla rete è di O(log2N) messaggi; Corso di Sistemi Distribuiti, prof. S. Russo Sistemi distribuiti peer-to-peer 35 Esempio P2P di III generazione: Pastry - 1/4 Anche Pastry usa un overlay ad anello, ma, a differenza di Chord, si basa sul prefisso delle chiavi: • Ad ogni nodo è assegnato in maniera casuale un NodeID a 128-bit, generalmente considerato come una sequenza di interi con base B (tipicamente 16); • Ogni query di un dato con chiave k viene istradata verso il nodo il cui NodeID è numericamente vicino a k (i primi n interi di NodeID e k coincidono); • Ad ogni passo dell’algoritmo di routing, un nodo inoltra la richiesta di query a un peer il cui NodeID condivide con la chiave un prefisso di almeno un intero, di dimensione maggiore di quello che la chiave condivide con il nodo corrente. Corso di Sistemi Distribuiti, prof. S. Russo Sistemi distribuiti peer-to-peer 36 Esempio P2P di III generazione: Pastry - 2/4 Per consegnare a destinazione il messaggio di query, ogni nodo di Pastry dispone delle seguenti strutture: 1. Routing Table (R), contiene NodeID e indirizzi IP dei peer noti. Nella n-sima righa, tutti gli elementi hanno in comune i primi n interi; 2. Neighborhood Set (M), contiene dati sui peer vicini (per prossimità di routing) a quello corrente; 3. Leaf Set (L), contiene informazioni dei |L|/2 peer con NodeID più piccolo prossimo a quello corrente e |L|/2 con NodeID più grande. (R) Corso di Sistemi Distribuiti, prof. S. Russo (M) Sistemi distribuiti peer-to-peer (L) 37 Esempio P2P di III generazione: Pastry - 3/4 Le query sono istradate secondo il seguente algoritmo: • Se la chiave della query è uguale al NodeID corrente o in L ci sono nodi che condividono meno interi del nodo corrente, la query è conclusa; 0 FFFF…F • Se la destinazione è in L, il messaggio viene inoltrato a D471F1 tale peer; D467C4 D46A1C • Altrimenti, si identifica (in R D462BA o in alternativa in L o in M) D4213F il peer con il maggior numero di interi in comune D13DA3 e il primo non in comune 65A1FC più vicino a quello della chiave, e si inoltra il Lookup D46A1C messaggio a questi. Corso di Sistemi Distribuiti, prof. S. Russo Sistemi distribuiti peer-to-peer 38 Esempio P2P di III generazione: Pastry - 4/4 Pastry gestisce il churn dei peer secondo un meccanismo di heartbeat per rilevare i fallimenti e di riparazione del leaf set per porvi rimedio: • Periodicamente i peer scambiano messaggi di PING, il peer che non risponde entro un apposito timeout è considerato fallito; • Il nodo che ha scoperto il fallimento, contatta il peer numericamente successivo a quello fallito, chiedendo una copia del suo leaf set; • Il leaf set ricevuto avrà delle sovrapposizioni con quello in possesso dal peer che ha iniziato la procedura, ma anche validi peer per sostituire quello fallito; • I peer vicini sono informati del fallimento e eseguono la stessa procedura. Corso di Sistemi Distribuiti, prof. S. Russo Sistemi distribuiti peer-to-peer 39 Confronto DHT CHORD PASTRY Architettura Spazio NodeID unidirezionale e circolare Mesh globale Plaxton-style Algoritmo di Lookup Matching chiave e Matching chiave e NodeID prefisso NodeID Complesità del O(logN) lookup O(logBN) Routing State BlogBN + |L| + |M| Corso di Sistemi Distribuiti, prof. S. Russo logN Sistemi distribuiti peer-to-peer 40