Middleware di Discovery Avanzato
Transcript
Middleware di Discovery Avanzato (Masini Simone [email protected]) Abstract Quanti di noi in un nuovo ufficio vorrebbero poter stampare un articolo per consultarlo velocemente e non possono perché prima devono configurare il proprio portatile per la comunicazione con la stampante? Questo articolo descrive il Middleware da noi progettato e in parte realizzato che può risolvere questo tipo di problemi, la ricerca e l’utilizzo di risorse disponibili nell’ambiente circostante con le caratteristiche del servizio da noi espresse nel momento della ricerca. Introduzione Scopo di questo progetto è la realizzazione di un Middleware di Discovery Avanzato che consenta il recupero dei servizi in base ad una ricerca cosiddetta avanzata. Con avanzata si intende che a tale ricerca rispondono solo i servizi con caratteristiche che rispecchiano le preferenze espresse dal ricercatore ed alcune preferenze espresse automaticamente dall’architettura, come ad esempio può essere la località. L’ambiente è quello di una rete PeerToPeer in cui vi sono i fornitori dei servizi e gli eventuali fruitori. La realizzazione del Middleware doveva avvenire estendendo uno o entrambi i protocolli UPnP e JXTA che già permettono la ricerca ma in modo molto semplice. Analisi e Studio di Fattibilità Il progetto è stato realizzato da Simone Masini e Giuseppe Tomaiuoli ([email protected]). La prima fase del progetto è consistita nell’analisi dei protocolli JXTA e UPnP, quindi capire le caratteristiche ed i limiti di entrambi. In seguito ad un’attenta osservazione ci si è resi conto delle profonde diversità di questi, dovute principalmente ai diversi target di utilizzo. In accordo con il Middleware di Discovery Avanzato committente Ing. A. Toninelli si è scelto l’utilizzo del protocollo JXTA, in quanto più ricco di funzionalità a noi utili, ma lasciando disponibile l’utilizzo di un bridge per l’eventuale integrazione con il protocollo UPnP. A favorire la scelta su JXTA è stato anche il fatto che è un prodotto open source, mentre UPnP nasce da un consorzio di aziende. Questo tipo di caratteristica si è resa poi a noi vantaggiosa in quanto utile per la consultazione dei sorgenti. 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: 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. 1 • 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). Middleware di Discovery Avanzato 2 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. Middleware di Discovery Avanzato 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 3 GroupMDAInfrastruttura. In questo modo saranno anche essi inglobati nella ricerca e, se nella loro descrizione ci saranno delle caratteristiche che la soddisfano, potranno essere restituiti 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, forse, può essere difficile ottenerne uno nuovo. Anche per gli Utenti che, essendo di passaggio in una rete, non hanno nessuna intenzione 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 Middleware di Discovery Avanzato caratteristiche del Servizio specifico saranno aggiunte quelle generiche del Fornitore. Tali caratteristiche sono comuni a tutti i Servizi da lui forniti e 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. 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. La presenza di profili (sia per i Fornitori, sia per gli Utenti) fa nascere la necessità della persistenza di questi. Le considerazioni qui fatte si riferiscono sia al lato Utenti sia al lato Fornitore dell’infrastruttura. Poiché la struttura su cui si lavora è quella di un sistema distribuito, si è deciso di sfruttare al meglio questa condizione: si è cercato, a tal fine, di distribuire i profili su più nodi per garantire il funzionamento anche a seguito di guasto. Nel momento in cui un utente vuole accedere al sistema, il modulo MDAUtente che utilizza, si lega ad un PeerMDAUtente (PMDA1), secondo le considerazioni fatte per l’assegnamento, tenendo conto del carico. Affinché il PMDA1 possa svolgere le richieste dell’utente, necessita di avere le informazioni che risiedono nel profilo relativo, e quindi è necessario per il PMDA1 avere il profilo dell’utente in locale. Essendo i profili memorizzati su vari nodi, è improbabile che il PMDA1 abbia in locale il profilo; in tal caso questo dovrà effettuare un discovery per ottenerlo. Il PeerMDAUtente, in possesso del profilo 4 peer che ha in carico la copia passiva non esista più e quindi si verrebbe a presentare una sola copia. Considerando il fatto che, al prossimo accesso dell’utente, quasi sicuramente verrà creata la copia passiva, questa scelta dovrebbe essere un giusto compromesso. La creazione di un nuovo profilo viene fatta sul PeerMDAUtente più scarico e la relativa copia viene fatta sul secondo meno carico. Naturalmente il PeerMDAUtente, che ha la copia attiva, deve riportare le modifiche anche sulla copia non attiva. L’aggiornamento della copia comporta un piccolo costo in più sul protocollo, perché tali modifiche si presume siano saltuarie (aggiornamento Event-Driven). Stato precedente: Tra tutte le soluzioni prese in considerazione questa è risultata la Utente migliore in quanto, essendo il sistema profilo profilo distribuito anche in caso di guasti attivo non attivo multipli, non viene compromesso ? l’intero funzionamento perchè continua PMDA1 PMDA2 PMDA3 ad operare anche se in modalità ridotta, cioè in soft degradation. In più il traffico di rete di un peer non ha dei picchi Stato successivo: perché l’aggiornamento avviene nel momento della modifica di un profilo e Utente quindi per ogni profilo in un momento diverso, inoltre il backup è una conseguenza diretta (a costo nullo se l’utente non effettua modifiche al suo PMDA1 PMDA2 PMDA3 profilo) dell’accesso del peer. Xindice è la tecnologia utilizzata per la profilo profilo memorizzazione dei profili sui vari peer, attivo non attivo realizzato dal consorzio Apache come strumento per la memorizzazione di dati Se il PeerMDAUtente, a cui l’utente è XML ed utilizzato anche dal Middleware allacciato, non riceve una copia entro un JXTA. Tale scelta è giustificata dal fatto tempo prestabilito, si assume che la copia che si devono memorizzare i profili che attiva non sia reperibile, e quindi effettua sono in formato XML, e Xindice nasce un altro discovery per ottenere la copia non proprio a tale scopo. attiva del profilo. Una volta ottenuta, la situazione ritornerà nella norma, ovvero con una copia attiva ed una non attiva del Personalizzazione della Richiesta profilo. Tuttavia l’esistenza di una copia (località, dispositivo corrente, non attiva non è garantita. caratteristiche HW e SW) Al fine di limitare la complessità del Estensione delle caratteristiche della protocollo si è lasciato che ci si potesse richiesta da JXTA (solo nome Servizio) a trovare nella spiacevole situazione in cui il Discovery Avanzato che tiene conto di oggetto del discovery, (di seguito denominato PMDA2) spedisce il profilo al PMDA1. Avendo fatto l’ipotesi di guasto singolo, per garantire la tolleranza ai guasti, si è scelto una soluzione che è praticamente a costo nullo e che, inoltre, mantiene inalterato il meccanismo sopra riportato. Nel momento in cui il PMDA2 spedisce il profilo, la sua copia diventa “non attiva” e il profilo che ora ha il PMDA1 assume lo stato di copia attiva; chi un tempo aveva la copia non attiva (PMDA3) viene avvisato dal PMDA2 affinché venga eliminata, in quanto ora diventata superfluo. Middleware di Discovery Avanzato 5 informazioni (dispositivo, preferenze caratteristiche richiesta sia implicito. Statiche e Dinamiche località) riguardanti le dell’utente e altre HW e SW inglobate nella in modo esplicito che Caratteristica di questo progetto è l’estensione dei servizi di discovery esistenti per poter realizzare una ricerca avanzata dei servizi. In base alle specifiche del committente, oltre alla normale ricerca realizzabile in JXTA attraverso il nome del servizio, si doveva anche poter realizzare ricerche complesse, ovvero tenere in considerazione più attributi di descrizione di un servizio. Una parte di tali attributi sono specificati dall’utente nel momento stesso in cui effettua la ricerca, un’altra parte sono nel profilo dell’utente ed aggiunti alla richiesta automaticamente dal sistema. L’ambiente JXTA consente la realizzazione di advertisement personalizzati, la cui documentazione, peraltro, è risultata alquanto scarsa, in cui è possibile mettere le informazioni desiderate. Qui viene riportata la rappresentazione di un advertisement, in formato XML, definito da noi per la descrizione di un servizio di stampa: <servizio type="servizio"> <DatiServizio> <Servizio> <Nome>Stampa</Nome> <Attributi> <Attributo> <Nome>Colore</Nome> <Valore>Bn</Valore> </Attributo> <Attributo> <Nome>Tipo</Nome> <Valore>Laser</Valore> </Attributo> <Attributo> <Nome>Ppm</Nome> <Valore>15</Valore> </Attributo> </Attributi> </Servizio> </DatiServizio> <Nome>nome servizio</Nome> </servizio> La descrizione dei dati del servizio è libera, ma la forma deve seguire quella dell’esempio sopra riportato. Un attributo deve avere un nome e può avere figli di tipo ATTRIBUTI e così via. Una struttura tanto libera, come quella riportata, dovrebbe riuscire a descrivere tutti i servizi, anche se questo influisce sulla complessità della ricerca. Con questo tipo di advertisement non è, infatti, possibile utilizzare il normale discovery messo a disposizione da JXTA perchè la ricerca può avvenire solo in base al nome di un campo, che deve essere di primo livello ed eventualmente può avere un valore. Purtroppo tale valore non può essere composto, cioè non può contenere figli e quindi tutta la struttura rappresentata sopra, non può essere sfruttata per la ricerca. Un esempio di una richiesta può essere quella di seguito: Middleware di Discovery Avanzato 6 <richiesta type="richiesta"> <DatiServizio> <Servizio> <Nome>Stampa</Nome> <Attributi> <Attributo> <Nome>Colore</Nome> <Valore>Bn</Valore> </Attributo> </Attributi> </Servizio> </DatiServizio> <DatiProfilo> <Profilo> <Attributo> <Nome>Tipo</Nome> <Valore>Laser</Valore> </Attributo> </Profilo> </DatiProfilo> <IdentificativoPeer> peer1 </IdentificativoPeer> <IdentificativoRichiesta> richiesta 1 </IdentificativoRichiesta> </richiesta> 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). Si può vedere come la richiesta sia suddivisa in due parti: DatiServizio e DatiProfilo. La parte “DatiServizio” contiene tutte le informazioni richieste esplicitamente dall’utente e in questo caso il servizio deve essere di Stampa e deve avere un attributo denominato Colore il cui valore deve essere BN. Middleware di Discovery Avanzato La parte “DatiProfilo” contiene le preferenze espresse dall’utente nel momento della creazione del profilo e, in questo caso, l’utente esprime il fatto che il servizio debba avere un attributo denominato Tipo e il cui valore deve essere Laser. Sono dette preferenze perché se sono presenti tali dati nella descrizione del servizio, le preferenze devono coincidere con i relativi dati presenti nella descrizione del servizio, ma se i dati non sono presenti nel servizio, tale servizio viene restituito comunque come risultato. Le informazioni contenute in DatiServizio “vincono” su quelle in DatiProfilo, così è possibile che un utente possa esprime una determinata preferenza (sarà riportata nel profilo e andrà quindi considerata in tutte le ricerche), ma anche optare per una condizione diversa per una singola ricerca (DatiServizio). Seguendo quindi l’ordine degli avvenimenti della ricerca all’interno del Middleware per il Discovery Avanzato, un utente esprime la propria richiesta con un documento XML del tipo: <Nome>Stampa</Nome> <Attributi> <Attributo> <Nome>Colore</Nome> <Valore>Bn</Valore> </Attributo> </Attributi> e quindi il PeerMDAUtente, a cui l’utente si è collegato, aggiunge il resto delle informazioni per fornire una richiesta completa come espressa sopra. Un PeerMDAFornitori pubblica, nel gruppo GroupMDAInfrastruttura, un advertisement di descrizione di un servizio ottenuto da un fornitore che lo vuole rendere disponibile. L’advertisement pubblicato è come quello riportato in “Personalizzazione della Richiesta”. Quando un PeerMDAInfrastruttura riceve una richiesta di discovery fa partire una nuova istanza di MotoreDiRicerca passandogli tutte le informazioni di cui 7 esso necessita. Questo processo esegue una ricerca in base ad uno dei campi della ricerca espressa dall’utente. Nel momento in cui riceve le risposte a questo suo discovery, le filtra utilizzando anche tutti i campi della richiesta ed in particolar modo con le priorità descritte sempre in “Personalizzazione della Richiesta”. Una volta eliminate tutte le risposte, che non rispondono alle esigenze dell’utente, le unisce in una unica e la pubblica sul gruppo GroupMDAUtente. L’MDAUtente rimarrà in ascolto di una risposta alla sua richiesta, distinguibile da quelle degli altri MDAUtente in base all’Identificativo Richiesta presente nella risposta e quindi potrà fornire all’utente i risultati della sua ricerca. Onde evitare che ad ogni discovery del MotoreDiRircerca tutti i PeerMDAInfrastruttura eseguano la ricerca anche se non in possesso di informazioni interessanti per la ricerca, si è deciso di suddividere gli advertisement dei Servizi in base a CATEGORIE, come descritto nella “Gestione dei Profili dei Servizi”. Quando un fornitore pubblica un advertisement del suo servizio, se indica anche la categoria, tale servizio verrà ricercato solo nella categoria di appartenenza, sottraendo lavoro inutile a quei PeerMDAInfrastruttura che non possiedono tale categoria. Visto che le categorie da noi messe a disposizione possono non essere a sufficienza, esiste una categoria generica dove vengono messi tutti i servizi che non appartengono alle categorie già presenti. 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. Push/Pull. comunicare al MDA il suo stato di carico espresso in percentuale. Un fornitore potrà così fissarsi un tetto massimo di carico, secondo le risorse che ha a disposizione, e comunicare, quindi, il suo stato di carico corrente. È lasciata al fornitore, invece, la scelta della frequenza con cui aggiornare il MDA. Questo perché un obbligo di aggiornamento ad una assegnata frequenza potrebbe causare al fornitore un’attività eccessiva, quando in realtà il fornitore potrebbe non aver necessità di tanti aggiornamenti perché il suo carico rimane costante. Una situazione opposta potrebbe invece accadere ad un fornitore, il cui carico è variato rapidamente, e quindi preferisce aggiornare le informazioni sull’MDA che lo riguardano. Dalle informazioni del carico, l’MDA restituisce i risultati delle ricerche ordinando quelli con medesime caratteristiche. Onde evitare di restituire risultati non attendibili in risposta alle ricerche perchè un servizio può non essere più disponibile, un fornitore deve pubblicare periodicamente un avviso di presenza, detto Alive. Similmente a quanto accade in JXTA, se entro il tempo di vita concesso all’advertisement non viene pubblicato un messaggio di Alive, l’advertisement del servizio viene eliminato, e quindi il servizio risulta non più disponibile e non verrà più restituito come risultato ad una ricerca. 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. Per meglio distribuire il carico tra i vari servizi disponibili, si è deciso di rendere disponibile al fornitore la possibilità di Middleware di Discovery Avanzato 8 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, come anche le risposte ottenute, le scelte dell’utente e qualsiasi altro tipo di informazione sia ritenuta necessaria 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, poiché il MDA funziona anche con un solo elemento per ogni tipo, ma con la perdita delle caratteristiche di Fault Tolerance. 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, anche quelle relative alla sua localizzazione, e ad altre caratteristiche di scelta personale, possono Middleware di Discovery Avanzato essere inglobate nelle sue richieste, evitando di presentare all’Utente dei Servizi che sarebbero potuti 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 open-source ed avendo una struttura slegata, sia dall’architettura sottostante, sia dal linguaggio di programmazione, consentiva una manipolazione adeguata e rispettava in gran parte le caratteristiche che ci si era prefissati 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 loro 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. Tuttavia, per motivi di tempo, non è stato possibile andare oltre l’aspetto del controllo dell’accesso, attraverso l’autenticazione dell’Utente, però questa 9 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. Per quanto riguarda i Servizi effettivi, anche questo aspetto è stato lasciato a sviluppi futuri. Middleware di Discovery Avanzato 10 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 Middleware di Discovery Avanzato 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 11 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 Middleware di Discovery Avanzato 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 12 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 Middleware di Discovery Avanzato 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 13 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-to-end 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 Middleware di Discovery Avanzato 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è 14 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 loosely-coupled 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 Middleware di Discovery Avanzato 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. 15 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/ Middleware di Discovery Avanzato 16
Documenti analoghi
Modelli e Sistemi di Elaborazione Peer-to-Peer
piattaforma di supporto allo sviluppo di applicazioni
Peer-to-Peer.
Questa architettura è stata progettata per essere
assolutamente indipendente dalla piattaforma.
Middleware di Discovery Avanzato
su un particolare sistema operativo
utilizzando uno specifico protocollo,
JXTA è progettato per essere
condiviso da tutti gli sviluppatori,
indipendentemente dal linguaggio di
programmazione
prefer...
4pp
• Approccio completamente distribuito per localizzazione le
risorse
• Ogni peer propaga (flood) la richiesta ai peer “vicini”, che
a loro volta inviano la richiesta ai loro “vicini” (escludendo
Sistemi peer-to-peer Sistemi peer-to-peer (P2P)
– File e dati di controllo crittografati
– Ogni informazione come richiesta o risposta HTTP
– Il download include adware e spyware…