Progettazione di un protocollo P2P per la comunicazione basata su predicati

Candidato: Daniele Spaccapeli

Relatore: Michele Loreti

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

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

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

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

Numero di salti per ricezione:

Pastry - Esempio

Framework - Confronto

Documentazione Reperibilità Semplicità
JXTA
XNap
Pastry

Routing dei messaggi

Tipologie più comuni:

  • Unicast
  • Broadcast

e Multicast ...

Multicast

  • comunicazione indirizzata a un gruppo di nodi
  • a livello di applicazione o assistita dalla rete
  • usa dei blocchi di indirizzi riservati in IPv4 e IPv6

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 

Protocollo P2P per la comunicazione basata su predicati

Protocollo - Definizioni

Protocollo - Fase Iniziale

Protocollo - Fase Principale

Protocollo - Post Sequenza Principale

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

Miglioramenti

Simulazione

Grazie dell'attenzione

Made with Slides.com