A simulator for peer to peer protocols Gennaro Cordasco P2PSIM A simulator for peer to peer protocols Gennaro Cordasco
P2PSIM: A simulator for peer to peer protocols Sommario Introduzione I Protocolli usati in p2psim Incorporating geography Concetto di geometria Installazione Esecuzione Come valutare i risultati Come creare il proprio protocollo 03/12/2018 P2PSIM: A simulator for peer to peer protocols
P2PSIM: A simulator for peer to peer protocols p2psim è un simulatore di eventi, sviluppato per analizzare e comparare protocolli peer to peer (p2p); p2psim è free, multi-thread ed è sviluppato in c++; p2psim supporta diversi protocolli per sistemi peer-to-peer, fornisce un supporto per la sincronizzazione di metodi e permette di evitare i deadlocks. Versione attuale pre-alpha : Una versione al giorno!!; Niente commenti; Niente documentazione. 03/12/2018 P2PSIM: A simulator for peer to peer protocols
P2PSIM: A simulator for peer to peer protocols IRIS Project p2psim fa parte del progetto IRIS (MIT): Il progetto IRIS si propone come fine lo sviluppo di una nuova infrastruttura decentralizzata, basata su distributed hash tables (DHTs), Il progetto IRIS comprende tra l’altro: Chord; CFS (Cooperativa File System): è un sistema di memorizzazione basato su Chord; permette la pubblicazione dei propri file e la possibilità di accedere ai file pubblicati da altri (solo lettura); permette di distribuire il carico fra i nodi; permette di creare repliche dei dati, onde evitare la perdita degli stessi a seguito di fallimento dei nodi del sistema. 03/12/2018 P2PSIM: A simulator for peer to peer protocols
Protocolli supportati I protocolli supportati finora da p2psim sono: Chord (in tre versioni); Kademlia; Kelips; Koorde; Tapestry; 03/12/2018 P2PSIM: A simulator for peer to peer protocols
Protocolli supportati:Chord Chord è stato implementato in queste tre versioni: Chord (usa solo la successor list); ChordFinger (versione di Chord nota); ChordFingerPNS (Chord con Proximity Neighbor Selection); 03/12/2018 P2PSIM: A simulator for peer to peer protocols
Protocolli supportati:Chord(2) ID Resp. 8+1=9 14 8+2=11 8+8=16 21 8+16=24 24 8+32=40 42 8+4=12 03/12/2018 P2PSIM: A simulator for peer to peer protocols
Incorporating geography 03/12/2018 P2PSIM: A simulator for peer to peer protocols
Incorporating geography(2) Supponiamo che ogni nodo conosce il RTT con ogni altro nodo (non è fattibile, ma è possibile ottenere delle stime a un costo relativamente basso); Un idea: Supponiamo di avere m macchine sempre attive che svolgono il compito di marcatori. (Non devono necessariamente far parte del sistema); Ogni nodo misura il suo RTT verso ogni marcatore e ordina i marcatori in ordine crescente di RTT; Esistono m! disposizioni diverse dei marcatori; Si partiziona lo spazio delle chiavi in m! zone uguali; Si assegna lo stesso sottospazio ai nodi che calcolano la stessa disposizione dei marcatori; 03/12/2018 P2PSIM: A simulator for peer to peer protocols
Incorporating geography(3) PRS(Proximity routing selection) Durante la ricerca l’algoritmo di routing non sceglie il successivo step basandosi solo sulla distanza fra i nodi nella rete di overlay; considera anche la distanza effettiva fra i nodi (in termini di RTT); PNS(Proximity neighbor selection) La scelta dei vicini non dipende solo dalla distanza fra i nodi sulla rete di overlay ma è influenzata anche dalle distanze reali. 03/12/2018 P2PSIM: A simulator for peer to peer protocols
Incorporating geography(4) In generale la possibità di usare PNS, PRS o entrambi dipende dalla geometria del sistema preso in considerazione: Ring (Chord): Permette PNS e PRS; Tree (PRR) e XOR (Kademlia): PNS ma non PRS; Ipercubo (CAN, Tapestry): PRS ma non PNS; Butterfly (Viceroy) Non permette ne PNS ne PRS (vale in generale per tutti i sistemi a grado dei nodi costante (congettura!!!)); 03/12/2018 P2PSIM: A simulator for peer to peer protocols
Incorporating geography: Chord Chord e PRS: L’algoritmo di routing non va semplicemente al nodo più vicino sulla rete di overlay, ma ad esempio potrebbe considerare i due nodi più vicini e scegliere quello con RTT minore; Le path-lenght si allungano ma rimangono O(log n); In particolare : ad ogni passo la distanza fra il nodo destinazione e il nodo corrente si riduce da a 3/4 Nel caso peggiore la path lenght è quindi log4/3 n. 000 110 111 001 110 010 101 011 100 03/12/2018 P2PSIM: A simulator for peer to peer protocols
Incorporating geography: Chord Chord e PNS: La finger table viene riempita considerando anche il RTT: l’i-esimo finger del nodo non è semplicemente il ‘‘responsabile’’ della chiave +2i ma è il nodo più vicino(RTT) fra i nodi ‘‘responsabili’’ delle chiavi nell’intervallo [+2i-1, +2i ]. Anche in questo caso le path-lenght si allungano ma rimangono O(log n) (dimostrazione analoga alla precedente). Anche usando simultaneamente PRS e PNS la lunghezza asintotica delle path non varia; 000 111 001 110 010 101 011 100 03/12/2018 P2PSIM: A simulator for peer to peer protocols
P2PSIM: A simulator for peer to peer protocols PRS vs PNS % lookup 2 sec latenza 03/12/2018 P2PSIM: A simulator for peer to peer protocols
Protocolli supportati:Koorde Il protocollo koorde usa i de Bruijn graph (di base log n) al fine di ottenere un diametro di O(log n / log log n) con grado dei nodi O(log n) (non è possibile fare meglio!!!); De Bruijn graph (base 2): Il nodo m è connesso con i nodi 2m mod 2b e 2m+1 mod 2 b La geometria usata è il ring; 03/12/2018 P2PSIM: A simulator for peer to peer protocols
Protocolli supportati:Koorde(2) Tuttavia questi valori sono solo valori attesi e le costanti nascoste dietro la notazione ‘‘O grande’’ sono abbastanza grandi; La procedura che permette di stabilizzare i nodi è assai complicata e dispendiosa; E’ richiesta una stima di n (in realtà di log n); 03/12/2018 P2PSIM: A simulator for peer to peer protocols
Protocolli supportati:Kelips Sistema sviluppato per sistemi p2p di dimensioni medio-piccole; Utile quando l’applicazione richiede operazioni di lookup particolarmente veloci O(1); Il grado dei nodi è ; Si può fare di meglio? Kelips consiste in k gruppi virtuali di circa n/k nodi (distribuzione uniforme); Ogni nodo mantiene una completa visione del proprio gruppo (compresi i file gestiti) e una visione parziale degli altri gruppi; 03/12/2018 P2PSIM: A simulator for peer to peer protocols
Protocolli supportati:Kelips(2) In particolare, ogni nodo mantiene: Un link per ogni elemento del proprio gruppo (n/k); Una entry per ogni file gestito dal proprio gruppo (F/k); Un numero costante di link per ogni altro gruppo (c(k-1)); In totale vi sono da mantenere S(k,n) = n/k + c(k-1) + F/k; Il valore di k che minimizza S(k,n) è . (Se supponiamo il numero dei file proporzionale rispetto a n, otteniamo k = ) ; Le entry per ogni nodo vengono memorizzate usando AVL(Adelson-Velskii and Landis)-Tree. 03/12/2018 P2PSIM: A simulator for peer to peer protocols
Protocolli supportati: Tapestry Realizzazione dinamica dell’algoritmo di Plaxton et al. (che non si adattava a sistemi dinamici); Supponendo che le chiave è costituita da un intero positivo l’algoritmo di routing corregge a ogni passo un singolo digit alla volta; Per fare ciò un nodo deve avere informazioni sui nodi responsabili dei prefissi della sua chiave; (O(log N) nodi) Il numero di messaggi necessari per fare lookup è O(log N); L’algoritmo in pratica simula un Ipercubo; 03/12/2018 P2PSIM: A simulator for peer to peer protocols
Protocolli supportati:Kademlia Ogni nodo è rappresentato da un identificatore di 160 bit; Dati due identificatori x e y la distanza fra x e y (d(x,y)) è definita come x (xor) y; XOR è una metrica: d(x,x)=0; d(x,y)>0 se xy; d(x,y)=d(y,x) (simmetrico); d(x,y)+d(y,z)d(x,z). fissato x e una distanza d esiste un solo y tale che d(x,y)=d; Per ogni 0 i 160, ogni nodo mantiene una lista di k (costante) nodi (detta k-bucket) a distanza compresa fra 2i e 2i+1 da se stesso. 03/12/2018 P2PSIM: A simulator for peer to peer protocols
Protocolli supportati:Kademlia(2) I k-bucket vengono aggiornati e ordinati ad ogni operazione con una politica detta least-recently seen node; Ovviamente a ogni passo l’algoritmo di routing dimezza la distanza fra il nodo che fa la richiesta e la destinazione (O(log n) passi); La dimensione delle tabelle di routing è klog n; Poiché è simmetrico il sistema si stabilizza da solo. In pratica durante le lookup le tabelle di routing vengono aggiornate; 03/12/2018 P2PSIM: A simulator for peer to peer protocols
P2PSIM: A simulator for peer to peer protocols Requirements p2psim può essere installato su Linux e FreeBSD con GCC 2.95.3 oppure GCC 3.3.2; Utilizza Openssl, libcrypto e libgmp; 03/12/2018 P2PSIM: A simulator for peer to peer protocols
P2PSIM: A simulator for peer to peer protocols Execution L’applicazione prende in input 3 file di testo, per rappresentare rispettivamente: La topologia della rete; Il protocollo da utilizzare; Gli eventi da generare. Esempio di esecuzione: p2psim/p2psim example/protocol.txt example/topology.txt example/events.txt 03/12/2018 P2PSIM: A simulator for peer to peer protocols
P2PSIM: A simulator for peer to peer protocols Topology Il primo file di testo permette di definire la topologia della rete: topology Euclidean (si considerano le distanza euclidea fra I nodi) failure_model NullFailureModel (non ci sono fallimenti di nodi) 1 0,0 (id del nodo, ascissa e ordinata) 2 5,5 3 8,8 4 12,6 5 13,8 6 0,0 7 20,34 … La distanza fra nodi non è data dal RTT ma dalla distanza euclidea (il RTT può variare, la distanza euclidea no!!!!). Come si possono simulare le variazioni del RTT? 03/12/2018 P2PSIM: A simulator for peer to peer protocols
P2PSIM: A simulator for peer to peer protocols Protocollo Il file di testo che rappresenta il protocollo è abbastanza semplice: {PROTOCOL} [KEY=VAL [KEY=VAL [...]]] In pratica viene instanziata la classe PROTOCOL alla quale vengono passati tutti i parametri KEY=VAL; Alcuni esempi: ChordFingerPNS base=2 successors=16 pnstimer=2000000 basictimer=2000000 succlisttimer=2000000 m=1 allfrag=1 recurs=1 maxlookuptime=0 initstate=1 Kademlia k=20 alpha=3 stabilize_timer=32000 refresh_rate=32000 03/12/2018 P2PSIM: A simulator for peer to peer protocols
P2PSIM: A simulator for peer to peer protocols Protocollo(2) ChordFingerPNS base=2 base usata dal protocollo successors=16 utile se ci sono fallimenti pnstimer=2000000 stabilize per i PNSfinger basictimer=2000000 stabilize per succ./ pred. succlisttimer=2000000 stabilize per i successors m=1 numero di copie allfrag=1 trova una sola occorrenza recurs=1 lookup ricorsiva/iterativa maxlookuptime=0 tempo massimo di attesa per una lookup (0= attesa indefinita) 03/12/2018 P2PSIM: A simulator for peer to peer protocols
P2PSIM: A simulator for peer to peer protocols Protocollo(3) Kademlia k=20 dimensione del bucket alpha=3 numero di lookup concorrenti stabilize_timer=32000 refresh_rate=32000 03/12/2018 P2PSIM: A simulator for peer to peer protocols
P2PSIM: A simulator for peer to peer protocols Eventi Gli eventi possono essere generati in due modi: Inserendo un evento per ogni riga del file; node 1 Chord:join wellknown=0 node 2 Chord:join wellknown=1 node 3 Chord:join wellknown=0 … node 3 6 Chord:lookup Utilizzando un generatore di eventi; generator {GENERATOR} [KEY=VAL [KEY=VAL [...]]] generator ChurnEventGenerator proto=Kademlia … 03/12/2018 P2PSIM: A simulator for peer to peer protocols
Come vanno letti i risultati Purtroppo non esiste uno standard per la visualizzazione dei risultati di una simulazione; In realtà i risultati vengono generati dal distruttore della classe che rappresenta il protocollo testato; Nella versione attuale di p2psim, quindi, ogni protocollo si basa su parametri diversi, e questo complica la comparazione dei protocolli. 03/12/2018 P2PSIM: A simulator for peer to peer protocols
Come vanno letti i risultati(1) ChordFingerPNS: Supponiamo di lanciare ChordFingerPNS in questo modo: p2psim protocol.txt topology.txt events.txt dove protocol.txt ChordFingerPNS base=2 successors=16 pnstimer=2000000 basictimer=2000000 succlisttimer=2000000 m=1 allfrag=1 recurs=1 maxlookuptime=0 topology.txt topology Euclidean failure_model NullFailureModel 1 85,71 2 97,47 3 92,43 … 512 1,65 events.txt generator ChurnEventGenerator proto=ChordFingerPNS deathmean=0 lifemean=0 lookupmean=116000 exittime=2000000 03/12/2018 P2PSIM: A simulator for peer to peer protocols
Come vanno letti i risultati(2) ChordFingerPNS: 2253468 1243800 236844 727768 22528 0 22528 0 0 153.763 64.000 148.000 248.000 1.000 1.000 3.886 0.000 0.000 8977 Dove: 2253468 costo totale di comunicazione Dal 2 al sesto valore costi di comunicazione per differenti tipi di pacchetti(lookup, manutenzione, ecc.) 153.763 latenza media lookup 1.000 percentuale di successi 3.886 lunghezza media delle paht 8977 numero totale di lookup 03/12/2018 P2PSIM: A simulator for peer to peer protocols
Come vanno letti i risultati(3) Kademlia: Supponiamo ora di lanciare Kademlia in questo modo: p2psim protocol.txt topology.txt events.txt dove protocol.txt Kademlia k=20 alpha=3 stabilize_timer=32000 refresh_rate=32000 topology.txt topology Euclidean failure_model NullFailureModel 1 0,0 2 5,5 3 8,8 4 12,6 5 13,8 6 0,0 … 256 20,34 events.txt generator ChurnEventGenerator proto=Kademlia ipkeys=1 03/12/2018 P2PSIM: A simulator for peer to peer protocols
Come vanno letti i risultati(4) Kademlia: rpc_bytes 19160548 costo totale di comunicazione 2958 good, 0 ok failures, 0 bad failures, avglat 152.9 latenza media lookup avghops 1.08 lunghezza media path 03/12/2018 P2PSIM: A simulator for peer to peer protocols
Come simulare il proprio protocollo Simulare un protocollo con p2psim è abbastanza semplice: I file sillyprotocol.h e silliprotocol.C contengono una bozza di protocollo non implementato; E’ sufficiente implementare le operazioni di join e lookup; (E’ possibile farsi un’idea del codice da scrivere analizzando il codice sviluppato per gli altri protocolli); 03/12/2018 P2PSIM: A simulator for peer to peer protocols
Come simulare il proprio protocollo(1) Infine bisogna editare i 3 file di testo (protocollo, topologia, generatore di eventi) da passare all’applicazione. E’ possibile inoltre creare il proprio generatore di eventi utilizzando tra l’altro SillyEventGenerator. 03/12/2018 P2PSIM: A simulator for peer to peer protocols
P2PSIM: A simulator for peer to peer protocols Riferimenti http://www.pdos.lcs.mit.edu/p2psim http://project-iris.net/ http://www.pdos.lcs.mit.edu/chord/ P. Maymounkov and D. Mazières, “Kademlia: A peer to peer information system based on the xor metric”. In Proc. of the First International Workshop on Peer-to-Peer Systems, March 2002. M. Castro, P. Druschel, Y. Hu, and A. Rowstron, “Exploiting network proximity in distributed hash tables”. In International Workshop on Future Directions in Distributed Computing (FuDiCo 2002), 2002. Krishna Gummadi, Ramakrishna Gummadi, Steve Gribble, Sylvia Ratnasamy, Scott Shenker, and Ion Stoica, “The Impact of DHT Routing Geometry on Resilience and Proximity”. Proceedings of ACM SIGCOMM 2003, March, 2003. 03/12/2018 P2PSIM: A simulator for peer to peer protocols
P2PSIM: A simulator for peer to peer protocols Riferimenti(2) Frans Kaashoek and David R. Karger, “Koorde: A simple degree-optimal hash table”. In 2st International Peer To Peer Systems Workshop (IPTPS 2003), Berkeley,CA, USA, February 2003. I. Gupta, K. Birman, P. Linga, A. Demers, and R. van R. , “Kelips: Building an efficient and stable P2P DHT through increased memory and background overhead”. In 2st International Peer To Peer Systems Workshop (IPTPS 2003), Berkeley,CA, USA, February 2003. B. Zhao, J. Kubiatowicz, and A. Joseph, “Tapestry: An infrastructure for fault-tolerant wide-area location and routing”. Technical Report UCB/CSD-01-1141, Computer Science Division, U. C. Berkeley, April 2001. 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. Buone Feste 03/12/2018 P2PSIM: A simulator for peer to peer protocols