Candidato: Daniele Spaccapeli
Relatore: Michele Loreti
Tipologie di routing più comuni:
i messaggi sono indirizzati in maniera specifica ai destinatari
gruppo di destinatari è individuato dinamicamente in base alla valutazione di un predicato logico
Modello Client-Server
Modello Peer-to-Peer
P2P di seconda generazione
Esempi: BitTorrent, YaCy, CDN, Chord, Kademlia ...
Funzionalità generiche che facilitano lo sviluppo software
Framework P2P studiati:
Documentazione | Reperibilità | Semplicità | |
---|---|---|---|
JXTA | ✓ | ||
XNap | ✓ | ✓ | |
Pastry | ✓ | ✓ | ✓ |
Vediamo Pastry in dettaglio ...
sviluppato dalla Rice University e Microsoft Research
Caratteristiche:
Numero di salti per ricezione:
basato su Pastry, costruito espandendo le primitive per supportare la comunicazione su predicati
Albero Multicast
Formato dei predicati
Forma normale congiuntiva, massima espressività, parsing semplice
Federazioni
Hashing
Partizioni delle formule possibili. Le formule in due partizioni diverse sono indipendenti tra loro
Ogni attributo e formula appartenente a una stessa federazione indurrà codifica univoca
Bootstrapping
operazioni di handshake:
Advertising
dopo n 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
Invio dei messaggi
Nuovi arrivi
Cambio di valori
Malfunzionamenti
/**
* 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(){...};
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
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
sfruttando le proprietà di Pastry pensiamo a una possibile replicazione delle strutture dati nei nodi adiacenti ai RP e nodi di bootstrap
un analisi completa del protocollo necessiterebbe strumenti ad hoc