Sistemi Peer To Peer (P2P) Avanzati • Gennaro Cordasco – [email protected] – http://www.dia.unisa.it/~cordasco – Laboratorio ISISLAB2 (L8 a Baronissi) Sistemi P2P avanzati Chord: A Scalable Peer-to-Peer Lookup Protocol for Internet Applications Autori: I. Stoica, R. Morris, D. Liben-Nowell, D. R. Karger, M. F. Kaashoek, F. Dabek, H. Balakrishnan MIT and Berkley http://www.pdos.lcs.mit.edu/chord/ Sistemi P2P avanzati Outline • • • • Motivazioni Idea Protocollo Valutazione delle prestazioni: lookup Sistemi P2P avanzati Chord: Obiettivi • • • • • Load Balance Decentralization Scalability Availability Flexibility Sistemi P2P avanzati Chord: Lookup • Come trovare risorse in un sistema completamente decentralizzato? • La lookup è semplicemente una operazione, a disposizione di tutti i peer di un sistema P2P, che data una chiave (una risorsa), restituisce il gestore/responsabile della risorsa. • Possiamo vedere l’operazione lookup come una funzione (dinamica) che prende in input una chiave (un identificatore a 160 bit) e restituisce un indirizzo IP. Lookup(id)IP address Sistemi P2P avanzati Chord: Lookup • Come trovare risorse in un sistema completamente decentralizzato? Publisher Key=“LetItBe” Value=MP3 data N2 N1 Internet N4 il Lookup è il problema fondamentale Sistemi P2P avanzati N3 N5 Client ? Lookup(“LetItBe”) Chord: Lookup • DHTs (Tapestry, Pastry, Chord, CAN,…) Publisher Key=“LetItBe” Value=MP3 data N2 N1 N3 Internet N4 N5 Client Lookup(“LetItBe”) • Qual’è il modo migliore di realizzare il servizio di lookup? Sistemi P2P avanzati Chord • Quale è il miglior modo per costruire le tabelle di routing? • Come facciamo a mantenere sempre corrette le tabelle di routing in situazioni “molto” dinamiche? • Come gestire l’ingresso (join) e l’uscita (leave) dei nodi? • Quale è il miglior algoritimo di routing? Sistemi P2P avanzati Chord: Consistent Hashing • Fondamentalmente, l’architettura di Chord è basata su un ring di 2m identificatori [0, 2m-1] (di solito m = 160) • Chord usa Consistent Hashing per assegnare identificatori sia ai nodi/peers sia alle risorse • Consistent Hashing permette: – bilanciamento del carico sui nodi (con N nodi e K risorse, ogni nodo gestisce circa (1+)K/N chiavi (risorse), dove =O(log N)) – basso numero di operazioni di manutenzione a seguito di join/leave dei nodi (quando entra l’N+1th nodo nel sistema circa O(K/N) chiavi (risorse) devono cambiare posizione) • Discuteremo in dettaglio Consisten Hashing nelle prossime lezioni Sistemi P2P avanzati Chord: Overview • La tabella di routing relativa alle risorse è distribuita su tutti i nodi attivi del sistema • Per risolvere una lookup è necessario che i nodi si scambino informazioni • Prestazioni: In una rete “stabile” di N nodi, ogni nodo mantiene informazioni relative a O(log N) vicini e risolve qualsiasi lookup con al più O(log N) messaggi • Tuttavia anche se la rete non è “stabile” con poca informazione (1 solo link) il protocollo Chord garantisce la correttezza della lookup Sistemi P2P avanzati Chord: Identificatori • Lo spazio degli identificatori a m bit è utilizzato sia per le risorse che per i nodi • identificatore di Chiave = SHA-1(Risorsa) chiave=“LetItBe” SHA-1 ID=60 • identificatore di Nodo = SHA-1(indirizzo IP) IP=“198.10.10.1” Sistemi P2P avanzati SHA-1 ID=123 Chord: Identificatori • Gli identificatori ottenuti utilizzando Consistent Hashing vengono mappati su un ring circolare modulo 2m 000000 111000 001000 010000 110000 011000 101000 Sistemi P2P avanzati m=6 100000 Chord • Il responsabile di una risorsa x con ID k è il primo nodo che si incontra procedendo in senso orario a partire da k. nodi risorse m=6 1 8 56 54 51 48 21 42 38 Sistemi P2P avanzati 10 14 38 32 30 24 Chord • Esempio leave (nodo 14) nodi risorse m=6 1 8 56 54 51 48 21 42 38 Sistemi P2P avanzati 10 14 38 32 30 24 Chord • Esempio join (nodo 26) nodi risorse m=6 1 8 56 54 51 48 21 42 38 Sistemi P2P avanzati 10 38 24 26 32 30 Chord: Lookup • Ogni nodo ha informazioni su tutti gli altri • Supponiamo che il nodo 8 è interessato alla chiave 54: poiché il nodo 8 conosce tutti i nodi, è in grado di sapere senza fare nessuna richiesta che la chiave 54 è gestita dal nodo 56 • Richiede info globali m=6 nodi 1 • Tabella di routing N risorse 8 56 • Costo lookup O(1) msg 10 54 51 • Manutenzione: 48 Praticamente ingestibile!!! 21 42 Sistemi P2P avanzati 38 38 24 26 32 30 Chord: Lookup(2) • Ogni nodo conosce solo il proprio successore • Supponiamo che il nodo 8 è interessato alla chiave 54: ogni nodo conosce solo il proprio successore e quindi la query attraversa l’anello in senso orario finché non raggiunge il predecessore della destinazione nodi 1 • Richiede poche info: risorse 56 • Tabella di routing 1 entry 54 • Costo lookup O(N) msg 51 m=6 8 10 48 21 42 Sistemi P2P avanzati 38 38 24 26 32 30 Simple Key location Il nodo n chiama lookup(id) Sistemi P2P avanzati Il nodo 8 chiama lookup(54) Chord: Correttezza Routing • Ogni nodo n di Chord mantiene log N successori del nodo n più il predecessore • Questo insieme di nodi viene usato per dimostrare la correttezza del Routing nodi 1 8 risorse 56 54 51 10 21 Sistemi P2P avanzati 38 38 24 Chord: Lookup(3) • • • • Ogni nodo conosce, al più, altri m nodi nel sistema (fingers) Mostreremo che w.h.p. il numero di finger è O(log N) La distanza cresce esponenzialmente In particolare, il finger i del nodo n punta al responsabile (successor) della chiave n+2i-1 nodi m=6 1 8 risorse 56 54 51 48 21 42 Sistemi P2P avanzati 10 38 38 24 26 32 30 Chord: Ricapitolando • Ogni nodo n di Chord mantiene la connessione con log N successori (successors) del nodo n più il predecessore • Inoltre, ogni nodo conosce, al più, altri O(log N) w.h.p, nodi nel sistema (fingers) • In totale ogni nodo mantiene log N +1 + O(log N)=O(log N) connessioni nodi m=6 1 8 risorse 56 54 51 48 21 42 Sistemi P2P avanzati 10 38 38 24 26 32 30 Tavola dei finger Successors ID Resp. indice Nod o 1 14 8+1=9 14 2 8+2=11 21 14 3 8+4=12 4 8+8=16 5 24 14 32 21 38 8+16=24 6 24 42 8+32=40 42 Predecessor Nodo 1 m=6 Sistemi P2P avanzati successor(0)=0 0 1 14 15 0 successor(14)=15 successor(1)=1 1 successor(2)=3 2 14 10 13 2 3 12 4 5 11 6 10 successor(6)=6 successor(10)=13 7 9 Sistemi P2P avanzati successor(9)=9 8 9 6 0 1 14 0 15 i succ node 1 2 3 node 2 3 3 14 10 13 12 1 i succ 1 14 15 3 5 6 2 15 15 4 9 9 3 1 1 4 5 6 11 10 2 Qualcuno vuol provare a descrivere la tabella di routing del nodo 9? i succ 1 10 ? ?13 2 11 ? 3 13 ? 4 ?1 ?13 ?13 ?1 9 node 6 8 Sistemi P2P avanzati 9 4 5 7 2 3 6 Algoritmo Lookup Il nodo n chiama lookup(id) Sistemi P2P avanzati 14 0 15 1 2 14 13 12 i succ 1 14 15 2 15 15 3 1 1 4 5 6 11 10 node i succ 1 10 13 2 11 13 3 13 13 4 1 1 9 Sistemi P2P avanzati i succ node 1 2 3 2 3 3 3 5 6 4 9 9 3 4 node 5 6 7 8 Join e Stabilization Crea Anello Vuoto Join n=N26, n’=qualunque nodo attivo Stabilize n=N26 n=N21 Sistemi P2P avanzati Join e Stabilization • Altre operazioni periodiche ma utilizzate con frequenza minore sono fix.finger e check.predecessor Sistemi P2P avanzati Chord: Risultati • Lemma Dato un qualunque intervallo di ampiezza 2m/N, il numero di ID di nodi atteso in questo intervallo è 1 e O(log N) w.h.p. Sistemi P2P avanzati Chord: Risultati • Teorema Il numero dei nodi che deve essere contattato per risolvere una lookup è O(log N) w.h.p., Dim Supponiamo che il nodo n deve risolvere una lookup per l’id k Siano p e s, rispettivamente, il predecessore e il successore dell’ID k Se np e ns, n non è in grado di risolvere da solo la query n p k s Sistemi P2P avanzati Chord: Risultati • Teorema Il numero dei nodi che deve essere contattato per risolvere una lookup è O(log N) w.h.p. Dim … n contatta, quindi, il più vicino predecessore di k a lui noto (il più grande finger che non va oltre k). Sia i tale che p [n+2i-1, n+2i) Poiché tale intervallo contiene almeno un nodo (p) il nodo n contattera l’i-esimo finger f. Ovviamente tale nodo, ha ID minore o uguale di p. Per definizione di finger la distanza fra n e f è almeno 2i-1 Sistemi P2P avanzati f n p id s Chord: Risultati • Teorema Il numero dei nodi che deve essere contattato per risolvere una lookup è O(log N) w.h.p. Dim … Per definizione di finger la distanza fra n e f è almeno 2i-1 Inoltre f e p sono entrambi nell’intervallo [n+2i-1, n+2i), quindi la loro distanza è al più 2i-1 In altre parole, f è più vicino a p che a n, e quindi ad ogni hop la distanza “almeno” si dimezza Sistemi P2P avanzati f n p id s Chord: Risultati • Teorema Il numero dei nodi che deve essere contattato per risolvere una lookup è O(log N) w.h.p. Dim …. Ad ogni hop la distanza “almeno” si dimezza La distanza maggiore fra due ID è 2m-1, poiché tale distanza ad ogni hop si n dimezza, in m hop siamo in grado di eseguire qualunque lookup f p id s Sistemi P2P avanzati Chord: Risultati • Teorema Il numero dei nodi che deve essere contattato per risolvere una lookup è O(log N) w.h.p.. Dim Sappiamo che ad ogni hop la distanza, in termini di id fra sorgente e destinazione si dimezza. Supponiamo di effettuare log N hops, dopo questi passi la distanza dalla destinazione si riduce ad al più 2m / 2 logN = 2m/N. Sappiamo dal lemma precedente che in un tale intervallo ci sono al più O(log N) nodi w.h.p. Quindi effettuando altri O(log N) passi (anche usando solo i successori negli ultimi O(log N) passi) arriviamo alla destinazione. In totale log N + O(log N) = O(log N) passi. Sistemi P2P avanzati La Lookup impiega O(log N) hop 5 10 110 20 19 99 32 80 60 Sistemi P2P avanzati Lookup(19) Chord: Risultati • Abbiamo detto che i nodi di Chord mantengono O(log N) informazioni relative ad altri nodi, d’altra parte abbiamo detto che un nodo può avere m fingers. • In realtà, è possibile mostrare che non tutti gli m i finger sono nodi distinti. Quello che accade è che, w.h.p., i primi m-2logN finger cadono tutti sul successore del nodo. • Infatti un lemma analogo a quello mostrato in precedenza permette di dimostrare che che la distanza minima fra due nodi (w.h.p.) è almeno 2m/N2 • Abbiamo detto che il finger i del nodo n cade nel successore dell’ID n+2i-1 • Di conseguenza, per ogni i ≤ m - 2log N +1, il responsabile dell’ID n+2i-1 ≤ n+ 2m/N2 cade nel successore di n. • In totale il numero dei nodi distinti che bisogna mantenere nella tabella di routing è m – (m - 2log N) = O(log N) Sistemi P2P avanzati Chord: Risultati • Lemma Dato un qualunque intervallo di ampiezza 2m/N, il numero di ID di nodi atteso in questo intervallo è 1 ed O(log N) w.h.p. Dim Abbiamo necessita di alcuni risultati intermedi: – Disuguaglianza di Marcov • Sia X una variabile casuale a valori positivi, allora per ogni a>0: E[X] a Pr[Xa] Sistemi P2P avanzati Disuguaglianza di Marcov Disuguaglianza di Marcov Sia X una variabile casuale a valori positivi, allora per ogni a>0: E[X] a Pr[Xa] Dim Proviamo per una variabile casuale discreta che assume valori da 1 a k (è il nostro caso): k Pr[ x a ] Pr[ x i ] k ia a 1 k i 1 i 1 i a E[ x] i Pr[ x i ] i Pr[ x i ] i Pr[ x i ] Sistemi P2P avanzati Disuguaglianza di Marcov Disuguaglianza di Marcov Sia X una variabile casuale a valori positivi, allora per ogni a>0: E[X] a Pr[Xa] Dim Proviamo per una variabile casuale discreta che assume valori da 1 a k (è il nostro caso): k k k i a i a i a E[ x] i Pr[ x i ] a Pr[ x i ] a Pr[ x i ] E[ x] a Pr[ x a] Sistemi P2P avanzati Chord: Risultati • Lemma Dato un qualunque intervallo di ampiezza 2m/N, il numero di ID di nodi atteso in questo intervallo è 1 e O(log N) w.h.p. E[ x] a Pr[ x a] Dim Abbiamo necessita di alcuni risultati intermedi: – Disuguaglianza di Marcov – Chernoff Bound Siano X1, X2, …,Xn prove ripetute indipendenti tali che per Pr[Xi=1]=pi, 0 < pi < 1. n Se X X i , E[ X ] i 1 pi , 0 allora i 1 Sistemi P2P avanzati 1 ≤ i ≤ n, n e Pr[ X (1 ) ] (1 ) ( 1 ) Chernoff Bound • Chernoff Bound Siano X1, X2, …,Xn prove ripetute indipendenti tali che per 1 ≤ i ≤ n, Pr[Xi=1]=pi, 0 < pi < 1. n exp(x)=ex n Se X X i , E[ X ] pi , 0 allora i 1 Dim i 1 e Pr[ X (1 ) ] (1 ) (1 ) E[ x] a Pr[ x a] E[ x] Pr[ x a ] a Pr[ X (1 ) ] Pr[exp( tX ) exp( t (1 ) )] per ogni reale positivo t. Se applichiamo la disuguaglianza di Marcov a destra si ottiene E[exp( tX )] Pr[ X (1 ) ] exp( t (1 ) ) Sistemi P2P avanzati Chernoff Bound • Chernoff Bound Siano X1, X2, …,Xn prove ripetute indipendenti tali che per 1 ≤ i ≤ n, Pr[Xi=1]=pi, 0 < pi < 1. Se X n X i , E[ X ] i 1 pi , 0 allora n i 1 Dim … e Pr[ X (1 ) ] (1 ) ( 1 ) E[exp( tX )] Pr[ X (1 ) ] exp( t (1 ) ) n Poichè le Xi sono indipendenti, anche le exp(tXi) lo sono. E[exp( tX )] E[exp( t i 1 X i )] E[ exp( tX i )] i 1 E[exp( tX i )] n i 1 Sistemi P2P avanzati n Chernoff Bound • Chernoff Bound Siano X1, X2, …,Xn prove ripetute indipendenti tali che per n, Pr[Xi=1]=pi, 0 < pi < 1. n Se X X i , E[ X ] i 1 pi , 0 allora n i 1 Dim … e Pr[ X (1 ) ] (1 ) ( 1 ) E[exp( tX )] Pr[ X (1 ) ] exp( t (1 ) ) E[exp( tX )] i 1 E[exp( tX i )] n La variabile exp(tXi) assume valore et con probabilità pi e 1 con probabilità 1-pi. Sistemi P2P avanzati 1≤i≤ Chernoff Bound • Chernoff Bound Siano X1, X2, …,Xn prove ripetute indipendenti tali che per 1 ≤ i ≤ n, Pr[Xi=1]=pi, 0 < pi < 1. n Se X X i , E[ X ] i 1 pi , 0 allora n i 1 e Pr[ X (1 ) ] (1 ) ( 1 ) Dim E[exp( tX )] Pr[ X (1 ) ] exp( t (1 ) ) … La variabile exp(tXi) assume valore et con probabilità pi e 1 con probabilità 1-pi. E[exp( tX )] i 1 E[exp( tX i )] i 1 ( pi et 1 pi ) i 1 (1 pi (et 1)) n Sistemi P2P avanzati n n Chernoff Bound • Chernoff Bound Siano X1, X2, …,Xn prove ripetute indipendenti tali che per 1 ≤ i ≤ n, Pr[Xi=1]=pi, 0 < pi < 1. n Se X X i , E[ X ] i 1 pi , 0 allora n i 1 e Pr[ X (1 ) ] (1 ) ( 1 ) Dim … E[exp( tX )] Pr[ X (1 ) ] exp( t (1 ) ) E[exp( tX )] i 1 (1 pi (et 1)) n Poichè 1+x<ex n n n t t t t ( 1 p ( e 1 )) exp( p ( e 1 )) exp( p ( e 1 ) ) exp( ( e 1)) i1 i i1 i i1 i Sistemi P2P avanzati Chernoff Bound • Chernoff Bound Siano X1, X2, …,Xn prove ripetute indipendenti tali che per 1 ≤ i ≤ n, Pr[Xi=1]=pi, 0 < pi < 1. n Se Dim … X X i , E[ X ] i 1 pi , 0 i 1 n allora e Pr[ X (1 ) ] (1 ) ( 1 ) exp( (e 1)) Pr[ X (1 ) ] exp( t (1 ) ) t la espressione a destra assume il valore minimo per t=ln(1+δ). Sostituendo otteniamo il Teorema. Sistemi P2P avanzati Chord: Risultati • Lemma Dato un qualunque intervallo di ampiezza 2m/N, il numero di ID di nodi atteso in questo intervallo è 1 e O(log N) w.h.p. e Pr[ X (1 ) ] (1 ) Dim (1 ) Abbiamo necessita di alcuni risultati intermedi: – Disuguaglianza di Marcov – Chernoff Bound Definiamo e F ( , ) (1 ) (1 ) Sistemi P2P avanzati Chord: Risultati • Lemma Dato un qualunque intervallo di ampiezza 2m/N, il numero di ID di nodi atteso in questo intervallo è 1 e O(log N) w.h.p. Dim e F ( , ) (1 ) ( 1 ) e1 e e F ( , ) (1 ) (1 ) ( 1 ) ( 1 ) ( 1 ) (1 ) E quindi per >2e-1, F ( , ) 2 Sistemi P2P avanzati (1 ) Chord: Risultati • Lemma Dato un qualunque intervallo di ampiezza 2m/N, il numero di ID di nodi atteso in questo intervallo è 1 e O(log N) w.h.p. Dim (1 ) F ( , ) 2 La precedente relazione può essere utilizzata per risolvere il problema: Per quali valori di δ la probabilità che X>(1+δ)μ è trascurabile ? Sistemi P2P avanzati Chord: Risultati • Lemma Dato un qualunque intervallo di ampiezza 2m/N, il numero di ID di nodi atteso in questo intervallo è 1 e O(log N) w.h.p. Dim (1 ) F ( , ) 2 Modelliamo il nostro esperimento come il lancio di N palline in N contenitori. Sia Yi il numero di palline cadute nell’i-esimo contenitore. Siamo in presenza di prove ripetute indipendenti. La probabilità di successo pi=1/N. La media risulta banalmente 1. Sistemi P2P avanzati 2m/N Chord: Risultati • Lemma Dato un qualunque intervallo di ampiezza 2m/N, il numero di ID di nodi atteso in questo intervallo è 1 e O(log N) w.h.p. Dim (1 ) F ( , ) 2 La probabilità che il numero di palline in un contenitore sia k log2 N è limitata dalla relazione F ( , ) 2 Con δ = k log2N -1. Sostituendo otteniamo (1 ) 1 F ( , ) k N Sistemi P2P avanzati 2m/N Altamente improbabil e Ricapitolando • • • Le chiavi sono mappate su un array circolare costituito da 2m identificatori; Il nodo responsabile di una determinata chiave è il primo nodo che la succede in senso orario; Ogni nodo n di Chord mantiene due insiemi di vicini: – Il primo contiene gli m successori del nodo n più il predecessore. Questo insieme viene usato per dimostrare la correttezza del Routing; – Un insieme di n nodi costituito dai responsabili delle chiavi distanziate esponenzialmente dal nodo n, vale a dire l’insieme delle chiavi che si trovano a distanza 2i da n dove 0 i m-1. Questo insieme viene usato per dimostrare l’efficienza del Routing; m=3 Sistemi P2P avanzati Ricapitolando • Le informazioni che il nodo deve mantenere sugli altri 000 nodi sono log N +111 m + 1110 (O(log N) WHP); 001 • Il numero di messaggi necessari per fare lookup è m (O(log N) WHP); 110 010 • L’algoritmo di routing effettua a ogni step il passo più grande che riesce a fare, senza mai superare il target; 101 011 100 Il costo che si paga quando un nodo lascia o si connette alla rete è di O(log2N) messaggi WHP; L’algoritmo in pratica simula un Ipercubo, inoltre si comporta molto bene in un sistema dinamico. Sistemi P2P avanzati Fine Lezione 2 • Domande?? Sistemi P2P avanzati