Middleware di Discovery Avanzato

Transcript

Middleware di Discovery Avanzato
Middleware di Discovery Avanzato
(Tomaiuoli Giuseppe [email protected])
Un Middleware di Discovery che consenta di trovare il servizio che
realmente stai cercando in base alle caratteristiche esplicite ed implicite di
cui hai bisogno, sempre ed ovunque.
Abstract
L’idea di base è di consentire ad Utenti e Fornitori di poter, rispettivamente
trovare e rendere disponibili determinati servizi per il Discovery in base non
solo al nome, ma sfruttando tutta una serie di informazioni ritenute
necessarie o semplicemente in grado di agevolare la fruizione dei Servizi
stessi. Si è iniziato dallo studio delle soluzioni attualmente disponibili, dei
protocolli presenti, delle tecnologie a disposizione, si è scelto quale di esse
fosse più consona alle specifiche richieste, JXTA. Si è progettato e in parte
sviluppato un Middleware per il Discovery Avanzato, personalizzato, di tali
Servizi tenendo conto appunto di caratteristiche di preferenza dell’Utente, di
architettura hardware a disposizione, di caratteristiche del software in uso e
delle credenziali, tutto in corrispondenza di ciò che ogni Fornitore ritiene
rilevante per usufruire del proprio Servizio.
Introduzione
Obiettivo del progetto è la realizzazione di un
Middleware per il Discovery Avanzato di
servizi messi a disposizione dai Fornitori. Il
Discovery è Avanzato in quanto tiene in
considerazione
informazioni
aggiuntive
rispetto ai normali servizi di Discovery, come
le preferenze dell’Utente, le caratteristiche dei
dispositivi, le credenziali, la località e quanto
altro. Il Progetto si colloca nell’ambito
dell’ambiente Peer-to-Peer(P2P) che presenta
numerose soluzioni e diversi protocolli per
l’implementazione del Discovery. Tra queste
soluzioni si sono rivelate di particolare
interesse JXTA e UPnP. Nei prossimi
paragrafi si descrive il percorso di sviluppo
del progetto e le sue componenti.
Analisi e Studio di Fattibilità
Il team è composto da due soggetti: Giuseppe
Tomaiuoli
e
Simone
Masini
([email protected]). La prima
fase del Progetto consiste nell’analisi dei due
diversi protocolli e nello studio di fattibilità di
un Middleware che possa rappresentare
l’unione di essi. Ci si è presto resi conto che
la via fosse alquanto ardua da seguire in
quanto i protocolli presentano varie diversità
e alcune incompatibilità che potevano essere
superate solo impiegando risorse sia in
termini di tempo sia in termini di entità del
lavoro. Inoltre la soluzione avrebbe presentato
un overhead molto alto anche a runtime, in
quanto avrebbe richiesto diversi componenti
con funzionalità di adattatore sui vari lati del
Middleware. In accordo con il relatore
committente, l’Ing. A. Toninelli, si è giunti
alla conclusione che JXTA ha le
caratteristiche necessarie per il progetto. La
maggiore differenza, che ha influito in modo
prevalente sulla scelta è che mentre UPnP è
un protocollo proprietario di un consorzio di
aziende che per ogni scelta deve essere
interpellato, quindi meno flessibile, JXTA è
un protocollo open source che consente di
manipolare anche i sorgenti e quindi molto
più flessibile anche nella definizione dei
profili.
JXTA
JXTA è una piattaforma per l’esecuzione e la
programmazione in rete, progettata per
risolvere
alcuni
dei
problemi
dell’elaborazione
distribuita
moderna,
soprattutto nell’ambito P2P. JXTA ha tre
obiettivi principali da perseguire:
• Interoperabilità: la maggior parte dei
sistemi p2p sono costruiti per fornire
un singolo tipo di servizio (es. Napster
per la condivisine dei file musicali,
Gnutella per il filesharing generico,
Jabber
per
la
messaggistica
istantanea). In questo modo il singolo
Peer che vuole usufruire dei diversi
servizi dovrà implementarli tutti.
JXTA punta ad una compatibilità
totale, a portare nel mondo P2P ciò
che http e i browser hanno significato
per Internet.
• Indipendenza dalla Piattaforma:
molti sistemi P2P oggi offrono le loro
funzionalità o i loro servizi attraverso
un insieme di API che sono sviluppate
su un particolare sistema operativo
utilizzando uno specifico protocollo,
JXTA è progettato per essere
condiviso da tutti gli sviluppatori,
indipendentemente dal linguaggio di
programmazione
preferito,
dall’ambiente di sviluppo e dalla
piattaforma.
• Ubiquità: JXTA è progettato per
essere implementabile su qualsiasi
dispositivo elettronico: sensori, PDA,
laptop, PC, router, server ecc.
L’architettura di JXTA può essere suddivisa
in tre livelli(fig. 1):
• Core: si occupa della gestione dei
peer, della comunicazione e di altre
funzionalità di base.
• Service: si occupa di concetti di più
alto livello quali l’indicizzazione, la
ricerca e il file sharing.
• Applications: si occupa di sistemi tipo
email, memorizzazione, aste, ecc.
Figura 1 JXTA Architettura
Al più alto livello di astrazione JXTA è un
insieme di protocolli. Ogni protocollo è
definito da uno o più messaggi scambiati fra i
partecipanti al protocollo, ogni messaggio ha
un formato predefinito e può includere vari
campi di dati. I protocolli del progetto JXTA
creano uno strato di rete virtuale sopra
l’infrastruttura della rete fisica esistente,
nascondendo la topologia della rete
sottostante. JXTA consente agli sviluppatori
di applicazioni, e non solo agli amministratori
di reti, di progettare topologie di reti che
meglio soddisfino le esigenze delle loro
applicazioni(fig.2). Reti virtuali ad-hoc
multiple
possono
essere
create
e
dinamicamente mappate in una rete fisica
liberando un più ricco mondo di reti virtuali
multi dimensionali. JXTA guarda avanti dove
miliardi di servizi di rete, tutti indirizzabili
sulla rete saranno in grado di scoprire e
interagire con altri in una gestione
decentralizzata attraverso la formazione di
una moltitudine di reti virtuali. La rete
virtuale JXTA standardizza il modo in cui i
peer scoprono gli altri, si organizzano da soli
in peergroup, scoprono risorse di rete,
comunicano, e monitorizzano gli altri e i
servizi.
Figura 2 Reti Virtuali JXTA
Definizione e descrizione dei Protocolli e dei
Concetti di JXTA (Vedi Appendice A).
Architettura del MDA
Il Middleware di Discovery Avanzato (MDA)
si appoggia sopra i livelli di JXTA e ne
cattura le modalità di funzionamento e anche
l’interfaccia di accesso da parte dell’utente
per rendere il più possibile trasparente
l’utilizzo del Middleware al fine di non
traumatizzare l’utente con molteplici metodi
di accesso.
L’architettura del MDA si sviluppa attraverso
vari componenti del sistema. Si riporta una
descrizione logica che non pone nessun
vincolo sull’effettiva localizzazione dei vari
componenti. L’architettura si estende e
realizza attraverso la costituzione di tre
Gruppi
JXTA:
GroupMDAUtenti,
GroupMDAInfrastruttura,
GroupMDAFornitori. Il GroupMDAUtenti è
il gruppo in cui sono presenti i
PeerMDAUtente, cioè i peer che si occupano
della creazione e della registrazione dei profili
degli utenti, di prendere le richieste degli
utenti, completarle con le informazioni del
profilo, se presente, e inviarle al
PeerMDAInfrastruttura.
Il
GroupMDAInfrastruttura è appunto il gruppo
in cui sono presenti i PeerMDAInfrastruttura
che sono le entità che si occupano di
raccogliere le richieste dei PeerMDAUtente
ed elaborare la ricerca vera e propria
attraverso l’istanza MotoreDiRicerca. Il
GroupMDAFornitori è il gruppo in cui ci
sono i PeerMDAFornitore che si occupano
della creazione dei profili dei fornitori, della
registrazione, di prendere le richieste di
pubblicazione dei nuovi servizi e di
completarle con le informazioni del profilo, se
presente,
e
poi
rigirarle
nel
GroupMDAInfrastruttura. Sul lato Utente
sarà necessario avere l’implementazione del
MDAUtente che è la classe che consente
all’Utente di interfacciarsi al MDA con le
stesse modalità di utilizzo di JXTA standard.
Allo stesso modo sul lato Fornitore è
necessario implementare il MDAFornitore
che è l’interfaccia di accesso al MDA per i
Fornitori.
Figura 3 Architettura Logica del Middleware di Discovery Avanzato.
Supporto Legacy JXTA e altri
protocolli (UPnP)
Descrizione delle scelte progettuali inerenti il
protocollo su cui appoggiarsi, il linguaggio di
programmazione, le modalità di integrazione
con il preesistente e la compatibilità con altri
protocolli.
Si è deciso di accettare anche richieste non
complete per il discovery, queste verranno
svolte con la normale modalità di JXTA e
parimenti
sarà
compito
di
alcuni
PeerMDAFornitore quello di cercare dei
Servizi JXTA normali e pubblicarne gli
Advertisement nel GroupMDAInfrastruttura.
In questo modo saranno anche essi inglobati
nella ricerca e se nella loro descrizione ci
saranno delle caratteristiche che la
soddisfano, potranno essere ritornati come
risultati.
Questo al fine di ottenere una compatibilità
con i sistemi di JXTA preesistenti, soprattutto
per quanto riguarda i Servizi già in possesso
di un profilo, e da cui magari può essere
difficile ottenerne uno nuovo. Anche per gli
Utenti che magari essendo di passaggio in una
rete non hanno nessuna voglia di perdere del
tempo compilando un profilo per registrarsi
ed autenticarsi al MDA, almeno finché questo
non avrà uno sviluppo tale da necessitare di
pagamento o altre capability di accesso. Il
medesimo discorso può essere fatto per
rendere il MDA compatibile con altri
protocolli, per esempio UPnP, utilizzando dei
Bridge che consentano di trasferire le
informazioni contenute nella descrizione dei
Servizi in un Advertisement modello JXTA
da pubblicare nel GroupMDAInfrastruttura.
Accesso al MDA
Attraverso una Interfaccia che fa da Bridge
tra l’Utente e il Middleware in modo
trasparente all’Utente che continua ad
utilizzare le modalità di accesso al Discovery
di JXTA, con l’aggiunta di altre funzionalità
per il Discovery Avanzato.
Nella versione attuale l’Utente per accedere al
MDA non ha bisogno di particolari
installazioni o altro, semplicemente deve
istanziare un MDAUtente e trattarlo come un
normale riferimento al tradizionale discovery
di JXTA, con in più la possibilità di effettuare
altre operazioni quali la registrazione di un
profilo, la modifica del profilo , la
sottoscrizione ad una CATEGORIA(vedi
paragrafo Publish/Subscribe).
Allo stesso modo un Fornitore di Servizi non
deve fare altro che istanziare un
MDAFornitore e pubblicare le caratteristiche
del Servizio specifico. Se il Fornitore è un
utente registrato, e quindi ha un profilo
associato, oltre alle caratteristiche del
Servizio specifico saranno aggiunte quelle
generiche del Fornitore. Tali caratteristiche
sono comuni a tutti i Servizi da lui forniti, in
questo modo si eviterà di ripetere più volte un
certo numero di informazioni che possono
riguardare per esempio l’hardware e quindi
essere uguali per tutti i servizi.
Questo aspetto è totalmente speculare al
comportamento dell’Utente anche per rendere
più forte l’idea di P2P in un’uniformità di
comportamenti.
Bilanciamento del Carico del
Middleware (coordinamento e
sincronizzazione)
La struttura del Middleware è completamente
distribuita e il carico di lavoro viene
suddiviso fra i vari peer (componenti),
andando a preferire sempre quello
attualmente meno carico.
Data la totale distribuzione dell’intera
struttura del MDA, in tutte le sue componenti,
si è resa necessaria una soluzione che
consenta di coordinare e sincronizzare i peer
dello stesso tipo al fine di ottenerne una
gestione efficiente ed accurata. Per fare ciò si
è scelto come concetto di base di suddividere
al massimo il lavoro fra i peer, assegnando il
nuovo compito sempre al peer più scarico.
Questa scelta viene effettuata in tre momenti
distinti da tre distinti componenti. Il
PeerInfoService di JXTA consente di
abbinare un Monitor ad un servizio al fine di
misurarne il carico ed altre informazioni. Il
tutto viene svolto da JXTA attraverso lo
scambio di Advertisement. Il Peer che riceve
una richiesta di informazioni, misura il
proprio carico sommando il traffico di tutti i
canali correntemente attivi e pubblica tale
informazione in un Advertisement di risposta.
Il MDAUtente, quando riceve una Richiesta
dall’Utente, deve decidere a quale
PeerMDAUtente girarla. Ottiene dal Monitor
dei PeerMDAUtente le informazioni sul
carico dei peer presenti e quindi sceglie quello
meno carico, e apre una pipe con esso per
effettuare le richieste.
Allo stesso modo si comporta il
MDAFornitore quando riceve una richiesta da
parte di un Fornitore e deve scegliere a quale
PeerMDAFornitore girarla.
Infine la stessa politica è stata scelta per la
suddivisione del carico della ricerca vera e
propria per i PeerMDAInfrastruttura ai quali i
PeerMDAUtente si legano attraverso una pipe
per passare una Richiesta Personalizzata
dell’Utente(vedi sez. Personalizzazione della
Richiesta).
Gestione Profili (Fault Tolerance:
Persistenza, Replicazione)
Utilizzo di Direttori (Xindice), coordinazione
e sincronizzazione per la persistenza e la
replicazione dei direttori distribuiti. (Copia
Attiva e Copia Non Attiva, aggiornamento
ecc…). Sia per i profili degli Utenti sia per i
profili dei Fornitori.
Tutti gli Utenti e tutti i Fornitori hanno la
possibilità di creare un profilo che viene
abbinato a tutte le operazioni. I profili devono
essere memorizzati dal MDA e gestiti in
modo univoco. Ogni PeerMDAUtente
gestisce un certo numero di profili e li
memorizza in un suo direttorio. Poiché il
MDAUtente sceglie in base al carico a quale
PeerMDAUtente effettuare le richieste,
bisogna poi coordinarsi perché questo abbia
anche il profilo dell’Utente in questione. Se è
proprio un profilo presente nel suo direttorio,
non ci sono ulteriori operazione da effettuare,
se invece il profilo non è fra quelli gestiti dal
PeerMDAUtente, allora dovrà pubblicare una
richiesta di un profilo specifico, il
PeerMDAUtente che detiene tale profilo lo
passa al richiedente. Lo stesso procedimento
avviene lato Fornitore fra il MDAFornitore e i
vari PeerMDAFornitore. Al fine di ottenere
una Fault Tolerance adeguata, ipotizzando
sempre una condizione di guasto singolo, si è
deciso di avere due copie di ogni profilo. La
prima è la Copia Attiva ed è quella che dà
diritto al peer di “eleggersi” a gestore del
profilo. La seconda è la Copia Non Attiva che
viene utilizzata solo per il recovery. In pratica
quando un PeerMDAUtente non ha il profilo
nei suoi direttori, effettua la richiesta e il
gestore di tale profilo, dopo averlo inoltrato al
richiedente, passa il profilo dalla parte Attiva
del suo direttorio alla parte Non Attiva. In più
nello stesso momento comunica al Peer
possessore della Copia Non Attiva precedente
di eliminare tale copia. Nel caso in cui il Peer
richiedente non ottiene risposta, allora
effettua un’altra richiesta per la copia Non
Attiva del profilo. Quando ottiene la risposta
lui diventa il gestore di tale profilo, in questo
caso non è necessario cancellare nessuna
copia. L’implementazione dei direttori è stata
fatta utilizzando il servizio Xindice di Apache
poiché è lo stesso utilizzato da JXTA per la
memorizzazione e la gestione degli
adverstisement all’interno del suo sistema. La
classe XindiceManager mette a disposizione
tutti i metodi necessari per la gestione dei
direttori.
Personalizzazione della Richiesta
(località, dispositivo corrente,
caratteristiche HW e SW)
Estensione delle caratteristiche della
richiesta da JXTA (solo nome Servizio) a
Discovery Avanzato che tiene conto di
informazioni Statiche e Dinamiche (località,
dispositivo) riguardanti le preferenze
dell’utente e altre caratteristiche HW e SW
inglobate nella richiesta sia in modo esplicito
che implicito. Per maggiori informazioni
consultare articolo di S. Masini.
Implementazione della Metodologia
di Ricerca (matching)
Estensione del confronto a tutte le
caratteristiche definite nella richiesta e nel
profilo del Servizio. Tra queste ultime ci
saranno alcune ritenute necessarie e altre
meno rilevanti. (Profilo e Servizio). Per
maggiori informazioni consultare articolo di
S. Masini.
Access Control List o Capability
List (Al Servizio del Fornitore)
Tra le caratteristiche necessarie per accedere
ad un Servizio ci saranno anche quelle
inerenti i diritti di accesso e quindi le
credenziali che un Utente deve avere per
accedervi. Tali caratteristiche saranno prese
in considerazione per il matching.
Quando
un
Fornitore
specifica
le
caratteristiche di un Servizio, definisce anche
i parametri di accesso a tale servizio. Questo
potrebbe essere FREE se è a libero accesso,
oppure KEY, se l’utente deve essere in
possesso di una particolare KEY che gli
consenta di accedere sempre al Servizio. Per
completezza si potrebbe aggiungere una
ulteriore modalità, PAY-PER-SERVICE, che
consentirebbe all’Utente di accedere al
Servizio in questione, solo dopo averne
acquisiti i diritti in qualche modo. Tra le
informazioni della parte dinamica del profilo
dell’Utente ci sono quelle che rappresentano
appunto le credenziali dell’Utente. In questo
modo già nella ricerca dei Servizi vengono
confrontati i valori delle credenziali, evitando
per esempio di restituire ad un Utente senza
credenziali, quindi FREE, un Servizio KEY di
cui poi non potrebbe usufruire. Si è scelto di
mettere tali informazioni nella parte dinamica
in quanto potrebbe essere utile per un utente
modificare tali valori, acquisendo le
credenziali necessarie. Oppure in futuro
potrebbe essere un’informazione riguardante
un credito residuo per esempio su un Servizio
PAY-PER-SERVICE,
con
informazioni
reperite tramite carte prepagate o altro.
Publish/Subscribe
Descrizione ed Implementazione del servizio
Publish/Subscribe che consente ad un Utente
di iscriversi e quindi essere aggiornato sulle
novità inerenti una particolare Categoria di
interesse.
L’insieme dei Servizi è stato suddiviso in
CATEGORIE che consentono di ridurre il
lavoro della ricerca vera e propria del MDA.
A questo punto si è ritenuto interessante e
utile consentire all’Utente di potersi
sottoscrivere al fine di ricevere informazioni
riguardo delle novità in una sua
CATEGORIA di interesse. Per esempio nella
CATEGORIA dello STREAMING VIDEO,
potrebbe essere pubblicato un nuovo Servizio.
Il Servizio di Publish/Subscribe è stato
implementato nel seguente modo: l’Utente
effettua al MDAUtente una richiesta di
sottoscrizione ad una specifica CATEGORIA
di interesse. Il MDAUtente si metterà allora in
ascolto, nel GroupMDAUtenti di eventuali
NEWSADV che riguardino la CATEGORIA
specificata dall’Utente. Sarà poi compito
dell’Utente decidere se effettuare ulteriori
operazioni al fine di apprendere le novità,
come farsi dare per esempio l’elenco dei
Servizi di una CATEGORIA, oppure
trascurare tale notizia qualora non sia più di
suo interesse, in tal caso può cancellare la
sottoscrizione comunicandolo al MDAUtente.
È compito del PeerMDAFornitore pubblicare
un
NEWSADV
nel
GroupMDAUtenti
riguardante una specifica CATEGORIA nel
momento in cui gli arriva una richiesta di
pubblicazione di un nuovo Servizio. Allo
stesso modo pubblica un NEWSADV nel
GroupMDAUtenti se riceve una richiesta di
cancellazione di un Servizio o se ne constata
l’assenza (vedi sez. Liveness dei Servizi).
Gestione Carico e Liveness dei
Servizi
Controllo del carico del singolo Servizio per
evitare di sovraccaricare un servizio se c’è
un’alternativa e dell’effettiva presenza del
Fornitore per evitare di presentare soluzioni
non più disponibili. Modalità Push/Pull. Per
maggiori informazioni consultare articolo di
S. Masini.
Caching dei Servizi sul Lato Utente
Per evitare di far ricorso sempre alla
modalità remota del Discovery, si costituisce
una piccola cache lato Utente che tenga
traccia degli ultimi “n” risultati e che
controlli i parametri della richiesta prima su
quelli presenti in cache, per restituire in
modo veloce e leggero un risultato quando
possibile. Necessità di un protocollo di
gestione della consistenza della cache.
Raccolta di Informazioni per Stilare
Statistiche
Al fine di migliorare l’efficienza e la
funzionalità del Middleware e del Discovery
stesso, si possono prelevare in vari punti del
sistema delle informazioni riguardanti le
ricerche effettuate, le risposte ottenute, le
scelte dell’utente e qualsiasi altro tipo di
informazione sia ritenuto necessario per
stilare delle statistiche.
Configurazione e Test
Il sistema è stato interamente sviluppato in
rete
per
affrontare
direttamente
le
problematiche che si sarebbero potute
presentare
in
fase
di
installazione.
L’astrazione di rete virtuale di JXTA consente
di non curarsi particolarmente dell’effettiva
localizzazione dei Peer. Per configurare la
rete e per consentire il funzionamento minimo
del
sistema
sono
necessari
due
PeerMDAUtente, due PeerMDAInfrastruttura
e due PeerMDAFornitore, in modo da avere
un minimo di replicazione e load balancing, il
MDA funziona anche con un solo elemento
per ogni tipo, ma con la perdita delle
caratteristiche di Fault Tolerance. Ulteriori
test si sono svolti in LAB2 grazie alla
disponibilità di alcuni colleghi che hanno
acconsentito all’utilizzo dei loro account per
accedere su più macchine. Il sistema non ha
mostrato particolari problemi di tempistica e
ritardi
di
risposta,
almeno
non
significativamente incrementati rispetto al
normale utilizzo di JXTA che è per sua natura
non deterministico quanto a risultati e tempi
di accesso.
Conclusioni e Sviluppi Futuri
In questo lavoro ci si era proposti di studiare
ed implementare un Middleware che
consentisse di effettuare un Discovery
Avanzato, cioè personalizzato in base alle
caratteristiche
implicite
ed
esplicite
dell’Utente e dei dispositivi software e
hardware che ha a disposizione. Per fare ciò ci
si è basati principalmente sui profili, in questo
modo tutte le informazioni di preferenza
dell’utente e anche quelle relative alla sua
localizzazione e ad altre caratteristiche di
scelta personale possono essere inglobate
nelle sue richieste, evitando di presentare
all’Utente dei Servizi che potessero
corrispondere solo in parte all’effettiva
necessità. Dall’altro lato, attraverso i profili,
anche dei Fornitori, si consente a questi ultimi
di definire delle caratteristiche e delle
credenziali necessarie per accedere ai loro
Servizi, in modo tale da scartare a priori
quelle che sarebbero delle proposte non
effettivamente perseguibili. Per fare ciò si
sono sfruttate le capacità e le caratteristiche di
JXTA in quanto essendo un progetto opensource ed avendo una struttura slegata sia
dall’architettura sottostante che dal linguaggio
di
programmazione,
consentiva
una
manipolazione adeguata e rispettava in gran
parte le caratteristiche che ci si era posti di
raggiungere in questo lavoro. Si è voluto
avere un occhio di riguardo rispetto allo stato
dell’arte esistente per quanto riguarda i
Servizi già esistenti che implementano il
protocollo JXTA, acconsentendo di inglobarli
nelle possibili scelte, e visto che non è un
protocollo standard, si è lasciata aperta la
porta per eventuali acquisizioni anche di
Servizi di altri protocolli. Nello sviluppo del
progetto si è anche cercato di tenere in una
certa considerazione la QoS del Middleware,
monitorando e gestendo il carico di lavoro dei
vari attori e scegliendo di assegnare un nuovo
compito sempre a quello attualmente meno
carico. Si è messo a disposizione degli Utenti
anche un servizio Publish/Subscribe che
consenta loro di ottenere notifica delle novità
che riguardano aree di suo interesse. Si è
cercato anche di fornire all’Utente
informazioni sul carico dei Servizi stessi,
gestendo il Load Balancing dei Servizi stessi.
Poiché la Sicurezza è una caratteristica
fondamentale e di importanza rilevante per un
progetto di tali dimensioni, avrebbe
necessitato di una attenzione particolare. Per
motivi di tempo non è stato possibile andare
oltre l’aspetto del controllo dell’accesso,
attraverso l’autenticazione dell’Utente, però
può essere sicuramente migliorata e
sviluppata sfruttando le comunicazioni cifrate
e altro, anche le pipe sicure di JXTA stesso.
Allo stesso modo si sono lasciati agli sviluppi
futuri la possibilità di costituire una cache sul
lato Utente per consentire a quest’ultimo di
usufruire dei risultati delle sue ultime
richieste evitando di effettuare sempre delle
richieste in remoto. Per migliorare
ulteriormente l’efficienza e il lavoro del
Middleware si è pensato che potrebbero
essere raccolte delle informazioni utili a
stilare delle statistiche sull’utilizzo del
Middleware, sul tipo di richieste, sui risultati
corrispondenti e sulle scelte effettuate
dall’Utente sui Servizi effettivi, anche questo
aspetto è stato lasciato a sviluppi futuri.
Appendice
A
Definizione
e
descrizione dei Protocolli e dei
Concetti di JXTA
Dall’articolo Project JXTA 2.0 Super-Peer
Virtual Network.
I protocolli JXTA sono 6 divisi in 2 categorie:
ƒ Core Specification Protocols
ƒ Standard Service Protocols
Core Specification protocols
I protocolli di JXTA sono stati progettati per
essere implementabili su sistemi molto piccoli
con pochi componenti e comportamenti
richiesti. La funzionalità richiesta da tutte le
implementazioni è definita dai protocolli Core
Specification di JXTA. Le implementazioni
che desiderano essere JXTA compatibili
devono implementare tutti i protocolli del
Core
Specification
di
JXTA.
L’implementazione della Core Specification
di JXTA non garantisce e non fornisce il
necessario per l’interoperabilità con le altre
implementazioni di JXTA. Ci sono alcuni
comportamenti che devono essere forniti che
non fanno parte del Core Specification di
JXTA. Le implementazioni esistenti di questi
componenti sono descritti separatamente nelle
specifiche degli Standard Service di JXTA.
La Core Specification definisce due
protocolli:
ƒ Endpoint Routine Protocol ERP è il
protocollo tramite il quale un peer può
trovare la strada (una sequenza di hop)
usata per spedire un messaggio ad un
altro peer. Se un peer A vuole spedire
un messaggio al peer C, e non ci sono
percorsi diretti fra A e C, allora il peer
A ha bisogno di trovare il o i peer
intermedi per instradare il messaggio
al peer C. ERP è utilizzato per gestire
e determinare le informazioni sul
percorso. Se la topologia della rete ha
subito
cambiamenti
che
non
consentono più di arrivare a C, il peer
può usare ERP per trovare le vie
conosciute dagli altri peer per arrivare
a C costruendo così un nuovo
percorso.
ƒ Peer Revolver Protocol PRP è il
protocollo tramite il quale un peer può
mandare una query di resolver
generica ad uno o più peer, e poi
ricevere risposte a tale query. Il
protocollo PRP permette sia la
disseminazione di query generiche ad
uno o più gestori nel gruppo sia il loro
incontro con le risposte. Ogni query è
indirizzata al nome di uno specifico
gestore. Il nome di questo gestore
definisce la particolare semantica della
query e le sue risposte, ma non è
associata ad uno specifico peer. Una
data query può essere ricevuta da
qualsiasi numero di peer nel gruppo,
eventualmente tutti, e processata in
accordo con il nome del gestore se il
nome del gestore è definito su quel
peer.
Standard Service Protocols
La Core Specification di JXTA definisce i
componenti e i comportamenti richiesti per
tutte le implementazioni di JXTA. Al fine di
creare un’implementazione completa di JXTA
ci sono alcuni componenti in più che tutte le
implementazioni dovrebbero fornire. I
protocolli Standard Service di JXTA sono
protocolli e comportamenti di JXTA
opzionali. Non è necessario che le diverse
implementazioni forniscano questi servizi, ma
si raccomanda fortemente di farlo.
Implementare questi servizi fornirà una
maggiore interoperabilità con le altre
implementazioni e una più vasta funzionalità.
La specifica dei protocolli Standard Service
definisce 4 protocolli:
ƒ Rendezvous Protocol RVP è il
protocollo tramite il quale i peer posso
iscriversi o essere sottoscrittori di un
servizio di propagazione. Insieme ai
peergroup. I peer possono essere peer
di rendezvous, oppure peer che sono
in ascolto verso peer di rendezvous.
RVP consente che i messaggi vengano
spediti a tutti gli ascoltatori del
servizio. RVP è utilizzato dal PRP per
propagare i messaggi.
ƒ Peer Discovery Protocol PDP è il
protocollo tramite il quale un peer
pubblica i suoi advertisement e trova
gli advertisement degli altri peer (peer,
ƒ
ƒ
peergroup, module, pipe and content).
PDP usa PRP per spedire e propagare
le richieste di discovery degli
advertisement.
Peer Information Protocol PIP è il
protocollo tramite il quale un peer può
ottenere informazioni di stato sugli
altri peer, come state, ultime, traffic
load, capabilities ecc.. PIP usa PRP
per spedire e propagare le richieste di
informazioni dei peer.
Pipe Binding Protocol PBP è il
protocollo tramite il quale un peer può
stabilire un canale di comunicazione
virtuale o pipe con uno o più peer.
PBP è utilizzato da un peer per
collegare i due o più lati di una
connessione (input e output pipe) ad
un endpoint fisico. PBP usa PRP per
spedire e propagare le richieste di
collegamento delle pipe.
I protocolli di JXTA sono stati progettati per
essere facilmente implementati su trasporti
asimmetrici e collegamenti unidirezionali. In
particolare molte forme di reti wireless e
mobili non forniscono le stesse possibilità per
i dispositivi per spedire e ricevere. JXTA
permette
che
qualsiasi
collegamento
unidirezionale posso essere usato quando
necessario, migliorando soprattutto la
connettività di rete nel sistema. L’intenzione
per i protocolli JXTA è di essere poco
pervasivi per quanto possibile e facili da
implementare su qualsiasi trasporto. Le
implementazioni su trasporti affidabili e
bidirezionali come TCP/IP o HTTP dovrebbe
portare ad una comunicazione bidirezionale
efficiente.
Un peer ha bisogno di implementare solo i
protocolli che richiede. Per esempio un
dispositivo potrebbe avere tutti i sui
advertisement prememorizzati, quindi non
richiede di implementare il PDP. Un peer
potrebbe usare un insieme di relay
preconfigurati per instradare tutti i suoi
messaggi,
perciò
non
richiede
di
implementare il protocollo Peer Endpoint, ma
solo di mandare i messaggi ai relay per
forwarding. Un peer potrebbe non aver
bisogno di ottenere o desidererebbe fornire,
informazioni di stato agli altri peer e quindi
non ha bisogno di implementare PIP.
Il progetto dei protocolli di JXTA cerca di
creare un insieme di protocolli che abbia un
overhead molto basso, fa poche assunzioni
riguardo al trasporto sottostante e impone
poche richieste sull’ambiente dei peer, e
possono essere utilizzati per sviluppare
un’ampia varietà di applicazioni e servizi P2P
in un ambiente fortemente non affidabile e
modificabile.
I
componenti
seguenti
forniscono
l’infrastruttura necessaria per gestire gli
advertisement:
1. ID
Con i protocolli JXTA ci sono diverse
entità che hanno bisogno di essere
univocamente identificate. Questi sono
i peer, i peergroup, le pipe ecc.. un ID
JXTA identifica univocamente ognuna
di queste entità e server con il
significato di un canonico riferimento
a tale entità. Questo componente
implementa gli ID JXTA come un
UUID a 128bit. UUID sono
autogenerati localmente utilizzando un
seme per generatore random. Un ID
JXTA è uno standard URN nel
namespace degli ID di JXTA. Glu
URN degli ID di JXTA sono
identificati dall’identificativo jxta nel
namespace
dell’URN.
Es
urn:jxta:id12345.
2. Cache Manager CM
Il cache manager è utilizzato per
cachare, indicizzare e memorizzare
persistentemente gli advertisement.
Questo componente consente la
memorizzazione
efficiente,
l’indicizzazione e il recupero degli
advertisement.
L’implementazione
JXTA 2.0 usa una versione ridotta del
database XML Xindice opensource
dell’Apache per memorizzare e
recuperare gli advertisement JXTA.
L’Xpath
che
indicizza
parte
dell’Xindice non è utilizzato. Il cache
manager consente di specificare su
quale campo un advertisement deve
essere
indicizzato.
Gli
oggetti
Advertisement
di
Java
sono
serializzati e deserializzati come
documenti XML. Il cache manager
fornisce la memorizzazione persistente
degli advertisement attraverso i
riavvii. Il cache manager implementa
un meccanismo di indicizzazione
efficiente
per
recuperare
gli
advertisement e ottimizzare il tempo di
recupero per gli advertisement di base
più comuni (peer, peergroup, module,
pipe, route, ecc.). il cache manager
controlla il decadimento degli
advertisement nella cache. Ogni
advertisement viene pubblicato in
cache con un time-to-live associato.
Gli advertisement vengono cancellati
dalla cache quando sono scaduti.
3. XML Parser
Il parser XMl consente di scandire i
documenti XML. Il parser consente la
serializzazione e la deserializzazione
degli oggetti Java in stream di caratteri
XML di input e di output. Un parser
XML leggero è stato implementato
che implementa le funzionalità di base
di un DOM XML minimizzando le
impronte “footprints”. I protocolli
JXTA usano un minimo sottoinsieme
dell’XML (namespace limitato e senza
validazione). I piccoli dispositivi non
richiedono un parser completo poiché i
messaggi di protocollo potrebbero
essere pregenerati.
4. Advertisements
Il modulo advertisement implementa
gli advertisement di base utilizzati nei
protocolli JXTA: peer, peergroup,
endpoint, rendezvous, transoprt, pipe,
module and route advertisements. Il
modulo advertisement consente ad un
oggetto Java di essere serializzato e
deserializzato in un documento XML
che rappresenta un advertisement.
I componenti seguenti gestiscono il
trasporto fisico e mantengono un
mapping fra i messaggeri virtuali e le
connessioni fisiche.
5. HTTP Transport
il trasporto http implementa il
trasporto
http
collegato
come
specificato
nelle
specifiche
di
collegamento dei protocolli JXTA. Il
trasport http è implementato come
servlet usando il server Jetty
embedded. Jetty è un server http Java
e un contenitore di servlet, così non è
necessario eseguire un diverso server
web come Apache per usare le servlet.
Il trasporto http esegue nello stesso
processo della piattaforma JXTA. Il
trasporto http fornisce la capacità di
inizializzare una connessione fra due
peer. La connessione viene utilizzata
prima per determinare l’identità logica
dei peer partecipanti. Le richieste http
GET sono usate per determinare
l’identità logica sul lato server http e
per il polling dei messaggi. Le
richieste http POST sono usate per
spedire e ricevere messaggi JXTA. Il
trasporto
http
supporta
l’attraversamento
dei
firewall
attraverso i proxy.
6. TCP/IP Transport
Il trasporto TCP/IP implementa un
collegamento di trasporto TCP/IP
come specificato nelle specifiche dei
protocolli di collegamento di JXTA.
L’implementazione JXTA 2.0 prende
vantaggio
dalle
connessioni
bidirezionali, così una singola socket
di connessione può essere utilizzata
per spedire e ricevere dati. Le
connessioni idle vengono riciclate per
consentire la gestione di un ampio
numero di connessioni su relay e
rendezvous. Un numero limitato di
connessioni fisiche ( ora 3) possono
essere stabilite alla stessa destinazione
per trasferimenti di dati simultanei. Il
trasporto
TCP/IP
può
essere
configurato per accettare messaggi di
broadcast attraverso l’IP Multicast.
7. TLS Virtual Transport
Il trasporto virtuale TLS implementa
un trasporto affidabile e sicuro end-toend sopra il trasporto http e TCP/IP.
L’implementazione
del
trasporto
virtuale TLS frammenta i messaggi in
record TLS. Un protocollo a messaggi
affidabile è usato per garantire che i
messaggi che contengono questi
record arrivino al peer di destinazione
nello stesso ordine nel quale erano
stati trasmessi. Il trasporto TLS
realizza lo scambio di key, la
negoziazione di una key di sessione
per criptare i messaggi.
8. Message
Il servizio di messaggi implementa il
formato dei messaggi binari legati a
JXTA usati quando i messaggi sono
spediti nella rete virtuale JXTA. JXTA
usa un formato binario per consentire
trasferimenti efficienti dei payload sia
binari che XML. Tutti i messaggi dei
protocolli JXTA sono rappresentati
come payload XML. I messaggi sono
costituiti da una sequenza di elementi
ordinata. Ogni elemento ha un nome
univoco, lunghezza e MIME-type. È
importante
notare
che
la
rappresentazione del formato legata a
JXTA
è
agnostica
della
rappresentazione dei dati. Qualsiasi
tipo di dato può essere spedito. Ogni
servizio,
mentre
processa
un
messaggio può aggiungere o togliere i
suoi elementi. Gli elementi dei
messaggi permettono di isolare le
diverse parti di un messaggio
consentendo una maggiore protezione.
Per esempio, il servizio di Router ha il
permesso di manipolare solo gli
elementi di Router del messaggio, ma
non può toccare nessun altro elemento
del messaggio.
9. Virtual Messenger
Il servizio di messaggistica virtuale
astrae tutti i trasporti JXTA attraverso
una comune interfaccia per i servizi
degli endpoint. Il messaggero virtuale
normalizza il comportamento tra i
trasporti asincroni e sincroni, con un
comportamento ben definito riguardo
la sincronicità tra spedire e ricevere
messaggi.
10. Endpoint Service
Il servizio endpoint implementa
l’astrazione di endpoint di JXTA, che
è usato per incapsulare trasporti di
diversi messaggi in un singolo
endpoint virtuale. Gli endpoint
forniscono l’astrazione di rete virtuale
che viene usata dai peer per
comunicare indipendentemente dalla
topologia della rete sottostante
(firewall o NAT), e dal trasporto
fisico. Il servizio di endpoint fornisce
uno smistamento uniforme dei
messaggi in ingresso e la gestione
delle risorse associate. Il servizio di
endpoint delega la propagazione nella
rete e lo stabilire una connessione al
trasporto dei messaggi appropriato. Il
servizio di endpoint fornisce anche
una bufferizzazione dei messaggi in
uscita, la cache dei messaggi in uscita
e un comportamento di messaggistica
uniforme.
11. Router
Il router implementa il servizio di
routing usato da un peer di endpoint
per scoprire e mantenere informazioni
sul percorso verso gli altri peer. Alcuni
peer potrebbero non avere connessioni
dirette, così i messaggi devono essere
instradati attraverso uno o più peer
fino alla destinazione finale. Il router
implementa
Endpoint
Routing
Protocol ERP, consentendo ad un peer
di richiedere e scoprire informazioni di
routing. Il router mantiene in memoria
una tabella di routing dei percorsi
scoperti. Ogni messaggio spedito o
ricevuto contiene un elemento di
routing usato per aggiornare le sue
informazioni di routing. Quando ha
ricevuto un messaggio, il payload del
router viene esaminato dal router per
ottimizzare le sue informazioni di
routing. Il router fornisce informazioni
di routing al servizio di Endpoint per il
trasporto dei messaggi.
12. Relay
Il servizio di Relay fornisce un
meccanismo per un peer che non è
direttamente raggiungibile per usare
un relay peer per mantenere i
messaggi finchè questi possano essere
trasportati. Il servizio di relay è usato
per attraversare i firewall e i NAT. Il
servizio di relay utilizza un
meccanismo di “lease and quota” per
gestire le code dei messaggi per i peer
edge.
I componenti seguenti definiscono
servizi opzionali per supportare i
peergroup JXTA:
13. Rendezvous Service
Il servizio di rendezvous è usato per
propagare i messaggi all’interno del
peergroup.
Questo
servizio
implementa il RendezVous Protocol
RVP. Il servizio di rendezvous
consente ai peer edge di ottenere un
contratto temporaneo per spedire e
ricevere i messaggi propagati. Il
servizio di rendezvous usa il servizio
di endpoint per propagare i messaggi.
14. Rendezvous Peer View RPV
Il servizio di RPV gestisce una lista
dei rendezvous disponibili nel
peergroup. L’RPV mantiene una
visione
decentralizzata
looselycoupled di tutti i rendezvous che
convergono
nel
tempo.
Ogni
rendezvous ha la sua propria lista
RPV.
15. Walker
Il servizio di walker fornisce un
meccanismo a plug-in per attraversare
o scorrere le RPV dei rendezvous per
propagare le query. Il walker
implementa una politica di default per
scorrere i rendezvous dal rendezvous
obiettivo dell’ SRDI iniziale nelle
direzioni up e down.
16. Resolver Service
Il servizio di resolver è usato per
spedire richieste (query/response)
generiche all’interno del peergroup
(RPC asincrono). Il servizio di
resolver implementa il Peer Resolver
Protocol PRP. Il resolver usa i servizi
di endpoint e rendezvous per fare
unicast e per propagare le richieste
all’interno del gruppo.
17. SRDI
Il servizio di SRDI distribuisce gli
indici delle risorse condivise nella rete
dei rendezvous. Questi indici possono
essere utilizzati per mandare le query
nella direzione verso la quale la query
avrà più possibilità di essere risolta,
oppure propaga i messaggi ai peer
interessati
in
questi
messaggi
propagati.
18. Discovery Service
Il servizio di discovery è usato per
scoprire e pubblicare ogni tipo di
advertisement nel peergroup (peer,
peergroup, pipe, module, ecc..). il
servizio di discovery implementa il
Peer Discovery Protocol PDP. Il
servizio di discovery dei peer usa il
servizio di resolver per spedire e
ricevere richieste di discovery. Il
servizio di discovery usa il cache
manager per fare cache e momorizzare
gli advertisement.
19. Pipe Service
Il servizio di pipe è usato per creare e
collegare i lati delle pipe ai peer di
endpoint all’interno del peergroup. Tre
tipi di pipe sono implementati, unicast
1-1, sicura, e propagazione 1-N. il
servizio di pipe usa un servizio di
resolver
di
pipe
per
legare
dinamicamente un lato della pipe ad
un peer endpoint. Il servizio di
resolver delle pipe implementa il Pipe
Binding Protocol PBP.
20. Membership service
Il servizio di membership è usato per
gestire i membri di un peergroup e
pubblica le credenziali dei membri. I
peer nuovi devono essere autenticati
prima di potersi aggiungere ad un
peergroup. Il servizio di membership
fornisce
un
framework
di
autenticazione a plug-in per supportare
vari meccanismi di autenticazione
(JAAS, LDAP).
21. PeerInfo service
Il servizio di peerInfo fornisce un
framework a plug-in per “misurare” e
monitorare i peer. I monitor di
misurazione possono essere associati
con qualsiasi servizio del peergroup
per collezionare informazioni sul
servizio. Il servizio di peerInfo
fornisce le capacità di monitoraggio
remoto per collezionare i dati misurati
su un peer remoto. Il servizio di
peerInfo
implementa
il
Peer
Information Protocol PIP.
22. PeerGroup Service
Il servizio di peergroup implementa
l’inizializzazione di un peer nel
NetPeerGroup e la navigazione nel
peergroup. Il servizio espone tutti i
servizi di base del NetPeerGroup alle
applicazioni che si sono unite al
NetPeerGRoup (discovery, resolver,
pipe, rendezvous, ecc..). Il servizio di
peergroup consente ad un peer di
creare, advertise e unirsi a nuovi
peergroup. I peergroup esportano un
insieme di servizi del peergroup che
sono rappresentati come moduli. Il
servizio di peergroup gestisce
l’infrastruttura
sottostante
per
pubblicare e caricare i moduli. Il
servizio di peergroup gestisce anche il
file di configurazione PlatformConfig.
Bibliografia
http://www.jxta.org
http://www.sun.com/software/jxta/
http://www.upnp.org
http://computer.org/internet/
http://xml.apache.org/xindice/

Documenti analoghi

Modelli e Sistemi di Elaborazione Peer-to-Peer

Modelli e Sistemi di Elaborazione Peer-to-Peer Esegue una richiesta al server invece che ad ogni singola entità Quindi il server risponde con una lista degli altri utenti che contengono quanto richiesto. Cosi che l’utente possa contattarle dire...

Dettagli

Middleware di Discovery Avanzato

Middleware di Discovery Avanzato programmazione in rete, progettata per risolvere alcuni dei problemi dell’elaborazione distribuita moderna, soprattutto nell’ambito P2P. JXTA ha tre obiettivi principali da perseguire: • Interopera...

Dettagli