Progettazione di un protocollo P2P per la comunicazione basata su predicati

Candidato: Daniele Spaccapeli

Relatore: Michele Loreti

Comunicazione

Tipologie di routing più comuni:

  • Unicast
  • Broadcast
  • Multicast

i messaggi sono indirizzati in maniera specifica ai destinatari

Comunicazione basata su predicati

gruppo di destinatari è individuato dinamicamente in base alla valutazione di un predicato logico

  • astrazione per trattare di complessi sistemi adattivi (CAS)
  • i nodi non devono essere coscienti della presenza reciproca
  • adatto in contesti altamente dinamici 

Architettura Reti

Modello Client-Server

Modello Peer-to-Peer

  • Relativa semplicità di sviluppo
  • Sicurezza
  • Flessibilità di aggiornamento
  • Riduzione dei costi
  • Scalabilità
  • Assenza del punto critico
  • Costo
  • Congestione traffico
  • Collo di bottiglia

Hash Table Distribuita (DHT)

P2P di seconda generazione

  • Ricerca (chiave, valore)
  • Hashing consistente
  • Lista dei nodi vicini

Esempi: BitTorrent, YaCy, CDN, Chord, Kademlia ...

Framework

Funzionalità generiche che facilitano lo sviluppo software 

Framework P2P studiati:

  • JXTA
  • XNap
  • Pastry

Framework - Confronto

Documentazione Reperibilità Semplicità
JXTA
XNap
Pastry

Vediamo Pastry in dettaglio ...

Pastry - Introduzione

sviluppato dalla Rice University e Microsoft Research

Caratteristiche:

  • identificativi a 128 bit
  • routing del messaggio al nodo più vicino alla chiave
  • ogni nodo mantiene un leaf set
  • ogni nodo mantiene una tabella di routing

Pastry - Routing

  • ID scelti con probabilità uniforme
  • contiene indirizzi IP
  • 32 righe e 16 colonne
  • gli elementi in riga condividono le prime n cifre
O(log_{16}{N})
O(log16N)O(log_{16}{N})

Numero di salti per ricezione:

Pastry - Esempio

Protocollo P2P per la comunicazione basata su predicati

basato su Pastry, costruito espandendo le primitive per supportare la comunicazione su predicati

  • i messaggi sono scambiati a seconda degli attributi (servizi) offerti dal nodo
  • propagazione dei messaggi basato su alberi multicast
  • ogni agente manterrà una lista di tutti gli attributi presenti nella rete
  • gli attributi si dividono in federazioni e ognuna di esse avrà un super-nodo responsabile della comunicazione

Protocollo - Definizioni

Albero Multicast

  • trasmissione unidirezionale
  • traffico dalla radice alle foglie
  • filtrato a seconda dei predicati

Formato dei predicati

\bigwedge_{j=1}^n \left( \bigvee_{k=1+j}^{m(j)} L_{j,k-j} \right)
j=1n(k=1+jm(j)Lj,kj)\bigwedge_{j=1}^n \left( \bigvee_{k=1+j}^{m(j)} L_{j,k-j} \right)

Forma normale congiuntiva, massima espressività, parsing semplice

Federazioni

Hashing

Partizioni delle formule possibili. Le formule in due partizioni diverse sono indipendenti tra loro 

\forall \;\; \mathit{F}_i, \mathit{F}_j \;\; con \;\; (i\neq j)
Fi,Fjcon(ij)\forall \;\; \mathit{F}_i, \mathit{F}_j \;\; con \;\; (i\neq j)
\forall \;\; \varphi \in \mathit{F}_i, \;\; \forall \;\; \psi \in \mathit{F}_j
φFi,ψFj\forall \;\; \varphi \in \mathit{F}_i, \;\; \forall \;\; \psi \in \mathit{F}_j
\varphi \;\; indipendente \;\; da \;\; \psi
φindipendentedaψ\varphi \;\; indipendente \;\; da \;\; \psi

Ogni attributo e formula appartenente a una stessa federazione indurrà codifica univoca

h_{\mathscr{F}}(\varphi) = id, \; \; \;\forall \varphi \subset \mathscr{F}
hF(φ)=id,φFh_{\mathscr{F}}(\varphi) = id, \; \; \;\forall \varphi \subset \mathscr{F}

Protocollo - Fase Iniziale

Bootstrapping

operazioni di handshake:

  • recupero attributi
  • recupero funzione hash

Advertising

dopo ingressi un messaggio circolare per iniziare la creazione degli alberi multicast

Impostazione degli attributi

per ogni federazione i nodi faranno sapere al proprio padre dell'albero multicast, i valori dei propri attributi

Protocollo - Fase Principale

Invio dei messaggi

  • tramite operazione di send
  • invio al RP (caching)
  • inoltro a cascata dei messaggi

Protocollo - Post Sequenza Principale

Nuovi arrivi

Cambio di valori

Malfunzionamenti

  • contatto col nodo/i di bootstrap
  • inizio immediato Advertising
  • perdita efficienza per un gran numero di ingressi
  • nuova impostazione degli attributi
  • aggiornamento al padre
  • se necessario catena di aggiornamenti
  • messaggi di keep-alive per verificare l'integrità
  • Due scenari possibili

Protocollo - API

/**
 * Comunica il valore di verità di un attributo (positivo) al padre del 
 * nodo all’interno dell’albero multicast.
 *
 * @param  attributo           l'attributo da modificare
 * @param  valore_booleano     valore - True, False per effettuare un unsubscribe
 * @return                     True se l'operazione ha avuto successo, False altrimenti
 */
Bool set(Attribute attributo, Bool valore_booleano){...};

/**
 * Comunica il valore di verità di un attributo (negativo) al padre del 
 * nodo all’interno dell’albero multicast.
 *
 * @param  attributo           l'attributo da modificare
 * @param  valore_booleano     valore - True, False per effettuare un unsubscribe
 * @return                     True se l'operazione ha avuto successo, False altrimenti
 */
Bool unset(Attribute attributo, Bool valore_booleano){...};

/**
 * Serve per effettuare lo scambio di messaggi.
 *
 * @param  messaggio           messaggio da inviare
 * @param  formula_logica      predicato logico per l'invio
 * @return                     True se l'operazione ha avuto successo, False altrimenti
 */
Bool send(String messaggio, CNF formula_logica){...};

/**
 * Utilizzato dall’agente per recuperare i messaggi ricevuti. I messaggi ricevuti potranno 
 * essere letti in maniera asincrona e verranno tutti memorizzati in una coda.
 *
 * @return                     Restituisce una lista di Stringhe, al primo posto il messaggio e al secondo 
 *                             la stringa che identifica la federazione da cui il messaggio proviene.
 */
String[] receive(){...};

Conclusione

In sistemi composti da un gran numero di agenti la topologia dell rete è vitale

È altrettanto importante un instradamento dei messaggi efficiente che non provochi overhead

Il risultato è un protocollo efficiente che permette  l'interazione dinamica in reti con churn modesto; corredato da un tipo di comunicazione molto versatile

Miglioramenti

Caching

Load-Balancing

Sicurezza

sfruttando le proprietà di Pastry pensiamo a una possibile replicazione delle strutture dati nei nodi adiacenti ai RP e nodi di bootstrap

il meccanismo di caching può essere sfruttato per alleggerire il carico di lavoro dei RP, dato che molti messaggi passano per i nodi del leaf set

il protocollo presume che gli agenti collaborino tra di loro; si può pensare di introdurre un meccanismo di reputazione

Simulazione

un analisi completa del protocollo necessiterebbe strumenti ad hoc

Grazie dell'attenzione

Made with Slides.com