download tesi - MobiLab
download tesi - MobiLab
download tesi - MobiLab
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Facoltà di Ingegneria<br />
Corso di Studi in Ingegneria Informatica<br />
Tesi di laurea<br />
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Anno Accademico 2009/2010<br />
Relatore<br />
Ch.mo prof. Domenico Cotroneo<br />
Correlatore<br />
Ing. Christiancarmine Esposito<br />
Candidato<br />
Vincenzo De Luca<br />
matr. 041/002809
Dedicata ai miei genitori, a mia sorella, a Roberto,<br />
a chi mi è sempre stato vicino nel bene e nel male.<br />
Questa volta lasciate che sia felice,<br />
non è successo nulla a nessuno,<br />
non sono da nessuna parte,<br />
succede solo che sono felice<br />
fino all’ultimo profondo angolino del cuore.<br />
Sono più sterminato dell’erba nelle praterie,<br />
e l’acqua sotto, gli uccelli in cima,<br />
il mare come un anello intorno alla mia vita,<br />
l’aria canta come una chitarra.<br />
Il mondo è oggi la mia anima,<br />
lasciatemi essere felice,<br />
Oggi lasciate che sia felice, io e basta,<br />
con o senza tutti<br />
essere felice<br />
(Tratto da “Ode al giorno Felice”P.Neruda)
Indice<br />
Introduzione 8<br />
Capitolo 1. Introduzione ai sistemi publish - subscribe 10<br />
1.1 Introduzione ai Middleware 10<br />
1.2 Service Oriented Architecture (SOA) 12<br />
1.2.1 Enterprise Service Bus 13<br />
1.2.2 Event – Driven Architecture 13<br />
1.2.3 Staged Event – Driven Architecture 14<br />
1.3 Modello Publish/Subscribe 14<br />
1.4 Modello architetturale Publish/Subscribe 18<br />
1.4.1 Infrastruttura di overlay 18<br />
1.4.2 Indirizzamento degli eventi 20<br />
1.4.3 Controllo degli eventi 22<br />
1.5 Altri paradigmi di comunicazione 22<br />
Capitolo 2. Le principali architetture Publish/Subscribe 26<br />
2.1 Middleware Publish/Subscribe DDS 26<br />
2.2 Qualità del servizio nei Middleware DDS 27<br />
2.3 Architettura dei Middleware DDS 30<br />
2.4 Real Time Innovations Data Distribution Service RTI - DDS 32<br />
2.4.1 QoS supportate 35<br />
2.4.2 Discovery 37<br />
2.5 OpenSplice 38<br />
2.5.1 Architettura OpenSplice 39<br />
2.5.2 QoS supportate 42<br />
2.6 Corba 43<br />
2.6.1 I servizi CORBA 46<br />
2.6.2 CORBA EVENT SERVICE 48<br />
2.6.3 CORBA NOTIFICATION SERVICE 50<br />
2.6.4 CORBA TAO 51<br />
2.7 JMS – Java Message Service 54<br />
2.7.1 Apache ActiveMQ - CPP 60<br />
2.8 AMQP 62<br />
2.8.1 AMQP Model Layer 64<br />
2.8.2 Il Layer Session 65<br />
2.8.3 Il layer di trasporto (Transport layer) 67<br />
2.8.4 OpenAMQ 68<br />
2.8.5 QPID 71<br />
2.9 Confronto delle soluzioni middleware 73<br />
III
Capitolo 3. Valutazione prestazionale 78<br />
3.1 Sistema di Riferimento 78<br />
3.2 I Test 79<br />
3.3 Parametri di confronto 81<br />
3.4 Test RTI - DDS 82<br />
3.5 Test OpenSplice 90<br />
3.6 Test CORBA TAO 95<br />
3.7 Test Apache ActiveMQ - CPP 104<br />
3.8 Test OpenAMQ 111<br />
3.9 Test QPID 118<br />
3.10 Confronto delle prestazioni delle soluzioni publish/subscribe 125<br />
Conclusioni e Sviluppi futuri 129<br />
Ringraziamenti 131<br />
Bibliografia 135<br />
IV
Indice delle figure<br />
Figura 1.1 Struttura a livelli per applicazioni di rete distribuite 10<br />
Figura 1.2 Genealogia del Middleware 11<br />
Figura 1.3 Un semplice sistema Publish/Subscribe 15<br />
Figura 1.4 Space, Time e Synchronization decoupling 17<br />
Figura 1.5 Architettura a livelli di un sistema Publish/Subscribe 18<br />
Figura 1.6 Interazione Message Passing 23<br />
Figura 1.7 Interazione RPC 23<br />
Figura 1.8 Interazione Notification 24<br />
Figura 1.9 Interazione Shared spaces 24<br />
Figura 1.10 Interazione Message queue 25<br />
Figura 2.1 Schema concettuale del DCPS 31<br />
Figura 2.2 Architettura di un’applicazione sviluppata su RTI DDS 32<br />
Figura 2.3Architettura RTI DDS 35<br />
Figura 2.4 Architettura OpenSplice DDS 40<br />
Figura 2.5 Architettura OMA (Object Management Architecture) 44<br />
Figura 2.6 Macroblocchi dell'architettura OMA 45<br />
Figura 2.7 Pila ISO-OSI 46<br />
Figura 2.8 Modalità di invio degli eventi: push e pull 49<br />
Figura 2.9 Le interfacce principali il servizio di notifica 51<br />
Figura 2.10 Architettura TAO 53<br />
Figura 2.11 Architettura JMS 55<br />
Figura 2.12 Il modello di programmazione Java Message Service 57<br />
Figura 2.13 Un client-library trasforma messaggi JMS da e per eventi strutturati 59<br />
Figura 2.14 Schema dei protocolli di Apache ActiveMQ – CPP 61<br />
Figura 2.15 Struttura a layer di AMQP 63<br />
Figura 2.16 Semantica AMQP 65<br />
Figura 2.17 Header 68<br />
Figura 3.1 Schema Cluster CINI utilizzato per i test 79<br />
Figura 3.2 Schema di Calcolo Latenza 80<br />
Figura 3.3 Architettura decentralizzata 82<br />
Figura 3.4 Mediana dei tempi di RTT RTI - DDS 87<br />
Figura 3.5 Distanza interquartile dei tempi di RTT RTI - DDS 88<br />
Figura 3.6 Mediana Scalabilità RTI - DDS 89<br />
Figura 3.7 Architettura federata 90<br />
Figura 3.8 Mediana dei tempi di RTT OpenSplice DDS 94<br />
Figura 3.9 Distanza interquartile dei tempi di RTT OpenSplice DDS 95<br />
Figura 3.10 Mediana Scalabilità OpenSplice - DDS 96<br />
Figura 3.11 Architettura centralizzata 97<br />
Figura 3.12 Mediana dei tempi di RTT Corba 101<br />
Figura 3.13 Distanza interquartile dei tempi di RTT Corba 102<br />
Figura 3.14 Mediana Scalabilità Corba 103<br />
Figura 3.15 Mediana dei tempi di RTT Apache ActiveMQ - CPP 108<br />
Figura 3.16 Distanza interquartile dei tempi di RTT Apache ActiveMQ - CPP 109<br />
Figura 3.17 Mediana Scalabilità Apache ActiveMQ - CPP 110<br />
Figura 3.18 Mediana dei tempi di RTT OpenAMQ 115<br />
Figura 3.19 Distanza interquartile dei tempi di RTT OpenAMQ 116<br />
Figura 3.20 Mediana Scalabilità OpenAMQ 117<br />
V
Figura 3.21 Mediana dei tempi di RTT QPID 122<br />
Figura 3.22 Distanza interquartile dei tempi di RTT QPID 123<br />
Figura 3.23 Mediana Scalabilità QPID 124<br />
Figura 3.24 Mediana dei tempi di RTT 1Pub – 2 Sub 125<br />
Figura 3.25 Distanza interquartile dei tempi di RTT 1Pub – 2 Sub 125<br />
Figura 3.26 Mediana dei tempi di RTT 1Pub – 4 Sub 126<br />
Figura 3.27 Distanza interquartile dei tempi di RTT 1Pub – 4 Sub 126<br />
Figura 3.28 Mediana dei tempi di RTT 1Pub – 6 Sub 127<br />
Figura 3.29 Distanza interquartile dei tempi di RTT 1Pub – 6 Sub 127<br />
Figura 3.30 Mediana scalabilità 2 Sub – 4 Sub 128<br />
Figura 3.31 Mediana scalabilità 2 Sub – 6 Sub 128<br />
VI
Indice delle tabelle<br />
Tabella 2.1 QoS Policy 36<br />
Tabella 2.2 Architettura 76<br />
Tabella 2.3 Quality of Service Policy 77<br />
Tabella 3.1 Valori della mediana RTI - DDS 84<br />
Tabella 3.2 Valori della distanza interquartile RTI DDS 85<br />
Tabella 3.3 Valori della mediana di Scalabilità RTI – DDS 86<br />
Tabella 3.4 Valori della mediana OpenSplice DDS 91<br />
Tabella 3.5 Valori della distanza interquartile OpenSplice DDS 92<br />
Tabella 3.6 Valori della mediana di Scalabilità OpenSplice – DDS 93<br />
Tabella 3.7 Valori della mediana Corba 98<br />
Tabella 3.8 Valori della distanza interquartile Corba 99<br />
Tabella 3.9 Valori della mediana di Scalabilità Corba 100<br />
Tabella 3.10 Valori della mediana Apache ActiveMQ – CPP 105<br />
Tabella 3.11 Valori della distanza interquartile Apache ActiveMQ – CPP 106<br />
Tabella 3.12 Valori della mediana di Scalabilità Apache ActiveMQ – CPP 107<br />
Tabella 3.13 Valori della mediana OpenAMQ 112<br />
Tabella 3.14 Valori della distanza interquartile OpenAMQ 113<br />
Tabella 3.15 Valori della mediana di Scalabilità OpenAMQ 114<br />
Tabella 3.16 Valori della mediana QPID 119<br />
Tabella 3.17 Valori della distanza interquartile QPID 120<br />
Tabella 3.18 Valori della mediana di Scalabilità QPID 121<br />
VII
Introduzione<br />
Analisi delle prestazioni delle principali soluzioni per servizi<br />
publish/subscribe<br />
L‟esigenza di avere applicazioni distribuite in ambienti di larga scala, scalabili e affidabili,<br />
ha portato alla creazione di nuovi paradigmi di comunicazione. L‟unico in grado di fornire<br />
la disseminazione delle informazioni in forma anonima, in maniera asincrona, garantendo<br />
il totale disaccoppiamento dei partecipanti è il paradigma publish/subscriber. Tali<br />
caratteristiche permettono di ottenere una distribuzione delle informazioni scalabile e<br />
affidabile, in quanto i partecipanti non devono conoscersi reciprocamente, l‟operazione di<br />
invio e ricezione non devono essere sincronizzate e non richiede che le entità interessate<br />
siano “attive” nello stesso tempo. Questo paradigma di comunicazione, grazie a queste<br />
caratteristiche, nell‟ultimo decennio si è guadagnato un ruolo centrale nello sviluppo di<br />
applicazioni su larga scala; esempi di applicazione sono il controllo del traffico aereo, il<br />
controllo dei processi industriali, lo scambio delle quotazioni finanziarie. A seconda del<br />
campo di applicazione, la diffusione delle informazioni deve seguire regole e rispettare<br />
vincoli più o meno restrittivi: si pensi per esempio a quanto sia tollerabile la perdita di una<br />
transazione finanziaria “real-time”. Per cui le problematiche che un sistema di diffusione<br />
delle informazioni si trova ad affrontare sono molteplici: l‟ormai crescente mole di dati che<br />
si vuole trasmettere ad un numero sempre maggiore di partecipanti interessati, i quali<br />
possono essere dislocati su una rete geograficamente vasta, è un altro aspetto da tenere<br />
bene in considerazione, come pure la diversità delle architetture usate per i singoli<br />
partecipanti. Senza contare aspetti dinamici delle reti, guasti, il continuo entrare o uscire<br />
dei partecipanti dalla comunicazione, l‟inaffidabilità dei canali, aspetti che appaiono<br />
evidenti, e maggiormente critici, se si pensa ad una rete di dispositivi mobili. Poichè tali<br />
problematiche sono comuni a molti e diversi campi d‟applicazione, si `e pensato di creare<br />
uno strato software che si occupasse di esse. Uno strato che forma una “terra di mezzo” tra<br />
applicazione e sistema sottostante e per questo chiamato middleware. L‟idea è dunque di<br />
demandare al middleware la gestione delle problematiche, mentre l‟applicazione dovrà<br />
occuparsi solo della propria logica: inviare un dato per l‟applicazione si tradurrà in<br />
un‟istruzione al middleware sottostante, inviarlo affidabilmente potrà essere la stessa<br />
8
Analisi delle prestazioni delle principali soluzioni per servizi<br />
publish/subscribe<br />
istruzione con parametri di affidabilità. Il resto del gioco è intrapreso dal middleware, il cui<br />
apporto migliorerà sia l‟interoperabilità con i vari sistemi che l‟efficienza delle<br />
applicazioni. Una soluzione architetturale è costituita dai sistemi middleware di tipo<br />
publish/subscribe. Il modello Publish/Subscribe risulta particolarmente adatto alla<br />
realizzazione di applicazioni distribuite aventi come task principale la distribuzione dei<br />
dati. I middleware basati sul modello Publish/Subscribe offrono infatti un elevato grado di<br />
disaccoppiamento tra le entità comunicanti, rendendo particolarmente agevole la<br />
realizzazione di schemi di comunicazione molti-a-molti anche con requisiti di tempo<br />
stringenti, come nel caso di sistemi real-time e mission critical ed offrendo un elevato<br />
grado di scalabilità al crescere dei partecipanti alla comunicazione<br />
Nel nostro lavoro di <strong>tesi</strong> abbiamo valutato diverse soluzioni middleware publish/subscribe,<br />
spaziando tra le varie soluzioni attualmente disponibili sul mercato, partendo da soluzioni<br />
middleware già affermate come RTI DDS, OpenSpliceDDS, Corba, e giungere ad<br />
esaminare soluzioni più recenti come AMQP e JMS.<br />
Di seguito riportiamo l‟organizzazione del lavoro in capitoli:<br />
Capitolo 1 - Introduzione ai Sistemi Publish/Subscribe: In questo capitolo si<br />
introduce il paradigma Publish/Subscribe.<br />
Capitolo 2 - Le principali architetture Publish/Subscribe: In questo capitolo ci<br />
soffermiamo ad esaminare le caratteristiche dei middleware presi in esame durante<br />
questo lavoro di <strong>tesi</strong> per cercare di trarne un confronto.<br />
Capitolo 3 - Valutazione prestazionale: In questo capitolo si introduce la<br />
metodologia e la tipologia dei test di funzionamento eseguiti sui middleware presi<br />
in esame. I risultati di tali test sono stati poi raccolti e utilizzati per effettuare una<br />
valutazione prestazionale delle varie soluzioni da cui si è ricavato un confronto<br />
9
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Capitolo 1 - Introduzione ai Sistemi Publish/Subscribe<br />
1.1 Introduzione ai Middleware<br />
L'evoluzione di Internet ha cambiato notevolmente la scala dei sistemi distribuiti. Questi<br />
oggi comprendono milioni di entità, distribuite in tutto il mondo, i cui comportamenti<br />
possono variare nel corso del tempo. Il collante tra le differenti entità, in un ambiente di<br />
scala così ampio, deve essere fornito da un sistema middleware dedicato, basato su un<br />
adeguato sistema di comunicazione come illustrato in figura 1.1 [1]. Il middleware è uno<br />
strato software interposto tra il sistema operativo e le applicazioni in grado di fornire<br />
astrazioni e servizi utili per lo sviluppo di applicazioni distribuite, così da consentire loro<br />
di interoperare indipendentemente da possibili eterogeneità.<br />
Figura 1.1 Struttura a livelli per applicazioni di rete distribuite.<br />
Un Middleware può essere catalogato in base ai servizi offerti:<br />
RPC-based system: prevede le infrastrutture necessarie per effettuare le RPC in modo<br />
trasparente al programma, ed in modo uniforme rispetto ai protocolli sottostanti;<br />
TP Monitor: i middleware di questo tipo sono in grado di supportare transazioni<br />
distribuite con proprietà ACIDE per dati distribuiti su più sistemi eterogenei;<br />
Object-Broker: estendono il paradigma RPC con l‟aggiunta di numerosi servizi che<br />
10
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
semplificano lo sviluppo di applicazioni distribuite secondo il paradigma Object-<br />
Oriented [1];<br />
Object monitor: nasce dall‟unione di due tipi di middleware il TP Monitoe e l‟Object<br />
Broker;<br />
Message-oriented: (MOM) sono middleware basati su scambio di messaggi. Per<br />
messaggio si intende un insieme di dati strutturati, caratterizzati da un tipo ed<br />
un‟insieme di parametri del messaggio. La limitazione principale di questo<br />
middleware è l‟indirizzamento punto-punto;<br />
Message-brokers: è un message middleware che si occupa dello scambio di messaggi<br />
in una rete di telecomunicazioni, lo schema di indirizzamento di questa tipologia di<br />
middleware non è più di tipo punto-punto ma è un indirizzamento orientato ai<br />
messaggi. Il paradigma più noto è il Publish/Subscribe;<br />
Nella Fig. 1.2 viene rappresentata la genealogia dei middleware appena descritti.<br />
Figura 1.2 Genealogia del Middleware.<br />
11
1.2 Service Oriented Architecture (SOA)<br />
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Un sistema distribuito è formato da diversi agenti software discreti che devono cooperare<br />
insieme per svolgere determinate funzioni. Inoltre, gli agenti in un sistema distribuito non<br />
operano nello stesso ambiente, quindi devono comunicare affidandosi a protocolli software<br />
e hardware attraverso una rete. Questo implica che le comunicazioni in un sistema<br />
distribuito sono intrinsecamente meno veloci e disponibili di quelle tramite invocazione<br />
diretta nel codice e usando memoria condivisa. Questo ha delle importanti implicazioni<br />
architetturali, poichè i sistemi distribuiti richiedono che gli sviluppatori prendano in<br />
considerazione l‟imprevedibile latenza di una comunicazione remota e gestire le<br />
problematiche derivate dalla concorrenza e dai possibili fallimenti parziali.<br />
I distributed object systems sono sistemi distribuiti nei quali la semantica<br />
dell‟inizializzazione di un oggetto e dei suoi metodi sono esposti a sistemi remoti tramite<br />
meccanismi proprietari o standard per inoltrare la richiesta oltre i confini del sistema,<br />
effettuare marshall o unmarshall degli argomenti dei metodi, etc.<br />
Una Service Oriented Architecture (SOA) [57,58] è una forma d‟architettura di sistemi<br />
distribuiti tipicamente caratterizzata da queste proprietà:<br />
Vista logica: Il servizio è un‟astrazione, vista logica, del programma, database,<br />
processo etc., definito in termini di cosa fa, tipicamente astraendo un‟operazione.<br />
Orientato ai messaggi: Il servizio è formalmente definito in termini dei messaggi<br />
scambiati tra l‟agente fornitore e l‟agente fruitore e non sulle proprietà degli agenti<br />
stessi. La struttura interna degli agenti, compreso ad esempio il linguaggio di<br />
programmazione usato per implementarlo, la struttura dei processi o la struttura delle<br />
basi di dati, sono deliberatamente astratti nella SOA: non deve essere assolutamente<br />
necessario sapere qualcosa dell‟implementazione di un agente per interagirci. Un<br />
beneficio chiave di questa funzionalità interessa i cosiddetti sistemi legacy.<br />
Orientato alla descrizione: Un servizio è descritto da metadati interpretabili da una<br />
macchina. Questa descrizione deve supportare la natura pubblica della SOA: solo<br />
12
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
quei dettagli utili all‟uso del servizio devono essere resi pubblici. La semantica del<br />
servizio deve essere, direttamente o indirettamente, inserita in questa descrizione.<br />
Granulare: I servizi tendono ad usare poche operazioni con messaggi relativamente<br />
grandi e complessi.<br />
Orientato alla rete: I servizi tendono ad essere utilizzati attraverso una rete, anche se<br />
non è un requisito assoluto.<br />
Indipendente dalla piattaforma: I messaggi sono inviati in un formato standard<br />
indipendentemente dalla piattaforma utilizzata.<br />
1.2.1 Enterprise Service Bus<br />
Un Enterprise Service Bus (ESB) è un'infrastruttura software che fornisce servizi di<br />
supporto ad architetture SOA complesse. Un ESB si basa su sistemi disparati, interconnessi<br />
con tecnologie eterogenee, e fornisce in maniera consistente servizi di orchestration,<br />
sicurezza, messaggistica, routing intelligente e trasformazioni, agendo come una dorsale<br />
attraverso la quale viaggiano servizi software e componenti applicativi. Un ESB si<br />
contraddistingue come soluzione migliorativa, rispetto ad altre più classiche di tipo SOA<br />
oriented, in quanto ad esso sono delegati i servizi comuni, denominati core service<br />
(Security, tracking, routing etc..), che andrebbero altrimenti realizzati.<br />
1.2.2 Event – Driven Architecture<br />
Event-driven architecture (EDA) è un paradigma di architettura sofware per la produzione,<br />
gestione, utilizzo e reazione agli eventi.<br />
Per evento s‟intende “una significativa modifica allo stato”. Ad esempio quando un<br />
acquirente compra una macchina, il suo stato cambia in “venduta”. Il sistema di gestione<br />
del venditore può trattare questo cambio di stato come un evento da raccogliere, segnalare<br />
e far processare da varie applicazioni a corredo dell‟architettura.<br />
Questo paradigma architetturale può essere applicato nella specifica e implementazione di<br />
applicazioni e sistemi che trasmettono eventi attraverso componenti software fortemente<br />
13
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
disaccoppiati e servizi. Un sistema orientato agli eventi tipicamente è costituito da<br />
produttori e consumatori di eventi. I consumatori si sottoscrivono a degli intermediari detti<br />
event manager, mentre i produttori pubblicano gli eventi a questi managers (Subscribe and<br />
Publish, S&P). Quando un manager riceve un evento dal produttore, lo notifica al<br />
consumatore. Se questo è indisponibile, lo memorizza e tenta un ulteriore invio in seguito.<br />
Questo metodo di trasmissione degli eventi è riferito nei sistemi orientati ai messaggi come<br />
“store and foward” Costruire applicazioni e sistemi basandosi su questo tipo di architettura<br />
permette di ottenere una maggiore affidabilità, poiché i sistemi basati sugli eventi sono, per<br />
costruzione, più tolleranti ad ambienti imprevedibili ed asincroni.<br />
1.2.3 Staged Event – Driven Architecture<br />
SEDA [31,32] è l‟acronimo di staged event-driven architecture. Questa architettura è stata<br />
ideata da Matt Welsh dell‟Università di Harvard e prevede di decomporre un‟applicazione<br />
complessa, orientata agli eventi, in un set di fasi (stages) connessi da code. Questa<br />
architettura risolve il problema di overhead presente in modelli basati su thread, e<br />
disaccoppia eventi e thread dalla logica applicativa. Questo permette di prevenire che le<br />
risorse siano occupate da un carico di lavoro che eccede le loro capacità, evitando un<br />
approccio thread-based, dove ogni richiesta è associata ad un thread.<br />
1.3 Modello Publish/Subscribe<br />
Sulla base del paradigma publish/subscribe, i subscriber hanno la possibilità di esprimere i<br />
loro interessi verso eventi, o insiemi di eventi. Successivamente, essi vengono informati di<br />
ogni altro evento pubblicato da un'altra entità cruciale del paradigma, detta publisher. Un<br />
evento viene propagato in modo asincrono a tutti i subscriber che hanno dichiarato<br />
interesse per quell'evento.<br />
Il paradigma publish/subscribe o più in generale event-based è spesso usato per:<br />
• Disseminazione delle informazioni a molti consumatori che sottoscrivono il loro<br />
interesse, come ad esempio: disseminazione delle news.<br />
14
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
• Monitoraggio della rete per il controllo dei componenti del sistema e per la<br />
protezione da attacchi D.O.S.<br />
• Integrazione di applicazioni aziendali.<br />
• Sistemi Mobili dove la rete sottostante e particolarmente caratterizzata da<br />
dinamicità ed eterogeneità.<br />
L'informazione è tipicamente chiamata “evento” e l'atto di diffonderlo è detto “notifica”.<br />
Un sistema publish/subscribe è composto da un insieme di entità ed è rappresentato in<br />
figura 1.3 [2]:<br />
I Publisher sono i componenti attivi del sistema e producono i messaggi da<br />
diffondere;<br />
I Subscribers sono gli elementi passivi del sistema, ricevono i messaggi di interesse;<br />
L'Event Service è un astrazione che costituisce da collante tra publisher e<br />
subscriber;<br />
Figura 1.3 Un semplice sistema Publish/Subscribe<br />
L'event service fornisce un mediatore neutrale tra publisher e subscriber. I subscriber<br />
sottoscrivono i loro interessi, solitamente attraverso una chiamata subscribe(), senza<br />
curarsi dell'effettivo svolgersi di tale chiamata. Questa informazione rimane memorizzata<br />
nell'event service fino a quando non viene invocata la chiamata unsubscribe(). Per<br />
15
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
generare un evento, un publisher generalmente chiama la funzione notify() o publish().<br />
L'event service si occupa di propagare gli eventi a tutti i subscriber sensibili nei confronti<br />
di quel tema. Una notevole quantità di middleware publish/subscribe sono stati sviluppati<br />
e realizzati, è possibile raggruppare queste implementazioni diverse a seconda<br />
dell'architettura adottata e del modello di sottoscrizione dei messaggi[2]:<br />
Architettura adottata:<br />
Centralizzata, ad esempio un server di posta tra publishers e subscribers;<br />
Distribuita, ad esempio implementando le primitive di comunicazione con<br />
meccanismi store and forward sia sui producer che sui consumer;<br />
Federata, per esempio una rete distribuita di server;<br />
Modello Subscription:<br />
Topic-based [3]: i partecipanti possono pubblicare e iscriversi a singoli<br />
eventi, le notifiche sono raccolte per topic (argomento);<br />
Content-based [3]: gli eventi vengono classificati in base a una funzione<br />
corrispondente sul loro contenuto, i subscriber esprimono il loro interesse<br />
specificando condizioni sul contenuto delle notifiche che essi vorranno<br />
ricevere;<br />
Type-based [3]: gli eventi appartengono ad un tipo specifico, incapsulando<br />
sia attributi che metodi, Gli eventi sono filtrati non più in base al loro topic,<br />
ma al loro tipo. Questo permette di definire gerarchie di tipi di eventi.<br />
Il modello Publish/Subscribe ci permette di creare un disaccoppiamento delle parti<br />
interagenti in quanto né le notifiche né le sottoscrizioni sono dirette ad una specifica<br />
entità. Questo disaccoppiamento può essere osservato sotto tre punti di vista [2] [3]:<br />
Space decoupling: le parti interagenti non necessitano di conoscersi. I publisher<br />
pubblicano i loro eventi e i subscriber li raccolgono attraverso l'event service. Sia<br />
Publishers che Subscribers non sanno quanti di questi partecipano all'interazione.<br />
Come mostrato in figura 1.4 l'event service fornisce l'unico punto di riferimento<br />
unilaterale per subscriber e publisher [2] [3].<br />
16
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Time decoupling: le parti interagenti non necessitano di partecipare all'interazione<br />
nello stesso istante di tempo. In particolare i publisher possono pubblicare alcuni<br />
eventi, mentre i subscriber sono disconnessi e viceversa. Come si vede dalla<br />
figura 1.4 si ha la completa indipendenza delle operazioni di pubblicazione e<br />
ricezione dell'evento [2] [3].<br />
Synchronization decoupling: la produzione e il consumo di messaggi non<br />
avvengono nello stesso flusso di controllo tra publisher e subscriber. Il<br />
disaccoppiamento della produzione e del consumo aumenta la scalabilità<br />
eliminando tutte le dipendenze tra i partecipanti che interagiscono. Nella figura<br />
1.4 si cerca di mostrare graficamente la mancanza di sincronizzazione tra<br />
publisher e subscriber.[2] [3]<br />
Figura 1.4 Space, Time e Synchronization decoupling<br />
17
1.4 Modello architetturale Publish/Subscribe<br />
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Un sistema Publish/Subscribe è composto da tre livelli come illustrato nella figura 1.5:<br />
Figura 1.5 Architettura a livelli di un sistema Publish/Subscribe.<br />
Per la diffusione scalabile delle informazioni, i livelli funzionali sono: l‟overlay<br />
Infrastructure, l‟event routing (indirizzamento degli eventi) e l‟algoritmo per il matching<br />
fra eventi e sottoscrizioni. L‟“Overlay Infrastructure” rappresenta l‟organizzazione delle<br />
diverse entità che compongono il sistema, mentre per “Event Routing” si intende il<br />
meccanismo per la disseminazione delle informazioni dai publishers ai subscribers. Esso<br />
sfrutta l‟infrastruttura di overlay e vi integra le proprie informazioni di routing per ottenere<br />
una spedizione degli eventi scalabile. Infine l‟“Algoritmo di Matching” filtra gli eventi<br />
prodotti dai publisher e fa in modo che al subscriber giungano solo quelli che soddisfano<br />
determinati criteri previsti dal modello di sottoscrizione.<br />
1.4.1 Infrastruttura di overlay<br />
Generalmente un sistema Publish/Subscribe si basa su una overlay network, si presentano<br />
diverse possibilità di infrastrutture overlay dipendenti dal modo in cui i nodi della rete<br />
sono organizzati, e dal ruolo che essi ricoprono.<br />
18
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Broker Overlay: I broker server formano una rete di overlay comunicante con i protocolli<br />
di network. Un client che intende connettersi e partecipare alla comunicazione può<br />
accedere al sistema tramite un qualsiasi broker, che in genere memorizza solo un<br />
sottoinsieme delle sottoscrizioni. Le connessioni sono puramente logiche e astratte,<br />
quindi una broker network è statica. La broker network può essere: gerarchica e flat.<br />
Nel primo caso i punti d‟accesso dei publisher risiedono alla radice e quelli dei<br />
subscriber alle foglie (o viceversa) e gli eventi viaggiano solo attraverso i livelli<br />
interessati [12] [13]; nel secondo caso invece non ci sono limitazioni alla connessione,<br />
il che, ha il vantaggio di non sovraccaricare i nodi radice [14].<br />
Peer-to-peer Structured Overlay: Una overlay network peer-to-peer structured è una<br />
rete di livello applicazione composta da un insieme di nodi che si autogestiscono,<br />
formanti un grafo strutturato su uno spazio di chiavi virtuali, dove ad ogni chiave è<br />
associato un nodo. La presenza di questa struttura delle chiavi imposta al grafo,<br />
permette l‟efficiente rilevazione dei partecipanti e dei dati da trasmettere, nonché la<br />
comunicazione attraverso i nodi. Il fatto che la overlay sia strutturata garantisce<br />
quindi che vi sia sempre corrispondenza tra un qualsiasi indirizzo ed un nodo attivo<br />
anche in presenza di nodi che entrano ed escono dalla rete e di guasti sui nodi [20]<br />
[21] [22].<br />
Peer-to-peer Unstructured Overlay: La rete si sforza di organizzare i nodi in una<br />
struttura gerarchica o flat in un piccolo raggio di copertura di rete, contro guasti dei<br />
nodi e frequenza di ingresso/uscita di nodi.Non si suppone che i nodi siano server<br />
dedicati, ma possono includere anche workstations, portatili, dispositivi mobili, ed<br />
essi possono agire sia come client che come parte del pub/sub system. I nodi sono in<br />
grado di autogestirsi. Poiché non vi è una struttura, per reperire i nodi ed i dati esse<br />
sfruttano tecniche di flooding, gossiping o cammini casuali attraverso il grafo per<br />
diffondere e ricevere informazioni associate ai nodi. Il vantaggio risiede nella facilità<br />
con cui vengono gestiti i “join” e “leave” (unione e rilascio) dei nodi. In ogni caso, a<br />
differenza delle reti strutturate, non vi è garanzia che ad ogni indirizzo sia associato<br />
19
un nodo attivo.<br />
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Unstructured Overlays over Mobile Networks: In un ambiente formato da dispositivi<br />
mobili, il cambiamento di topologia è una caratteristica imprescindibile, dovuta allo<br />
spostamento dei dispositivi nonché ai guasti. E' impossibile in questo caso, agire<br />
creando strutture gerarchiche o flat a piccoli raggi in quanto i nodi sono mobili.<br />
Inoltre sono necessari algoritmi che mantengano connettività e consistenza delle<br />
strutture dati per il routing, altrimenti il routing degli eventi stesso non può avvenire<br />
correttamente [8] [9].<br />
1.4.2 Indirizzamento degli eventi<br />
Il cuore di un sistema Pub/Sub distribuito risiede nel meccanismo di Event Routing. In<br />
poche parole è il processo di consegna degli eventi a tutti i subscribers che abbiano<br />
manifestato la volontà di sottoscrivere una pubblicazione. Questo implica una visita dei<br />
nodi da parte del Notification Service al fine di trovare, per ogni evento pubblicato, tutti i<br />
client la cui sottoscrizione registrata è presente nel sistema al momento della<br />
pubblicazione. Tuttavia, l‟impossibilità di definire un ordine temporale globale tra una<br />
sottoscrizione ed una pubblicazione accadute su due nodi diversi (e quindi con clock<br />
generalmente diverso) rende ambigua questa definizione di event routing. Il problema<br />
principale dell‟event routing è la scalabilità. Le performance dovrebbero degradarsi il<br />
meno possibile all‟aumentare dei nodi, delle sottoscrizioni e delle pubblicazioni. A tal fine<br />
occorre regolare le pubblicazioni in modo che la propagazione degli eventi coinvolga<br />
quanto più possibile solo i brokers che contengono delle sottoscrizioni per essi (Message<br />
overhead). D‟altro canto, ridurre la quantità di informazioni di routing da mantenere sui<br />
brokers al fine di permettere flessibili cambiamenti delle sottoscrizioni (Memory<br />
overhead). Questi due aspetti sono in evidente contrapposizione, bilanciarli è uno dei<br />
primi compiti del progettista di un sistema Pub/Sub. Esistono tre categorie di routing e<br />
sono: flooding algorithm, selective algorithm, event gossiping algorithm.<br />
Flooding algorithm: Gli algoritmi di flooding sono basati su una deterministica e<br />
20
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
completa disseminazione degli eventi sull‟intero sistema. Una soluzione banale<br />
consiste nel propagare ogni evento dal publisher verso tutti i nodi del sistema. Il<br />
vantaggio di questo algoritmo è l‟assenza di limitazioni sulle sottoscrizioni, lo<br />
svantaggio principale è il sovraccarico di messaggi scambiati al crescere della rete<br />
quindi la non scalabilità. Per diminuire il message overhead si è creato il subscription<br />
flooding, in cui ogni sottoscrizione è inviata a tutti i brokers, i quali hanno la<br />
conoscenza dell‟intero sistema [24] [15].<br />
Selective algorithm: Gli algoritmi selettivi tendono a ridurre la disseminazione<br />
dell‟informazione degli algoritmi di flooding con l‟uso di strutture deterministiche<br />
costruite sulle sottoscrizioni. Per ottenere ciò un sottoinsieme dei nodi di broker deve<br />
memorizzare ogni sottoscrizione ed un sottoinsieme dei nodi di broker deve essere<br />
visibile da ogni evento [25]. Il Filtering-based routing ed il Rendezvous-based routing<br />
sono due algoritmi selettivi.<br />
Filtering-based routing: L‟algoritmo riduce il message overlay inoltrando<br />
un evento solo ai nodi che si trovano su un percorso che collega il publisher<br />
ai vari subscriber [26].<br />
Rendezvous-based routing: Questo algoritmo ottimizza le prestazioni<br />
raggruppando tutte le sottoscrizioni di un determinato evento in uno stesso<br />
nodo, evitando l‟esecuzione delle operazioni di matching su più nodi [27].<br />
Event gossiping: Gli algoritmi di gossiping sono algoritmi probabilistici, che non usano<br />
routing strutturati. Nel basic gossiping ogni nodo scambia informazioni con uno o<br />
pochi nodi vicini nella rete, selezionati in modo casuale. In questo modo la<br />
disseminazione dell‟informazione assomiglia molto alla disseminazione<br />
epidemiologica [28]. In Informed gossip protocol si ha un basic gossiping algorithm<br />
nel quale la scelta dei nodi vicini a cui inoltrare l‟evento viene eseguita in base alle<br />
conoscenze acquisite dal nodo durante la sua esistenza. Con questo approccio si tenta<br />
di inoltrare l‟evento solo ai nodi interessati. Ogni nodo mantiene informazioni<br />
riguardanti le sottoscrizioni dei suoi vicini, quindi si introduce un overheard di<br />
21
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
memoria, a vantaggio di un minor overheard di messaggi.<br />
1.4.3 Controllo degli eventi<br />
Con Matching si indica il processo di controllo di un evento che sia adatto ad una<br />
sottoscrizione. Il matching è eseguito dal sistema Pub/Sub al fine di determinare se un<br />
evento debba essere consegnato ad un subscriber o meno. Esso si interfaccia anche con<br />
l‟agoritmo di routing, in quanto spesso decisioni di routing sono prese in base al matching<br />
degli eventi delle sottoscrizioni. Nel contesto di sistemi di larga scala è desiderabile da un<br />
lato avere un un numero di sottoscrizioni elevato e dall‟altro avere alte velocità di<br />
elaborazione degli eventi. Ne segue che in generale il processo di matching viene eseguito<br />
spesso e su grandi quantità di dati. Questo non è un gran problema in un sistema Topic-<br />
based, dove il matching si riduce ad un semplice lookup in tabelle, ma in un sistema<br />
Content-based è un grande scoglio per le performance generali, per cui l‟efficienza<br />
dell‟algoritmo di matching gioca un ruolo fondamentale.<br />
1.5 Altri paradigmi di comunicazione<br />
Esistono altri paradigmi di comunicazione oltre al paradigma Publish/Subscribe appena<br />
introdotto. Tali paradigmi sono Message passing, remote invocations, notifications,<br />
shared spaces e message queuing. Tali paradigmi si differenziano tra loro per livello di<br />
astrazione, per tale motivo non è facile effettuare un‟analisi comparativa. Tutti questi<br />
modelli non disaccoppiano la comunicazione tra i partecipanti come avviene nel modello<br />
Publish/Subscribe, e presentano, un limitato supporto nel tempo e nello spazio.<br />
Message Passing: Il message passing rappresenta una comunicazione distribuita a<br />
basso livello, dove i partecipanti comunicano tramite l‟invio e la ricezione di<br />
messaggi [3]. Come mostrato in figura 1.6 il produttore invia i messaggi in modo<br />
asincrono attraverso un canale di comunicazione ed il consumatore riceve tali<br />
messaggio ascoltando in modo sincrono il canale. Il produttore ed il consumatore<br />
devono essere accoppiati temporalmente e spazialmente e devono conoscersi<br />
22
eciprocamente.<br />
Figura 1.6 Interazione Message Passing.<br />
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
RPC: La Remote Procedure Call è la più diffusa forma d‟interazione distribuita; la<br />
quale è stata poi rafforzata applicandola al contesto object-oriented nella forma di<br />
Remote Method Invocations. Come si vede dalla figura 1.7 [3] la distribuzione non<br />
può essere effettuata in modo completamente trasparente all‟applicazione, in quanto<br />
l‟applicazione si trova a dover gestire potenziali fallimenti che possono derivare da<br />
problemi di trasmissione o fallimenti remoti. Risulta presente un accoppiamento<br />
spaziale (consumatore e produttore si devono conoscere) e temporale (il<br />
consumatore effettua chiamate bloccanti<br />
Figura 1.7 Interazione RPC.<br />
Notification: Questo paradigma consente l‟invocazione remota di metodi in<br />
modalità asincrona. Per consentire ciò si è divisa l‟invocazione sincrona in due<br />
comunicazioni distinte asincrone. Nella prima comunicazione il client invia al<br />
server gli argomenti dell‟invocazione ed un riferimento di call - back necessario al<br />
client per gestire il valore di ritorno. La seconda comunicazione inviata dal server<br />
23
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
verso il client per restituire il valore di ritorno. Visto che la comunicazione avviene<br />
in modo diretto tra client e server si ha il fenomeno dell‟accoppiamento spaziale<br />
[3].<br />
Figura 1.8 Interazione Notification.<br />
Shared Spaces: Il paradigma distributed shared memory DSM prevede che più host<br />
in un sistema distribuito vedano un‟area di memoria condivisa, distaccata dal loro<br />
spazio di indirizzamento locale. La comunicazione tra host viene effettuata tramite<br />
l‟inserimento e rimozione di tuple dal tuple space. Questo modello d‟interazione<br />
consente il disaccoppiamento spaziale e temporale, in quanto gli host consumatori<br />
e produttori possono non conoscersi reciprocamente[3].<br />
Figura 1.9 Interazione Shared spaces.<br />
Message Queuing: Il Message queuing è una recente alternativa per le interazioni<br />
distribuite; questo paradigma di comunicazione è fortemente legato al paradigma<br />
24
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
publish/subscribe, perchè usualmente ne utilizza alcune forme. A livello di<br />
interazione la coda di messaggi assomiglia molto al tuple space; in quanto la coda<br />
può essere vista come uno spazio globale in cui sono memorizzati i messaggi dal<br />
produttore. Dal punto di vista funzionale il sistema a code di messaggi garantisce le<br />
proprietà transazionali e di ordinamento. Produttore e consumatore sono<br />
disaccoppiati temporalmente e spazialmente, e si ha sincronizzazione nella fase di<br />
prelevamento dei messaggi. Sono stati sviluppati sistemi che supportano una<br />
consegna asincrona dei messaggi, ma tali sistemi non supportano un gran numero<br />
di consumatori [3].<br />
Figura 1.10 Interazione Message queue.<br />
25
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Capitolo 2 - Le principali architetture Publish/Subscribe<br />
2.1 Middleware Publish/Subscribe DDS<br />
L‟OMG (Object Management Service) ha redatto uno standard per la comunicazione<br />
publish/subscribe che contenga un forte supporto alla qualità del servizio. Tale standard<br />
prende il nome di Data Distribution Service for Real Time System (DDS). Lo standard<br />
OMG non prevede specifiche riguardanti l‟integrazione tra i diversi prodotti software,<br />
quindi non è possibile attualmente avere interoperabilità tra le varie implementazioni del<br />
DDS. Per sopperire a tale mancanza si sta lavorando per redigere uno standard di<br />
interoperabilità tra diverse implementazioni. L‟obbiettivo del DDS è di agevolare la<br />
distribuzione efficiente dei dati in sistemi distribuiti, ed ha come oggetto i sistemi real-<br />
time; per tale motivo è stata sviluppata un‟architettura completamente decentralizzata e<br />
sono state previste un ricco insieme di qualità del servizio che consentono di bilanciare<br />
l‟efficienza e le prestazioni del software. La specifica del DDS è basata sull‟astrazione di<br />
un Global Data Space GDS, in cui i publisher producono dati ed i subscriber consumano<br />
dati, tale spazio può essere caratterizzato dal concetto di topic, Publisher, Subscriber,<br />
Subscription e Quality of Service;<br />
Quality of Service: con le QoS si indica un concetto generale, utilizzato per<br />
specificare il comportamento del servizio fornito. Con le QoS il protocollo spiega<br />
“cosa” ci si può attendere da una applicazione e non il “come” si ottiene [2] [3].<br />
Topic: definisce un tipo di dato che può essere scritto nel GDS. Il DDS fornisce<br />
anche la capacità di distinguere topic di uno stesso tipo tramite l‟uso di semplici<br />
chiavi. Ad ogni topic si possono associare specifiche qualità del servizio (QoS). Da<br />
un punto di vista applicativo i topic sono utilizzati per definire l‟Application<br />
Information Model, cioè il tipo di informazioni scambiate nel modello. Il DDS<br />
fornisce inoltre le capacità per eseguire semplici aggregazioni di topic, ed il content-<br />
based filtering [2] [3];<br />
26
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Publisher: definisce una sorgente dati, può dichiarare l‟interesse di generare dati con<br />
determinate caratteristiche di qualità del servizio associate e scrivere il dato nel GDS.<br />
Le qualità definite devono essere compatibili con quelle dichiarate dal topic di<br />
interesse [2] [3]<br />
Subscriber: leggono topic in GDS, per i quali esiste una sottoscrizione correlata. Il<br />
DDS conta su uno specifico DataReade che serve come tipo letto dal GDS. Il<br />
Subscriber incapsula la responsabilità associate alla ricezione dei dati in accordo alle<br />
QoS richieste [2] [3].<br />
Subscription: operazione logica che consente di legare insieme un subscriber ai<br />
publish interessati. La sottoscrizione deve soddisfare due tipi di condizioni. Un tipo<br />
di condizioni sono relative alle caratteristiche concrete del topic, come tipo, nome del<br />
contenuto. L‟altro insieme di condizioni sono relative alle QoS. Per le QoS si segue<br />
un modello di richiesta/offerta, nel quale le QoS richieste devono essere le stesse o<br />
più deboli di quelle offerte [2] [3].<br />
Una caratteristica chiave alla base del DDS è il servizio di discovery. Tale servizio ha il<br />
compito di scoprire e comunicare le proprietà dei partecipanti al GDS. Infatti le<br />
informazioni necessarie per stabilire una sottoscrizione sono completamente distribuite e<br />
vengono scoperte automaticamente.<br />
2.2 Qualità del servizio nei Middleware DDS<br />
Il DDS implementa un insieme molto ricco di Quality Of Service.<br />
Risorse: queste QoS consentono di controllare le risorse usate nella disseminazione<br />
dati, le più rilevanti politiche che consentono di controllare le risorse di calcolo e le<br />
risorse di rete sono la RESOURCE LIMITY e la TIME BASED FILTERED. La<br />
RESOURCE LIMITY permette di controllare la quantità di messaggi memorizzati<br />
in una implementazione del DDS. La TIME BASED FILTERED permette alle<br />
applicazioni di specificare l‟intervallo temporale minimo tra due messaggi di dato; i<br />
messaggi prodotti ad una velocità maggiore non sono consegnati [2] [3].<br />
27
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Data Timeliness: il DDS prevede un insieme di politiche che consentono di<br />
controllare la proprietà di timeliness della distribuzione dati. Le QoS supportate sono<br />
DEADLINE e LATENCY BUDGET. La DEADLINE permette ad una applicazione<br />
di definire il massimo intervallo di tempo tra i dati; se trascorre tale intervallo senza<br />
l‟arrivo di un messaggio viene effettuata una notifica tramite LISTENER. Il<br />
LATENCY BUDGET consente ad una applicazione di fornire al middleware il<br />
livello d‟urgenza associato ad un dato comunicato, specifica il massimo ammontare<br />
di tempo che dovrebbe trascorrere dall‟istante in cui il dato è scritto, all‟istante in cui<br />
viene posto nella coda di ricezione del ricevente [2] [3].<br />
Data Availability: per controllare la data availability posso usare le politiche di,<br />
LIFESPAN e HISTORY. La DURABILITY fornisce un controllo sul tempo di vita<br />
di un dato scritto nel GDS. Questa caratteristica consente al dato di essere volatile e<br />
dall‟altro permette al dato di avere persistenza. E utile notare che dati transienti e<br />
persistenti consentono di fare Time Decoupling tra lo scrittore ed il lettore; rendendo<br />
il dato disponibile per i successivi lettori inscritti, nel caso di dati transienti oppure<br />
dopo che lo scrittore ha lasciato il GDS, nel caso di dati persistenti. Il LIFESPAN<br />
permette di controllare l‟intervallo di tempo nel quale il dato è considerato valido, il<br />
valore di default è infinito. La HISTORY fornisce un modo per controllare il<br />
numero di dati, cioè la sottosequenza scritta nello stesso topic e tenuta disponibile<br />
per il lettore; i possibili valori attribuibili sono gli ultimi, gli ultimi N oppure tutti i<br />
samples [2] [3].<br />
Data Delivery: permette di controllare come il dato è consegnato, ed a chi è<br />
consentito scrivere su uno specifico topic. Le politiche che si possono usare sono la<br />
RELIABILITY, DESTINATION ORDER e OWNERSHIP. La RELIABILITY<br />
permette di controllare il livello di reliability associato alla diffusione dati, le<br />
possibili scelte sono reliable e best-effort. La DESTINATION ORDER consente di<br />
definire l‟ordine dei cambiamenti eseguiti dal publisher sulla stessa istanza di un dato<br />
topic. Il DDS consente di ordinare i vari cambiamenti in accordo ai time-stamp della<br />
28
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
sorgente o della destinazione. La politica di OWNERSHIP consente di controllare il<br />
numero di scrittori permessi per un dato topic. Se configurato come esclusivo si<br />
indica che il topic può essere posseduto e quindi scritto da un singolo scrittore. E'<br />
possibile inoltre associare una nuova politica, detta OWNER-SHIP STRENGTH<br />
che consente di associare un valore numerico di forza ad ogni scrittore, in questo<br />
caso il topic è posseduto da colui che ha un valore di owneship strength più alto. Un<br />
valore di OWNERSHIP STRENGTH è shared, con questo valore si possono avere<br />
più scrittori che sovrascrivono un topic. I vari cambiamenti devono essere ordinati in<br />
accordo al valore settato nella politica di DESTINATION ORDER [2] [3].<br />
Oltre alle politiche appena definite il DDS fornisce alcuni modi per definire e distribuire<br />
informazioni di bootstrapping, tramite il significato di USER DATA, TOPIC DATA e<br />
GROUP DATA.<br />
La USER DATA permette all‟applicazione di associare informazioni aggiuntive<br />
all‟oggetto entità creato, tale informazione può essere utilizzata dalle applicazioni remote<br />
per uno scopo apposito, ad esempio attribuire credenziali di sicurezza.<br />
Il TOPIC DATA consente di aggiungere informazioni aggiuntive ad un topic creato, tale<br />
informazione può essere prelevata da applicazioni remote.<br />
Il GROUP DATA associa informazioni aggiuntive al Publisher e Subscriber creati, tale<br />
valore è disponibile alle applicazioni nelle entità DataReader e DataWriter, tale valore<br />
viene propagato tramite il topic creato.<br />
Un‟altra politica di QoS prevista è la LIVELINESS, la quale consente di settare i<br />
parametri utilizzati nella determinazione di entità considerate “vive”. Questa politica ha<br />
molti settaggi per consentire una modellazione più consona per le possibili situazioni. Il<br />
settaggio AUTOMATIC consente di determinare i fallimenti al livello di processo ma non<br />
determina i fallimenti a livello logico di processo, questa modalità richiede poco<br />
overheard. Il settagio MANUAL consente di determinare fallimenti logici, richiede<br />
l‟esecuzione dell‟operazione di ASSERT-LIVENESS.<br />
29
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
La politica di PARTITION consente l‟introduzione di una partizione logica nella<br />
partizione fisica indotta dal dominio, questa partizione non crea un vero isolamento tra i<br />
partecipanti come un dominio. Questa policy può` essere modificata, ciò causa una<br />
modifica delle relazioni esistenti tra i DataReader ed i DataWriter del dominio, creando<br />
nuove relazioni o rompendo relazioni esistenti [2] [3].<br />
2.3 Architettura dei Middleware DDS<br />
La specifica del DDS definisce due livelli di interfacce, il DCPS (Data Centric Publish-<br />
Subscribe) ed il DLRL (Data Local Reconstruct Layer).<br />
DCPS: Prevede le funzionalità richieste per pubblicare e ricevere data-object, in<br />
modo efficiente;<br />
DLRL: Livello opzionale che permette una semplice integrazione di servizi al livello<br />
applicativo;<br />
Le funzionalità del DCPS sono:<br />
Identificazione dei dati che un publisher intende pubblicare e tipi di valori previsti<br />
per tali dati;<br />
Identificazione dei dati di interesse per un subscriber e come accedere a tali dati;<br />
Applicazioni per definire topic, per associare vari tipi di dato al topic, per creare<br />
publisher e subscriber e per associare caratteristiche di QoS a tali entità.<br />
Per descrivere un DCPS si usano due specifiche, il PIM Platform Independent Model ed il<br />
PSM Platform Specific Model per le piattaforme basate su PIM.<br />
Nel DCPS la comunicazione è effettuata con l‟aiuto delle seguenti entità:<br />
DomainParticipant, DataWriter, DataReader, Publisher, Subscriber e Topic. Lo<br />
schema concettuale del DCPS viene rappresentato nella seguente figura 2.1, nel quale<br />
viene rappresentato il flusso dell‟informazione tra le varie entità [2] [3].<br />
30
Figura 2.1 Schema concettuale del DCPS<br />
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Il Publisher ed il DataWriter risiedono nel mittente, mentre Subscriber e Data Reader<br />
risiedono nel ricevente. Un Publisher è responsabile della distribuzione dei dati, egli può<br />
pubblicare dati di diverso tipo. Un DataWriter è l‟oggetto dell‟applicazione usato dal<br />
publisher per comunicare l‟esistenza di una nuova istanza di dato per uno specifico tipo di<br />
dato, ed è associato ad un singolo tipo di dato [2] [3].<br />
Un Subscriber è l‟oggetto responsabile della ricezione di dati pubblicati, e della fornitura<br />
di tale dato alle applicazioni interessate, si possono ricevere vari tipi di dati, rispettando le<br />
QoS richieste. Per accedere ai dati ricevuti l‟applicazione usa il modulo DataReader<br />
collegato alla sottoscrizione del dato, con tale modulo si esprime l‟interesse<br />
dell‟applicazione nei confronti dei dati relativi al DataReader [2] [3].<br />
Il Topic è un oggetto concettuale che si interpone tra le pubblicazioni (oggetti<br />
DataWriter) e le sottoscrizioni (oggetti DataReader), con l‟obbiettivo di creare<br />
un‟associazione tra un nome (unico nel sistema), un tipo di dato e le QoS associate al dato<br />
stesso. La definizione del tipo di dato deve fornire le informazioni necessarie per il servizio<br />
di gestione dei dati, come serializzazione e deserializzazione del dato in uno adatto alla<br />
trasmissione. La definizione può essere fatta per mezzo di un linguaggio testuale oppure<br />
31
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
per mezzo di un “plugin” operazionale che fornisce i metodi necessari [2] [3]. Il DCPS può<br />
anche supportare sottoscrizioni CONTENT-BASED con l‟uso di un filtro, questa è una<br />
caratteristica opzionale, in quanto il filtro può essere computazionalmente intensivo e<br />
quindi introdurre un ritardo difficile da predire; comunque recenti ricerche hanno<br />
dimostrato che esistono efficienti algoritmi per affrontare questo problema [2] [3].<br />
2.4 Real Time Innovations Data Distribution Service RTI - DDS<br />
RTI Data Distribution Service è un Network Middleware per applicazioni real-time<br />
distribuite. Fornisce i servizi che sono necessari per sviluppare applicazioni time-critical<br />
distribuite che diffondono dati, fra i vari dispositivi che li richiedono, con il minimo ritardo<br />
possibile. RTI DDS utilizza il modello Publish/Subscribe per la comunicazione,<br />
implementa le DCPS API fornite dall‟OMG nella specifica DDS per le applicazioni Real-<br />
time [29]. RTI Data Distribution Service è indipendente dal sistema operativo e dal<br />
linguaggio di programmazione permettendo a sistemi eterogenei di comunicare tra loro in<br />
maniera piuttosto semplice, come si può vedere dalla seguente figura 2.2 [30]:<br />
Figura 2.2 Architettura di un‟applicazione sviluppata su RTI DDS.<br />
32
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Le applicazioni saranno completamente separate, useranno dal lato mittente oggetti di tipo<br />
Publisher e DataWriter, in ricezione invece saranno di tipo Subscriber e Data-Reader. Ogni<br />
partecipante alla comunicazione può agire nel ruolo di Publisher o Subscriber o entrambi.<br />
Il singolo partecipante alla comunicazione è un oggetto di tipo DomainParticipant ovvero<br />
proprio un partecipante del dominio. I domini servono per discriminare le diverse<br />
applicazioni che si avvalgono di RTI DDS in modo che non interferiscano l‟un l‟altra. Per<br />
cui un Domain rappresenta una rete di comunicazione logica ed isolata che fa in modo che<br />
entità di domini diversi (anche se presenti sulla stessa macchina) non si scambino mai dati.<br />
La piattaforma automaticamente gestisce tutti gli aspetti della consegna dei messaggi,<br />
senza richiedere nessun intervento da parte dell‟applicazione dati, includendo: la<br />
determinazione di chi dovrà ricevere i dati; dove sono ubicati i recipienti; cosa accade se il<br />
messaggio non è consegnato. Tutto questo avviene in accordo ai parametri di QoS settati<br />
nell‟applicazione e forniti dalla piattaforma all‟utente per configurare il meccanismo di<br />
discovery automatico ed il comportamento quando si ricevono o inviano dati. Inoltre RTI<br />
DDS include le seguenti caratteristiche che sono progettate per soddisfare la necessità di<br />
distribuire le applicazioni real-time [29]:<br />
Data-centric publish-subscribe communications: Semplifica la programmazione di<br />
applicazioni distribuite e fornisce un flusso di dati time-critical con latenza<br />
minima;<br />
User-definable data types: Consente la modellazione dell‟informazione inviata;<br />
Reliable Messagging: Consente all‟applicazione subscriber di specificare la consegna<br />
reliable dei messaggi;<br />
Multiple comunication networks: Più domini indipendenti possono essere usati sulla<br />
stessa rete fisica. Le applicazioni sono in grado di partecipare solo nei domini a<br />
cui appartengono. Un applicazione può essere configurata per partecipare in più<br />
domini;<br />
33
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Symmetric architecture: Rende le applicazioni robuste in quanto non sono presenti<br />
server centrali o nodi privilegiati, i sottoscrittori e i pubblicatori possono essere<br />
aggiunti e rimossi dinamicamente;<br />
Pluggable transports framwework: Include l‟abilità di definire nuovi “plug-in” per il<br />
trasporto su UDP/IP e “shared memory”;<br />
L'architettura del sistema è incentrato sulla RTI DDS Database, così come si può vedere<br />
dalla figura 2.3 che contiene tutti i dati relativi ai gruppi di publisher e dei subscriber.<br />
Questo database è accessibile al RTI DDS Library e ad una serie di RTI DDS Tasks. Il<br />
componente prima fornisce un insieme completo di servizi per le applicazioni utente, in<br />
forma di Application Programming Interface. I compiti RTI DDS Tasks sono quelli di<br />
gestire abbonamenti e servizi, e di inviare e ricevere aggiornamenti di pubblicazione. Il<br />
RTI DDS database è condiviso tra tutti i nodi della rete, fornendo loro una visione olistica<br />
della comunicazione [2]. La conoscenza globale può essere utilizzata per calcolare l'attuale<br />
carico del sistema. Queste informazioni vengono poi rese disponibili alle applicazioni.<br />
Ognuna delle quali ha l'obbligo di stabilire e mantenere le comunicazioni. Lo stato viene<br />
mantenuto in qualsiasi parte del sistema, e decade nel corso del tempo. Nessuna parte del<br />
sistema si basa sull'handshaking tra i nodi. Ogni posizione ha anche la memoria sufficiente<br />
per mantenere una cache locale di publications e di subscriptions. Per supportare i requisiti<br />
di decadimento dello stato, i messaggi di aggiornamento extra vengono inviati per<br />
mantenere le informazioni memorizzate nella cache corrente. Questo design rende la<br />
domanda globale distribuita più robusta, disaccoppiando gli errori di nodo, e rende<br />
semplice la sistemazione dei singoli fallimenti di un nodo. Non vi è alcun altro<br />
meccanismo per sostenere la tempestività del traffico al di fuori del controllo di<br />
ammissione del carico corrente di comunicazione. Tuttavia, in termini di fault-tolerance,<br />
RTI DDS prevede altri meccanismi per sostenere la ridondanza dei publisher. Così, ogni<br />
gruppo può avere più subscribers e molti publishers replicano la stessa entità, producendo<br />
tutto in parallelo. Ogni pubblicazione ha due ulteriori parametri associati: la robustezza e la<br />
persistenza. La robustezza definisce il peso relativo di un publisher per quanto riguarda<br />
34
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
altri publisher dello stesso ente. La persistenza specifica la validità temporale della<br />
pubblicazione. Subscribers considerano una pubblicazione solo se la sua robustezza è<br />
maggiore o uguale alla robustezza di uno degli ultimi che hanno ricevuto da tale soggetto.<br />
Nel caso in cui la finestra temporale della persistenza scade, la prima pubblicazione di tale<br />
entità, dopo quel momento è sempre accettato, indipendentemente dalla sua robustezza.<br />
Questi meccanismi sono integrati con un numero progressivo assegnato ad ogni<br />
pubblicazione e permetteranno di individuare le istanze mancanti. I Publishers<br />
manterranno le loro pubblicazioni in un buffer per un periodo determinato. Durante tale<br />
periodo, i subscribers che perdono una pubblicazione possno chiedere la ritrasmissione [2].<br />
2.4.1 QoS supportate<br />
Figura 2.3Architettura RTI DDS<br />
RTI DDS implementa lo standard della OMG, in ogni caso sussistono delle scelte<br />
architetturali che apportano delle estensioni alla specifica, nonché l‟esistenza di QoS non<br />
supportate. Di seguito sono riportate le QoS di maggior interesse, sono riportate come<br />
previste dallo standard DDS e se implementate o meno da RTI DDS [29].<br />
35
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
QoS Policy Valore Specifica DDS RTI<br />
DURABILITY Un tipo:<br />
VOLATILE,<br />
TRANSIENT-<br />
LOCAL,<br />
TRANSIENT,<br />
PERSISTENT<br />
DEADLINE Una durata<br />
Temporale<br />
OWNERSHIP Un tipo: SHARED,<br />
EXCLUSIVE<br />
RELIABILITY Un tipo: BEST<br />
EFFORT,<br />
RELIABLE ed una<br />
durata di max<br />
blocking - time<br />
LIFESPAN Una durata<br />
temporale<br />
HISTORY Un tipo:<br />
KEEP_LAST,<br />
KEEP_ALL, ed un<br />
numero intero di<br />
depth<br />
RESOURCE-<br />
LIMITS<br />
Tre numeri interi:<br />
max_samples,<br />
max_instance,<br />
max_samples_pre_<br />
instance<br />
Tabella 2.1 QoS Policy<br />
Indica se i dati debbano essere<br />
disponibili anche dopo che<br />
sono stati inviati al Data-<br />
Writer per permettere che dei<br />
DataReader che si uniscono in<br />
ritardo alla comunicazione li<br />
ricevano<br />
Un DataReader si aspetta di<br />
ricevere dati almeno con<br />
periodo di<br />
deadline. Nel Data-<br />
Writer invece, indica<br />
che l‟applicazione<br />
mira a inviare dati almeno con<br />
periodo di deadline<br />
Specifica se sia permesso che<br />
più Data-Writer possano<br />
scrivere la stessa istanza di<br />
dato e in caso come ciò debba<br />
essere arbitrato<br />
Indica il livello di affidabilità<br />
richiesta/offerta dal servizio ed<br />
il tempo massimo che il<br />
DataWriter può rimanere<br />
bloccato se non ha più spazio<br />
perulteriori campioni<br />
Specifica la massima durata di<br />
validità di un dato scritto dal<br />
Data-Writer<br />
Questa QoS specifica i<br />
campioni che debbano essere<br />
mantenuti in memoria, nel<br />
caso KEEP_LAST solo gli<br />
ultimi depth campioni saranno<br />
mantenuti.<br />
Specifica le risorse che il<br />
servizio può consumare per<br />
offrire le QoS desiderate<br />
Implementa<br />
VOLATILE e<br />
TRANSIENT-<br />
LOCAL<br />
Implementato<br />
Implementato<br />
Implementato<br />
Implementato<br />
Implementato<br />
Implementato<br />
Ci sono alcune QoS che non sono implementate nella specifica, bensì estese da RTI DDS:<br />
36
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
TRANSPORT UNICAST - Specifica le interfacce unicast transport network da usare per<br />
la ricezione dei messaggi da parte dell‟entità;<br />
DISCOVERY - Specifica gli attributi necessari a trovare i partecipanti nel dominio;<br />
WIRE PROTOCOL - Specifica gli attributi del wire protocol per il DDS Domain<br />
Participant ;<br />
DATA READER RESOURCE LIMITS - Specifica l‟ammontare delle risorse specifiche<br />
che RTI Data Distribution Service può usare per il DataReader ;<br />
DATA WRITER RESOURCE LIMITS - Specifica l‟ammontare delle risorse specifiche<br />
che RTI Data Distribution Service può usare per il DataWriter ;<br />
DATA READER PROTOCOL - Configura i parametri di QoS specifici del DataReader ;<br />
DATA WRITER PROTOCOL - Configura i parametri di QoS specifici del DataWriter ;<br />
ASYNCHRONOUS PUBLISHER - Specifica la configurazione del Publishing asincrono<br />
per le istanze di DDSPublisher.<br />
2.4.2Discovery<br />
Il modello DCPS fornisce una comunicazione molti-a-molti, trasparente e anonima. Ogni<br />
volta che l‟applicazione invia dei dati in un Topic il middleware li replica a tutti i<br />
Subscriber che hanno sottoscritto quel Topic. L‟applicazione nel lato Publisher non deve<br />
curarsi di quanti siano i subscriber e tanto meno dove siano; lo stesso discorso vale per il<br />
lato Subscriber. Per ottenere ciò, su ogni nodo, RTI DDS deve mantenere una lista di<br />
applicazioni interessate al Topic ed alcune informazioni sulla QoS per l‟invio dei dati. La<br />
propagazione di queste informazioni fra i vari partecipanti interessati è chiamata<br />
Discovery process. La specifica DDS (DCPS) non specifica come tale processo debba<br />
avvenire e RTI DDS lo implementa tramite un protocollo di RTPS (Real Time Publish<br />
Subscribe) opportuno: Quando un DomainParticipant viene creato, il middleware lancia<br />
dei pacchetti sulla rete per annunciarne l‟esistenza. Quando un‟applicazione trova che<br />
un‟altra applicazione appartiene allo stesso dominio (Domain) scambieà` con essa<br />
informazioni sullo stato di pubblicazioni e sottoscrizioni e relative QoS. Quando nuovi<br />
37
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
DataWriter e DataReader sono creati, tale informazione sarà notificata a tutta la lista di<br />
applicazioni conosciute. Una veloce descrizione di come funzioni è la seguente: quando<br />
un DomainParticipant viene avviato, per default invia tre messaggi ad ogni nodo nella sua<br />
PEER LIST. Il numero di tali messaggi può essere configurato nella QoS del<br />
DomainParticipant nel campo<br />
discovery_config.new_remote_participant_announcements. Questi messaggi<br />
vengono inviati ad intervalli casuali tra zero ed un secondo per default. Anche questo<br />
tempo è configurabile nella QoS del DomainParticipant nel campo<br />
discovery_config.new_remote_participant_announcement_period. Esso serve ad<br />
inviare messaggi a ritardi casuali compresi tra zero ed il valore impostato, in modo da<br />
evitare il flooding (inondazione) del nuovo DomainParticipant remoto con tanti messaggi<br />
di discovery assieme. Se tutti i messaggi vengono persi, il DomainParticipant attenderà 30<br />
secondi, e tale valore viene preso anche come periodo di liveliness, configurabile nel<br />
campo discovery_config.participant_liveliness_assert_period [29] [30].<br />
2.5 OpenSplice<br />
PrismTech's OpenSplice DDS, è una seconda generazione, completamente compatibile<br />
con l'implementazione OMG DDS, offre supporto per tutti i profili DCPS, nonché il<br />
Profilo DLRL-object. Lo scopo di OpenSplice DDS è quello di fornire una infrastruttura e<br />
un middleware layer in tempo reale per sistemi distribuiti. Questa è una realizzazione<br />
delle specifiche OMG-DDS-DCPS per un Data Distribution Service basata su una<br />
architettura Data Centric Publish/Subscribe. OpenSplice DDS fornisce un'infrastruttura<br />
per la distribuzione dei dati real-time ed offre servizi middleware alle applicazioni [31].<br />
Per garantire la scalabilità, la flessibilità e l'estensibilità, OpenSplice DDS ha una<br />
architettura interna che utilizza una memoria condivisa di interconnessione, non solo tutte<br />
le applicazioni che risiedono all'interno di un nodo di elaborazione, ma anche un nodo<br />
configurabile ed estensibile di insieme di servizi. Questi servizi costituiscono “la<br />
funzionalità pluggable” come la messa in rete (QoS driven real-time networking è basato<br />
38
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
su più canali multicast affidabile), la durata (fault tolerant storage sono forniti sia ai dati di<br />
stato real-time che alle impostazioni), e il controllo remoto e monitoraggio del servizio<br />
(viene fornito con un accesso remoto basato sul web utilizzando il protocollo SOAP dal<br />
OpenSplice DDS Tuner tools) [31].<br />
2.5.1 Architettura OpenSplice<br />
OpenSplice DDS utilizza una architettura a memoria condivisa, in cui i dati sono<br />
fisicamente presenti solo una volta su qualsiasi macchina, e in cui l'amministrazione Smart<br />
fornisce ancora ad ogni abbonato la propria visione privata su questi dati. Ciò consente agli<br />
abbonati ai dati di percepire quest'ultimi come contenuti in un singolo database, questo<br />
database può essere filtrati, interrogato, ecc (utilizzando il profilo di abbonamento, come<br />
sostenuto da OpenSplice DDS). I risultati di tale architettura di memoria garantisce<br />
eccellente scalabilità e prestazioni ottimali rispetto alle implementazioni in cui ogni<br />
publisher/subscriber comunica ciascuno con la propria storage [31].<br />
Il middleware OpenSplice DDS può essere configurato “on the fly”, ovvero specificando<br />
solo i servizi realmente utilizzati, nonché la configurazione di tali servizi per un ottimale<br />
abbinamento con il dominio di applicazione (i parametri di rete, la durata livelli, ecc.).<br />
OpenSplice DDS è facilmente manutenibile attraverso file XML, attraverso questi si<br />
possono configurare tutti i servizi. La configurazione di OpenSplice è anche supportata<br />
attraverso la MDA strumento che permette di modellare il sistema / rete e la generazione<br />
automatica della opportuno file XML di configurazione [2].<br />
39
Figura 2.4 Architettura OpenSplice DDS<br />
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Come si può vedere dalla figura 2.4, ogni applicazione collegherà le librerie OpenSplice al<br />
fine di utilizzare le caratteristiche DDS e di comunicare con i servizi inseribili tramite la<br />
memoria comune condivisa.<br />
Il file di configurazione XML definisce e configura i seguenti servizi:<br />
il default service - chiamato anche il domain service, è responsabile per l'avvio e il<br />
monitoraggio tutti gli altri servizi<br />
il durability service - è responsabile per la memorizzazione dei dati non volatili e<br />
mantenerli coerenti all'interno del dominio<br />
il networking service - realizza una comunicazione tra gli user configurati ed i nodi<br />
di un dominio<br />
il tuner service - fornisce una interfaccia SOAP per il sintonizzatore OpenSplice per<br />
connettersi al nodo remoto da qualsiasi altro nodo raggiungibile<br />
La dimensione del database predefinito che viene mappato su un segmento di memoria<br />
condivisa è limitato e la dimensione massima può essere di 10 Megabyte, quindi deve<br />
40
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
essere regolato. La configurazione tramite un file XML esterno è un modo comoda per<br />
eseguire le operazioni di configurazione per i servizi, poiché questo consente all'utente di<br />
modificare facilmente i parametri che influenzano il comportamento del sistema [2].<br />
Domain Service: è responsabile per la creazione e l'inizializzazione di<br />
un'amministrazione condivisa dei nodi nella memoria condivisa, per un dominio<br />
DDS specifico su un nodo di elaborazione. Senza questa amministrazione, nessun<br />
altro servizio o applicazione è in grado di partecipare a un Domain Service [2] [31].<br />
Durability Service: I dati prodotti dalle applicazioni devono rimanere a disposizione<br />
del DataReader fino alla fine della loro adesione. La durabilità dei dati può essere<br />
transitoria o permanente ed è determinata dalla qualità del servizio. Se uno<br />
specifico argomento è stato contrassegnato per essere transitoria, le istanze<br />
corrispondenti ai dati rimangono disponibili nel sistema durante l'intero ciclo di vita<br />
del sistema. Se uno specifico argomento è stato contrassegnato per essere<br />
persistente, le istanze corrispondenti ai dati addirittura sopravvivono dopo l'arresto<br />
del sistema, perché sono scritti in una memoria permanente. Il Durability Service è<br />
il responsabile per la realizzazione di queste proprietà dei dati nel sistema[2] [31].<br />
Networking Service: Quando i terminali di comunicazione sono situati in nodi di<br />
calcolo differenti, i dati ottenuti utilizzando il DDS service locale devono essere<br />
comunicati al DDS service remoto e viceversa. Il Networking Service fornisce un<br />
ponte tra il DDS service locali e di una interfaccia di rete. Networking Service<br />
multiple possono esistere l'uno accanto all'altro, ciascuno al servizio di una o più<br />
interfacce di rete fisica. Il Networking Service è responsabile della trasmissione di<br />
dati alla rete e per la ricezione di dati dalla rete. Può essere configurato in modo da<br />
distinguere i canali di comunicazione multipli con diverse politiche di QoS<br />
assegnate ed essere in grado di pianificare l'invio e la ricezione di messaggi<br />
specifici per fornire prestazioni ottimali per un dominio specifico di applicazione. I<br />
Networking Service possono utilizzare canali separati, ognuno con il proprio nome<br />
e propri parametri; questi canali possono essere affidabili o non affidabili. Il<br />
41
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Networking Service sceglie il canale più appropriato per ogni DataWriter, ovvero il<br />
canale che garantisce la sua QoS e le impostazioni migliori [2] [31].<br />
Tuner Service: Il Tuner Service fornisce un'interfaccia remota per il monitoraggio e il<br />
controllo delle strutture OpenSplice mediante il protocollo SOAP. Ciò consente al<br />
sintonizzatore OpenSplice in remoto, da qualsiasi luogo raggiungibile, di<br />
monitorare e di controllare i servizi OpenSplice così come le applicazioni che<br />
OpenSplice utilizza per la distribuzione dei loro dati [2] [31].<br />
2.5.2 QoS supportate<br />
La QoS fornisce un meccanismo generico alle applicazione per controllare il<br />
comportamento di un'entità: ogni politica di controllo è rappresentata da un tipo strutturato<br />
contenente gli attributi per tutti i parametri rilevanti. Il modo con cui comunica OpenSplice<br />
DDS è definito dai campi chiave del rispettivo tipo di dato e la Quality of Service (QoS),<br />
del loro topic corrispondente. Ogni topic deve essere creato prima che possa essere<br />
distribuito specificando il tipo di dati e la politica di QoS da associare. Le politiche di QoS<br />
che devono essere associate ad un topic specifico descrivono i diversi aspetti della gestione<br />
dei dati per tale specifico topic [31].<br />
Le politiche di QoS che più importanti sono:<br />
DURABILITY - OpenSplice DDS supporta quattro tipi di durability. La durability<br />
definisce la durata di vita dei dati, classificati in VOLATILE,<br />
TRANSIENT_LOCAL, TRANSIENT e PERSISTENT data. OpenSplice non<br />
realizza alcun copia di backup per i dati volatili. Quando i dati volatili vengono<br />
consegnati, non viene data alcuna garanzia che questi dati si possano ottenere di<br />
nuovo. I dati transient sono registrati da OpenSplice per i lettori che li hanno<br />
sottoscritti, ma per un tempo limitato, ovvero finché l'infrastruttura OpenSplice è<br />
attiva, una copia di tutti i dati transitori sarà conservata e riprodotta. I dati persistent<br />
sopravvive alla durata di vita dell'infrastruttura OpenSplice perché tali dati vengono<br />
salvati su un numero differente di dischi ridondanti a seconda della configurazione.<br />
42
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Quindi una copia dei dati persistenti è sempre disponibile, anche quando<br />
l'infrastruttura OpenSplice viene riavviata. In genere, i dati di configurazione di<br />
sistema sono persistenti, mentre quelli aggiornati di frequente non la saranno perchè i<br />
benefici che si otterranno non saranno superiori all'overhead [31].<br />
RELIABILITY - in OpenSplice possono essere utilizzati due tipi di affidabilità che<br />
sono consegna BEST_EFFORT e consegna AFFIDABILE. I topic che vengono<br />
contrassegnati per una consegna affidabile al fine di garantire il successo della<br />
trasmissione dei messaggi viene garantita una ri-trasmissione automatica dei<br />
campioni persi. I topic che sono contrassegnati per una consegna best effort non<br />
hanno maggiori garanzie di giungere al destinatario rispetto a quello che viene già<br />
implementato dalla rete sottostante: quando un topic si perde sulla sua strada rimane<br />
inosservato [31].<br />
2.6 CORBA<br />
La Common Object Request Broker Architecture (CORBA) è stata definita nel 1991<br />
dall‟OMG (Object Management Group) un consorzio consacrato ad aumentare il grado di<br />
interoperabilità per applicazioni distribuite in ambiente eterogeneo attraverso la tecnologia<br />
orientata agli oggetti (OO). Di fatto è stato preso uno dei principi chiave della<br />
programmazione orientata agli oggetti, l‟incapsulamento, applicandolo all‟abbattimento<br />
delle differenze tra i prodotti usati nell‟infrastruttura hardware, software, di<br />
programmazione e di rete di un sistema distribuito. Pensiamo a due applicazioni<br />
preesistenti che gestiscono due applicazioni non create per cooperare tra loro. Se queste<br />
applicazioni vengono opportunamente incapsulate all‟interno di due oggetti omogenei, è<br />
possibile creare una sinergia dapprima impossibile (una applicazione potrebbe richiedere<br />
delle funzionalità all‟altra attraverso una invocazione di metodo). Tuttavia se le due<br />
applicazioni risiedono su due macchine distinte abbiamo bisogno di un mezzo che metta in<br />
comunicazione i due oggetti ovvero li localizzi e successivamente ne gestisca lo scambio<br />
dati. Prima di entrare in dettaglio nella descrizione della architettura CORBA, mostriamo<br />
43
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
nella figura 2.5 l‟architettura OMA (Object Management Architecture) che rappresenta la<br />
struttura logica su cui le specifiche successive definite dall‟OMG si basano [34] [35].<br />
Figura 2.5 Architettura OMA (Object Management Architecture)<br />
Questa architettura ha quattro componenti: ORB, CORBAservices e CORBAfacilities e<br />
Application Objects. Le CORBAfacilities sono un insieme di servizi che possono essere<br />
condivisi da molte applicazioni ma che non sono vitali come i CORBA services.<br />
L‟Application Object corrisponde alla nozione classica di applicazione prodotta da una<br />
particolare organizzazione. Di conseguenza non è standardizzato da OMG.<br />
44
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Ultimata l‟architettura OMA, OMG ha iniziato un lavoro per la specifica dei macroblocchi<br />
di Figura 2.6. I contributi più importanti emersi dal lavoro dell‟OMG sono stati [34] [35]:<br />
Figura 2.6 Macroblocchi dell'architettura OMA<br />
L‟OMG Interface Definition Language (IDL) utilizzato per circoscrivere all‟interno<br />
di un oggetto le differenze legate al linguaggio di programmazione [32] [33].<br />
L‟Object Request Broker (ORB) utilizzato per nascondere la locazione fisica a due<br />
oggetti interagenti, consentendo pertanto una serie di operazioni (invocazione di<br />
metodo, attivazione ecc.) a prescindere dalla locazione degli oggetti all‟interno<br />
dell‟ORB. Questa funzionalità viene realizzata attraverso una serie di interfacce al<br />
di sopra di un core ORB come l‟Object Adaper, la Dynamic Invocation Interface<br />
(DII), l‟Implementation Repository e l‟Interface Repository (vedi Figura 1.11). La<br />
specifica del componente ORB dell‟OMA è CORBA (Common Object Request<br />
Broker Architecture)[32] [33].<br />
General Inter-ORB protocol (GIOP) utilizzato per nascondere la locazione fisica a<br />
due oggetti interagenti che risiedono in due ORB distinti [32] [33].<br />
I CORBA Object Service (COS) supportano funzioni base per usare ed<br />
implementare oggetti per eseguire delle operazioni sul sistema. Questi servizi sono<br />
forniti di interfaccia specificata dall‟IDL. Attualmente ci sono sedici servizi<br />
45
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
standard tra cui: Naming service, Transaction Service, Concurrency control service,<br />
security e time ecc [32] [33].<br />
Nella figura 2.7 è illustrata la posizione di CORBA rispetto alla pila OSI:<br />
2.6.1 I servizi CORBA<br />
Figura 2.7 Pila ISO-OSI<br />
I servizi CORBA aggiungono funzionalità all‟ORB. Le operazioni messe a disposizione<br />
dal servizio CORBA sono definite da una interfaccia IDL. Tale interfaccia è stata<br />
standardizzata dall‟OMG. Attualmente i servizi standard sono divisi in tre categorie servizi<br />
legati ai sistemi distribuiti, alle applicazioni e di tipo generale [35].<br />
Servizi legati ai sistemi distribuiti:<br />
Naming service. Permette ad un client di trovare un oggetto attraverso il suo nome<br />
e ad un server di registrare i suoi oggetti dandogli un nome. La struttura dei nomi in<br />
CORBA è di tipo gerarchico simile alla struttura del file system di UNIX.<br />
Trading Service. Il trading service è un servizio di locazione di oggetti. Nel<br />
Trading Service si fanno delle richieste per avere una lista di oggetti che soddisfano<br />
certe caratteristiche o proprietà. Il Trading Service contiene dei record chiamati<br />
46
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
offer, formati da un campo tipo di servizio, insieme di proprietà del servizio e<br />
riferimento all‟oggetto.<br />
Event Service. Aggiunge a CORBA la possibilità di utilizzare un paradigma<br />
asincrono simile al publish/subscribe per le comunicazioni tra gli oggetti.<br />
Notification Service. Estensione dell‟Event Service, più flessibile e affidabile. In<br />
particolare il Notification Service definisce un modello dati per i messaggi,<br />
permette di effettuare delle sottoscrizioni basate su query e quindi di filtrare i<br />
messaggi su un canale e aggiunge il supporto per la qualità del servizio nella<br />
trasmissione delle notifiche.<br />
Servizi di tipo generale:<br />
Licensing Service. Questo servizio controlla i diritti di utilizzo di un client di un<br />
determinato servizio CORBA, servizio applicativo o della piattaforma stessa.<br />
Life Cycle Service (LFS). L‟interfaccia di LFS include una serie di operazioni per<br />
copiare, muovere, creare e distruggere un oggetto all‟interno dell‟ORB. Il<br />
componente centrale di un LFS è l‟object factory ovvero un oggetto capace di<br />
creare altri oggetti. Un client che fa una richiesta di creazione di un oggetto avrà<br />
restituito un riferimento all‟oggetto creato.<br />
Servizi legati alle applicazioni:<br />
Transaction Service (OTS). Se un client deve eseguire modifiche su una serie di<br />
oggetti distinti e queste modifiche hanno la caratteristica di atomicità siamo in<br />
presenza di una transazione. Quindi CORBA deve mettere a disposizione un<br />
servizio per la gestione delle transazioni in modo che queste ultime soddisfino la<br />
proprietà ACID (atomicità, consistenza, isolamento e durabilità).<br />
Externalization Service. Questo servizio permette ad oggetti di essere<br />
immagazzinati in una sequenza di byte per essere successivamente ricostruiti. Le<br />
operazioni di questo servizio sono due: externalize e internalize. La prima scrive<br />
l‟oggetto in una sequenza di byte includendo lo stato corrente al momento della<br />
47
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
“esternalizzazione”, la seconda ricostruisce l‟oggetto da una data sequenza di byte<br />
includendo lo stato “esternalizzato”.<br />
Relationship Service. All‟interno di una piattaforma distribuita, gli oggetti<br />
stabiliscono delle relazioni. Nel caso in cui si vogliano esplicitarle, l‟OMG ha<br />
introdotto la possibilità di definire relazioni all‟interno dell‟IDL attraverso un<br />
servizio apposito.<br />
Concurrency Control Service. Questo servizio permette a client o transazioni di<br />
mettere lock sugli oggetti in lettura ed in scrittura, esclusivi e condivisi. Questo<br />
servizio permette di implementare algoritmi complessi di controllo della<br />
concorrenza tra le transazioni all‟interno dell‟ORB.<br />
Query Service. Questo servizio permette di interrogare collezioni di oggetti. Esso<br />
riceve delle stringhe di caratteri che rappresentano l‟interrogazione in un dato<br />
linguaggio. L‟OMG ha per ora specificato un servizo di query in grado di<br />
interpretare interrogazioni in SQL e QQL.<br />
Persistence Service. Questo servizio mette a disposizione un insieme di strumenti<br />
per il salvataggio su memoria stabile dei dati che rappresentano lo stato di un<br />
oggetto. Questo stato può essere ad esempio reinstallato a seguito di un guasto che<br />
causa la morte dell‟oggetto.<br />
2.6.2 CORBA EVENT SERVICE<br />
La comunicazione CORBA attraverso l‟invocazione di richieste si basa su un paradigma<br />
client/server sincrono. In molte applicazioni questo potrebbe non essere sufficiente [37]. Il<br />
tipico esempio è la notifica asincrona di eventi: un produttore di eventi comunica l‟evento<br />
a uno o più consumatori. Realizzare questo meccanismo attraverso le richieste CORBA<br />
prevede la realizzazione di callback, cioè di chiamate inverse dal server al client, che<br />
dovrebbe essere quindi esso stesso un server. L‟Event Service OMG offre il supporto per<br />
questo tipo di comunicazione tra gli oggetti, permettendo ad un produttore di notificare<br />
eventi a uno o più consumatori inviando ad essi dei messaggi. Il modello dell‟Event<br />
48
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Service prevede che produttori e consumatori di eventi si connettano ad un event channel<br />
comune. I consumatori non devono essere a conoscenza dei produttori e viceversa, perché<br />
è l‟event channel il responsabile della consegna dei messaggi a tutti i consumatori<br />
interessati. Nell‟Event Service sono previste due modalità di invio degli eventi: push e<br />
pull. Nel modello push, i produttori inviano gli eventi ai consumatori, mentre nel pull sono<br />
i consumatori a richiedere gli eventi ai produttori. Gli event channel permettono di<br />
connettere più produttori e più consumatori, ognuno dei quali può usare un modello<br />
diverso [37].<br />
Figura 2.8 Modalità di invio degli eventi: push e pull<br />
Le interfacce per l‟interazione con gli event channel sono definite nel modulo<br />
CosEventComm. Tutte le interfacce si basano sulla distinzione tra produttore e<br />
consumatore: l‟event channel stesso è sia un produttore che un consumatore. Queste<br />
interfacce sono chiamate proxy perché sono una rappresentazione di tutti gli effettivi<br />
produttori o consumatori. In altre parole, danno l‟illusione ad un produttore di interagire<br />
con il vero consumatore e viceversa.<br />
49
2.6.3 CORBA NOTIFICATION SERVICE<br />
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Il notification service è uno standard OMG che permette a fornitori di eventi multipli di<br />
inviare questi per i vari consumers. Il notification service può essere utilizzato in una vasta<br />
gamma di scenari, come il meccanismo di integrazione per le apparecchiature di<br />
telecomunicazione, all'interno di reti di grandi dimensioni sul router di backbone Internet,<br />
sui portali di e-commerce per grandi banche, sull'infrastruttura di messaggistica per<br />
collegare i satelliti e le loro stazioni di terra [38].<br />
In Corba notification service i producers sono disaccopiati dai consumers per mezzo di un<br />
canale, che si occupa della registrazione e de-registrazione del client, e la diffusione degli<br />
eventi per più consumers. Il canale ospita anche i consumers lenti o non disponibili.<br />
Il Notification Service supporta sia il modello push che pull, e l'architettura consente<br />
l'invio degli eventi e l'uso di intermediari. L' event service si può estendere con un servizio<br />
di filtraggio degli eventi e di qualità del servizio (QoS). Alcune delle più importanti<br />
caratteristiche QoS includono:<br />
Gli eventi e le connessioni persistenti a sostegno di una garanzia di consegna.<br />
La gestione delle code con politiche di ordimento e scarto di eventi.<br />
Ritardare l'inizio e la fine di un evento con un meccanismo di time out.<br />
Il Notification Service supporta anche il concetto di un event strutturati, che si qualifica<br />
come un messaggio "corretto" in termini di sistemi di message middleware. Le interfacce<br />
principali del Notification Service sono rappresentate nella figura 2.9, che mostra anche<br />
che il Notification Service supporta un dato strutturato, e tipi di client per l'invio e la<br />
ricezione di eventi in sequenza.<br />
50
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Figura 2.9 Le interfacce principali il servizio di notifica<br />
Una delle caratteristiche più importanti di architettura del Notification Service è che<br />
supporta la federazione dei canali senza l'uso di intermediarii per trasmette gli eventi da un<br />
canale all'altro, un fornitore proxy può essere collegato direttamente ad un consumatore<br />
proxy. Questa caratteristica implica che il routing con il Notification Service può essere<br />
raggiunto molto facilmente per una migliore affidabilità, scalabilità e prestazioni. Dal<br />
momento che il Notification Service è basato sull'architettura CORBA, supporta anche<br />
l'integrazione con le applicazioni scritte con diversi linguaggi di programmazione.<br />
2.6.4 CORBA TAO<br />
Corba TAO introduce dei patterns per il delivery di applicazioni distribuite con alte<br />
prestazioni in merito al real-time QoS. E' proprio nei sistemi real-time e nelle applicazioni<br />
mission-critical, che richiedono tempi di sincronizzazione prevedibili e robustezza, che<br />
TAO fornisce i maggiori benefici. Gli ostacoli in cui ci si imbatte nella realizzazione di<br />
sistemi real-time utilizzando CORBA, sono i vari livelli di cui esso è formato, non<br />
gestibili completamente. TAO invece integra le interfacce di rete, il sottosistema di I/O del<br />
sistema operativo ed i servizi middleware per fornire una soluzione end-to-end. Si<br />
consideri ad esempio l'Event Service di CORBA. Questo servizio semplifica le<br />
51
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
applicazioni software disaccoppiando producers e consumers garantendo la possibilità di<br />
una comunicazione di gruppo grazie ad un sistema asincrono di event delivery. TAO<br />
migliora l'Event Service di CORBA inserendo caratteristiche importanti, quali il<br />
dispatching e lo scheduling real-time degli eventi, il loro processamento periodico e il loro<br />
filtering ed un protocollo multicast necessario per le applicazioni real-time [34] [35].<br />
Le modifiche rispetto alle normali versioni di CORBA sono:<br />
Threading: sia a singolo thread, sia controllate dall'ORB;<br />
Lifespan: specifica quali objects sono transienti e quali persistenti;<br />
ObjectId Uniqueness: specifica se una o più entità sono implementate;<br />
Servant Retention: specifica se le associazioni tra servant e CORBA object<br />
sonomantenute oppure stabilite ad ogni richiesta;<br />
Request Processing: specifica come le richieste devono essere processate dal POA;<br />
Implicit activation: utilizzando questo servizio si può registrare un servant e creare<br />
un object reference in una singola operazione.<br />
Oltre ai servizi OMG CORBA services e alle caratteristiche peculiari di CORBA TAO<br />
introduce altre caratteristiche:<br />
CORBA Messaging: Asynchronous Method Invocation (callback), ed un<br />
Framework per la gestione del QoS;<br />
52
Figura 2.10 Architettura TAO<br />
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Portable Interceptors: ovvero oggetti che l'ORB invoca in un determinato punto<br />
durante il request ed il reply (request interceptor), o durante la generazione dello<br />
IOR (IOR interceptors);<br />
Interface Repository: che provvede allo storage, alla distribuzione ed alla gestione<br />
di un insieme di interfacce di object correlati;<br />
Implementation Repository: che consente il binding indiretto tra le richieste del<br />
client e le implementazioni del server per soddisfare tali richieste. In alternativa,<br />
prevede l'avvio automatico del server quando un client effettua una invocazione;<br />
Bi-Directional GIOP: che consente alle richieste e alle risposte di viaggiare bi-<br />
direzionalmente attraverso una singola connessione tra due processi, che sono<br />
l'invio e la ricezione delle domande e delle risposte. Questa capacità aiuta a<br />
risolvere il problema di invocare callbacks sui clienti situati dietro un firewall.<br />
53
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Object by Value: che parzialmente attua la CORBA OBV, che combina la<br />
semantica delle strutture e delle interfacce, consentendo in tal modo agli oggetti di<br />
essere passati per valore (cioè copiati) attraverso interfacce IDL fintanto che<br />
l'implementazione esiste a livello locale sul lato di ricezione.<br />
Object Reference Template (ORT): TAO implementa l'Object Reference<br />
Template (ORT) definito in CORBA 3.0 Core per l'implementazione di un<br />
interfaccia per la generazione di un object reference da parte di un object adapters.<br />
TAO, inoltre, è conforme a Real-Time CORBA versione 1.1 e offre i seguenti servizi che<br />
consentono di apprezzare le capacità di TAO in vari ambienti real-time deterministici o<br />
statistici:<br />
TAO Real-Time Event Service: aumenta le funzionalità fornite da CORBA Event<br />
Service standard fornendo l'event correlations ed il real-time dispatching;<br />
Pluggable Protocols: permette agli sviluppatori di inserire un modello<br />
personalizzato di trasporto sotto GIOP senza modificare l'applicazione a livello di<br />
codice.<br />
2.7 JMS – Java Message Service<br />
Java Message Service o JMS è un insieme di API che consentono lo scambio di messaggi<br />
tra applicazoni Java distribuite nella rete. In sostanza JMS fornisce un metodo standard<br />
tramite il quale le applicazioni possono creare, inviare e ricevere i messaggi usando un<br />
message oriented middleware [44]. Un sistema architettato con JMS è costituito dai<br />
seguenti elementi [45]:<br />
Client JMS: programma in linguaggio Java che invia o riceve messaggi JMS.<br />
Messaggio: raggruppamento di dati che viene inviato da un client a un altro.<br />
JMS Provider: sistema di messaggistica che implementa la specifica JMS e realizza<br />
funzionalità aggiuntive per l‟amministrazione e il controllo della comunicazione<br />
attraverso messaggi.<br />
54
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Administered objects: sono oggetti preconfigurati da un amministratore ad uso dei<br />
client. Incapsulano la logica specifica del JMS provider nascondendola ai client,<br />
garantendo maggiore portabilita al sistema complessivo.<br />
ConnectionFactory : è un administered object utilizzato da un client per realizzare<br />
la connessione con il provider.<br />
Destination (queue/topic): è un administered object che svolge il ruolo di<br />
“deposito” in cui i mittenti possono lasciare i messaggi che creano, e da cui i<br />
destinatari possono recuperare i messaggi. Le destinazioni possono essere usate<br />
contemporaneamente da più mittenti e da più destinatari. A seconda del tipo di<br />
destinazione usato (queue o topic), la consegna dei messaggi avviene secondo<br />
modalità diverse (point to point o publish/subscribe).<br />
Figura 2.11 Architettura JMS<br />
Le applicazioni JMS hanno qualità intrinseche che sono sintetizzabili in:<br />
Asincronicità della comunicazione: il provider JMS consegna i messaggi al client<br />
appena quest‟ultimo si è reso disponibile. Il provider li consegna senza che il<br />
receiver abbia effettuato una richiesta specifica.<br />
55
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Affidabilità della comunicazione: JMS può assicurare che un messagio sia<br />
consegnato una ed una sola volta.<br />
Disaccopiamento spaziale: grazie all‟uso del sistema di naming di Java (JNDI)<br />
non è necessario avere un riferimento diretto ad oggetti remoti, ma ci si affiderà alla<br />
presenza degli administered object: la creazione di connection factory e destination<br />
è compito dell‟ amministratore JMS che deve inserirli all‟interno di un contesto<br />
JNDI in un opportuno namespace in modo che possano essere recuperati da<br />
qualsiasi client mediante le API JNDI<br />
Quality of Service configurabile: le API JMS prevedono differenti livelli<br />
diaffidabilità per considerare molteplici scenari applicativi.<br />
Robustezza ai cambiamenti: sono presenti tipologie differenti di messaggi e<br />
features personalizzabili.<br />
JMS fornisce un approccio semplificato e comune ai client Java per accedere ai message-<br />
oriented middleware. Con l'introduzione del Message-Driven Beans (MDB), JMS è<br />
diventato ancora più strettamente integrato in J2EE. Questa integrazione fornisce un<br />
metodo asincrono all‟Enterprise Java Beans (EJB) per comunicare con gli altri elementi in<br />
una architettura distribuita. JMS è stato progettato come un'astrazione degli esistenti<br />
prodotti di messaggistica. Questa astrazione ha portato anche le seguenti<br />
caratteristiche[46]:<br />
JMS è puramente una interfaccia. Per il trasporto e il routing dei messaggi è<br />
necessario una qualche forma di motore di messaggistica. JMS non specifica nulla<br />
ne sul motore, ne sulla sua architettura, o sul trasporto<br />
Le specifiche JMS non facilita l'interoperabilità tra le diverse implementazioni. Se<br />
la specifica non si occupa di un protocollo di trasporto non ci sarà mai<br />
l'interoperabilità.<br />
Rispetto ai prodotti proprietari MOM, JMS ha un insieme relativamente semplice<br />
dei formati dei messaggi, ne esistono solo sei tipi.<br />
56
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
JMS supporta un modello punto-punto (o coda) e un modello publish/subscribe, e definisce<br />
una serie di tipi di messaggi che i publisher ed i subscribers possono scambiarsi. Le<br />
proprietà di un messaggio definiscono il modo in cui dovrebbero essere trattati con il<br />
sistema di messaggistica. I subscribers possono filtrare i messaggi utilizzando una<br />
grammatica SQL. I Client possono essere transient o durable, e messaggi possono essere<br />
inviati o ricevuti nel contesto di una transazione. La Figura 2.12 mostra le principali<br />
nozioni di JMS. Anche se il modello di comunicazione publish/subscribe ed il modello<br />
point-to-point sono molto diversi da un punto di vista concettuale, gli autori di JMS si<br />
resero conto che i modelli hanno molto in comune. JMS è quindi centrata su un modello<br />
generico di messaggistica, ed il modello publish/subscribe e point-to-point sono derivate<br />
nel senso di ereditarietà di interfaccia dal modello generico [38].<br />
Figura 2.12 Il modello di programmazione Java Message Service.<br />
Le caselle nella Figura 2.12 rappresentano l'interfaccia con il point-to-point sulla sinistra e<br />
l'interfaccia publish/subscribe a destra. Le frecce che conducono da cima a fondo nella<br />
figura rappresentano le fasi tipiche che uno sviluppatore JMS esegue per lo sviluppo di<br />
applicazioni client:<br />
57
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Risolvere una factory di connessione e una destinazione da JNDI. Una destinazione<br />
è una coda o un topic.<br />
Creare una connessione utilizzando la factory di connessione.<br />
Creare una sessione con le proprietà desiderate dalla connessione.<br />
Se l'applicazione è un fornitore, creare un MessageProducer se la domanda è<br />
un consumatore, creare un MessageConsumer dalla sessione.<br />
Iniziare a inviare o ricevere messaggi utilizzando il produttore o l'oggetto di<br />
consumo. Il produttore utilizzerà la sessione per creare diversi tipi di messaggi.<br />
JMS supporta sei diversi tipi di messaggi, che vengono utilizzati per effettuare i diversi tipi<br />
di carico utile. L'intestazione di un messaggio è lo stesso indipendentemente dal carico, il<br />
che significa che il filtraggio è la stessa per tutti e sei i tipi di messaggi. Un messaggio<br />
supporta una serie di proprietà per impostare la priorità, l'affidabilità e altre proprietà di<br />
QoS, che sarà interpretato e gestito dal server JMS. Al fine di supportare correttamente i<br />
messaggi durevoli, JMS utilizza la nozione di un subscriber durevole. Ciò è necessario<br />
soltanto nel modello publish/subscribe, i messaggi memorizzati in una coda saranno<br />
consumati da qualsiasi ricevitore che si connette alla coda in questione. Il subscriber<br />
durevole è identificato da un nome, e la stessa operazione è convenientemente utilizzata<br />
per la creazione e ri-creare il subscriber. Oltre alle interfacce illustrate nella figura 2.12,<br />
JMS supporta una serie di interfacce per il recapito di messaggi di natura commerciale e di<br />
consumo. La factory di connessione, la connessione, e le interfacce di ogni sessione hanno<br />
un interfaccia con il prefisso XA, che supporta il Java Transaction API (JTA) per le<br />
transazioni distribuite. Questo è in genere supportata quando JMS è integrata in un<br />
application server. La specifica JMS definisce cinque diversi messaggi che derivano tutte<br />
le funzionalità comuni dall'interfaccia base del messaggio. I messaggi JMS sono<br />
concettualmente trasmessi utilizzando il servizio di notifica, come illustrato nella Figura<br />
2.13 [38]. Poiché JMS non definisce un protocollo di rete, un qualche tipo di mappatura<br />
del messaggio è necessario.<br />
58
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Figura 2.13 Un client-library trasforma messaggi JMS da e per eventi strutturati.<br />
JMS supporta due modi di ricevere gli eventi: un modello pull o un modello push. Nel<br />
modello pull, un client JMS richiama un metodo per il consumatore del messaggio al fine<br />
di ricevere un evento. Nel modello push, i registri dei consumatori richiamano un oggetto<br />
con il consumatore o di sessione ed i messaggi vengono ricevuti in modo asincrono dalle<br />
invocazioni del metodo onMessage nell'interfaccia di callback. Entrambi i modelli per<br />
la ricezione di eventi hanno una mappa per il servizio di notifica dei modelli push e pull.<br />
Non è possibile, tuttavia, per un consumatore del servizio di notifica essere sia un<br />
consumatore push che un consumatore pull, pertanto, il servizio di notifica dovrà essere<br />
esteso per supportare una nuova consegna. Il messaggio di interfaccia è un messaggio di<br />
base per tutti i messaggi JMS. Dal momento che tutti i messaggi JMS sono interfacce, la<br />
responsabilità è dei fornitori delle librerie JMS client fornire implementazioni dei<br />
messaggi. Un messaggio JMS è costituito da una intestazione, un insieme di proprietà e di<br />
un corpo. La parte del corpo è diverso per ciascuno dei cinque diversi tipi di messaggi<br />
JMS. L'intestazione e le proprietà sono le stesse per tutti i tipi di messaggi. JMS consente<br />
solo ai clienti di filtrare le proprietà del messaggio. Per garantire che solo le intestazioni<br />
dei messaggi possono essere filtrati, queste informazioni devono essere confezionati<br />
59
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
all'interno di un corpo filtrabile di un evento strutturato. Questa è l'unica informazione dai<br />
messaggi JMS che diventa parte filtrabile del corpo. Il messaggio di interfaccia supporta<br />
tre attributi che hanno un significato ben definito nel servizio di notifica:<br />
DeliveryMode: Abbiamo due modalità di consegna PERSISTENT e<br />
NON_PERSISTENT in base alla modalità di consegna nella variabile di intestazione<br />
possiamo trovare il valore Persistent oppure BestEffort<br />
Expiration: La scadenza JMS in millisecondi si trova nel QoS Timeout nella<br />
variabile di intestazione di eventi strutturati. I messaggi scaduti non sono visibili ai<br />
clienti.<br />
Priority: La priorità del messaggio si associa al notification Priority QoS nella<br />
variabile di intestazione di eventi strutturati. La modalità di consegna con priorità<br />
viene utilizzata per garantire che i messaggi con priorità più alta vengono consegnati<br />
prima di messaggi con priorità più bassa.<br />
2.7.1 Apache ActiveMQ - CPP<br />
CMS, acronimo di C++ Messaging Service è un JMS API per C++ per l'interfacciamento<br />
con i broker del tipo Apache ActiveMQ. ActiveMQ - CPP è un client, ed un message<br />
broker come Apache ActiveMQ è necessario per far comunicare i vari client [47].<br />
ActiveMQ-CPP ha un'architettura che consente diversi protocolli di connessione per<br />
formati diversi di trasporto. ActiveMQ-CPP fornisce anche una serie di classi per il<br />
threading, per le operazioni di I/O [48].<br />
60
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Figura 2.14 Schema dei protocolli di Apache ActiveMQ – CPP<br />
ActiveMQ supporta i messaggi di consulenza che permette di vedere il sistema che<br />
utilizza regolarmente i messaggi CMS. Con i messaggi di consulenza si possono fare le<br />
seguenti operazioni:<br />
Vedere i consumatori, i produttori e le connessioni di partenza e arresto<br />
Vedere le destinazioni temporanee create e distrutte<br />
Ottenere una notifica dei messaggi che scadono, gli argomenti e le code<br />
Osservare il broker durante l'invio dei messaggi alle destinazioni senza i<br />
consumatori<br />
Vedere le connessioni di partenza e l'arresto<br />
I messaggi di consulenza possono essere pensati come una sorta di canali di<br />
amministrazione, dove si ricevono le informazioni su quanto sta accadendo sul provider<br />
JMS con quello che sta succedendo con i produttori, i consumatori e le destinazioni.<br />
Se da un lato JMS offre la possibilità di specificare l‟esatta Quality of Service di ogni<br />
scambio di messaggi in termini di guaranted delivery e di consegna tramite semantica<br />
once-and-only-once, ActiveMQ mette a disposizione altre funzionalità per ottenere<br />
affidabilità del sistema, high availability e tolleranza ai guasti. ActiveMQ è un message<br />
61
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
broker. Un broker è la parte di una soluzione JMS lato server che si occupa di routing,<br />
recovery, persistenza e cosi‟ via. Per quanto riguarda la persistenza, come detto<br />
precedentemente il provider JMS memorizza i messaggi su un persistent storage se il<br />
delivery mode è stato settato a persistent, di modo che sopravvivano a un riavvio del<br />
broker. Inoltre per sopperire alla mancanza del servizio e permetterne la successiva<br />
riattivazione, il provider JMS memorizza anche le durable subscriptions: se così non fosse<br />
il message server, in caso di fallimento, non sarebbe capace di consegnare i messaggi ai<br />
durable subscribers stessi. Per effettuare le operazioni di recovery il provider JMS:<br />
ricrea le destinazioni<br />
recupera la lista di “durable subscriptions” per ogni topic<br />
recupera la lista dei messaggi<br />
recupera la lista di acknowledge per ogni messaggio<br />
È possibile configurare ActiveMQ perché gestisca la persistenza tramite file (AMQ<br />
message store) o tramite database esterno al provider JMS. È stata scelta quest'ultima<br />
opzione perché ha come vantaggio un più facile recupero e interpretazione dei dati<br />
rispetto al caso in cui si utilizzi l‟ AMQ message store, un sistema di gestione della<br />
persistenza basato su file utilizzato di default da ActiveMQ. Le operazioni di accesso e<br />
scrittura su un DB sono sicuramente più pesanti dal punto di vista computazionale, ma<br />
questo approccio è sensato perché la nostra applicazione non ha requisiti particolari di<br />
high performance. All‟avvio il broker creerà automaticamente due tabelle,<br />
ACTIVEMQ_ACKS e ACTIVEMQ_MSGS: la prima tabella mantiene in memoria<br />
informazioni relative ai subscribers e informazioni relative ai messaggi acknowledged, la<br />
seconda contiene al suo interno informazioni relative ai messaggi [48].<br />
2.8 AMQP<br />
Advanced Message Queuing Protocol (AMQP) permette la piena interoperabilità<br />
funzionale tra client e messaging middleware server. L‟obiettivo è di consentire lo<br />
sviluppo e l'uso di una tecnologia standardizzata per middleware di messaggistica. Il fine<br />
62
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
ultimo è che attraverso AMQP, le capacità dei middleware di messaggistica possano essere<br />
portati nella rete stessa, e che attraverso la pervasività della disponibilità di middleware di<br />
messaggistica, possano essere sviluppati nuovi tipi di applicazioni di utilità [53].<br />
Per consentire l'interoperabilità completa, il middleware di messaggistica richiede che sia il<br />
protocollo di rete e sia la semantica dei servizi del broker siano sufficientemente<br />
specificati. AMQP, pertanto, definisce sia il protocollo di rete sia i servizi del broker<br />
attraverso:<br />
1. "Advanced Message Queuing Protocol Model" (AMQP Model), l„AMQP Model<br />
consiste in un insieme di componenti che instradano e memorizzano messaggi<br />
all‟interno del broker e in più un insieme di regole per collegare questi componenti<br />
insieme.<br />
2. Un protocollo di rete wire-level, AMQP permette ai client di comunicare con il<br />
broker e interagire con l‟AMQP Model che esso implementa.<br />
AMQP è un protocollo di tipo binario con caratteristiche quali: multi-canale, asincrono,<br />
portabile, neutrale, sicuro ed efficiente.AMQP è usualmente diviso in tre layer:<br />
Figura 2.15 Struttura a layer di AMQP<br />
63
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Il layer “Model” offre un insieme di comandi incapsulati in classi e funzionalità che fanno<br />
lavoro utile su richiesta dell„applicazione.<br />
Il layer “Session” offre trasporto affidabile di comandi dall‟applicazione al server e<br />
all‟indietro, sincronizzazione e gestione degli errori.<br />
Il layer “Transport” offre framing, codifica dei dati, rilevamento dei fallimenti e canne<br />
multiplexing [51].<br />
2.8.1 AMQP Model Layer<br />
L‟AMQP Model specifica un insieme modulare di componenti e di regole per connettere<br />
questi componenti tra di loro. Ci sono tre principali tipi di componenti, che sono collegati<br />
in catene di processi all‟interno del server per creare la funzionalità desiderata [51]:<br />
“Exchange” riceve i messaggi dall‟applicazione publisher e instrada questi verso<br />
una coda di messaggi basata su un criterio arbitrario, usualmente proprietà del<br />
messaggio o contenuti.<br />
“Message queue” che memorizza i messaggi finchè essi non possono essere<br />
finalmente processati dall‟applicazione che li consuma o da applicazioni multiple.<br />
“Binding” definisce la relazione tra l‟Exchange e la coda e offre i criteri di routing.<br />
Usando questo modello possiamo emulare i concetti classici di middleware di code “store<br />
and forward” o a sottoscrizione per argomento (topic). In linea di principio, un server<br />
AMQP è analogo a un server di posta elettronica, con ogni Exchange che agisce da agente<br />
di trasferimento messaggi e ogni coda come una mailbox, mentre il binding definisce le<br />
tabelle di routing in ogni agente di trasferimento. I Publisher spediscono messaggi ad un<br />
singolo agente di trasferimento il quale poi instrada i messaggi in una mailbox. I<br />
consumatori infine prendono i messaggi dalle mailbox [54].<br />
Il diagramma che segue mostra la semantica del server che deve essere standardizzata con<br />
l‟intento di garantire la interoperabilità tra le implementazioni AMQP [51]:<br />
64
Figura 2.16 Semantica AMQP.<br />
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Un middleware server è un server di dati che accetta messaggi e fa due cose significative<br />
con questi:<br />
Li instrada verso differenti consumatori in dipendenza di criteri arbitrari.<br />
Li mette in buffer in memoria o su disco quando i consumatori non sono abili ad<br />
accettarli abbastanza velocemente.<br />
Il modello AMQP divide i compiti sopra citati in due distinti ruoli:<br />
L‟EXCHANGE che accetta i messaggi dai produttori e li instrada verso code di<br />
messaggi.<br />
La MESSAGE QUEUE che immagazzina i messaggi e li inoltra ai consumatori.<br />
C‟è inoltre un' interfaccia tra Exchange e Message Queue chiamata “BINDING”.<br />
2.8.2 Il Layer Session<br />
Il layer Session offre tutte le funzionalità necessarie all‟interno della sessione. Le sessioni<br />
sono interazioni nominate tra peer AMQP. Dal punto di vista strutturale, una sessione è<br />
l‟interfaccia tra il protocollo di rete e il layer dell‟AMQP model; essa costituisce un<br />
65
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
ambito di esistenza per le entità del modello quali, code, Exchange e sottoscrizioni e per<br />
l‟identificazione dei comandi [51].<br />
Le sessioni non sono esplicitamente create o distrutte. Piuttosto che creare una sessione,<br />
un peer deve attendere per “attaccarsi” ad una sessione del suo partner. Il ricevitore di<br />
questa “richiesta di “attacco” può poi cercare di mantenere lo stato per questa sessione. Lo<br />
stato relativo ad una sessione deve essere conservato da entrambi i peer, mentre essi sono<br />
“attaccati”; la sessione può essere interrotta o attraverso un‟esplicita richiesta e tramite<br />
un‟interruzione di connessione di rete tra i peer, ma in ogni caso lo stato della sessione<br />
può essere mantenuto per un determinato periodo di tempo che è stato concordato tra i<br />
peer prima. La sessione può essere definita attraverso più punti di vista:<br />
La Sessione come un mezzo di trasporto per i comandi: Il modello AMQP<br />
interagisce attraverso l‟invio di comandi tra due peer. Questi comandi sono spediti<br />
“sulla” sessione. Appena un comando è tramandato dal layer model alla sessione, a<br />
esso è assegnato un identificatore. Questi identificatori possono poi essere usati per<br />
correlare i comandi con i risultati.<br />
La sessione come layer di interfaccia: La Sessione agisce come un‟interfaccia tra il<br />
protocollo di rete e lo strato riferito al modello AMQP. Lo stato della sessione<br />
consiste in: un buffer di comandi di cui un peer non ha ancora avuto conferma che<br />
il suo partner ha ricevuto e un insieme di identificatori che il peer sa che ha<br />
ricevuto ma non può essere sicuro che il suo partner non aspetterà il re-invio.<br />
Il layer Sessione offre una serie di servizi cruciali al modello costruito sopra di esso:<br />
Identificazione sequenziale dei comandi:Ogni comando pubblicato da un peer<br />
deve essere necessariamente identificato all‟interno della sessione affinchè il<br />
sistema nella sua totalità sia capace di garantire l‟esecuzione esattamente una volta.<br />
Lo strato session a tal fine usa una numerazione sequenziale che permette la<br />
correlazione tra comandi e risultati ritornati asincronamente; l‟identificatore è reso<br />
visibile attraverso il layer model e quando un risultato è ritornato da un comando,<br />
esso è usato per correlare il comando che gli ha dato vita.<br />
66
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Conferme che i comandi saranno eseguiti: Affinchè un peer abbia la capacità di<br />
scartare lo stato in relazione ad un comando, esso deve avere la garanzia che il<br />
comando sia stato eseguito, o che la sua consegna è stata conservata per un tempo<br />
deciso a priori. In pratica ci sono due tipi di messaggi che si può desiderare di<br />
inviare attraverso un sistema di messaggistica: Messaggi durevoli e messaggi<br />
transitori. Per un messaggio transitorio, il contratto generale tra applicazione e<br />
sistema di messaggistica e che i messaggi possono essere persi se il sistema di<br />
messaggistica stesso perde stati transitori. Per un messaggio durevole, invece, il<br />
sistema deve dare la garanzia che il messaggio sarà conservato nella memoria più<br />
durevole disponibile. Il layer session gestisce l‟invio e la ricezione delle conferme;<br />
questo permette di tenere sotto controllo gli stati in caso di fallimenti.<br />
Re-invii e Recuperi: Il layer session offre i tools necessari per identificare i<br />
comandi che sono “in dubbio” o “sospesi” per un fallimento e di replicarli per<br />
ridurre il rischio di un‟accidentale consegna duplicata.<br />
Il layer Session opera sopra la sottostante infrastruttura di rete. Session richiede che il layer<br />
sottostante offra le seguenti funzionalità:<br />
Consegna ordinata, cioè nessun sorpasso tra pacchetti.<br />
Trasmissioni atomiche di unità di controllo e dati.<br />
Rilevamento dei fallimenti della rete.<br />
2.8.3 Il layer di trasporto (Transport layer)<br />
Questo è il layer più basso che si occupa di preparare i messaggi ad essere trasmessi sulla<br />
rete. Il numero di port standard di AMQP è stato assegnato da IANA ed è 5672 per TCP,<br />
UDP e SCTP. Prima di inviare un qualunque frame su una connessione, ogni peer deve<br />
iniziare mandando un header di protocollo che indichi la versione del protocollo usata<br />
sulla connessione. Tale header è costituito da una sequenza di 8-ottetti come mostrato in<br />
figura [51]:<br />
67
Figura 2.17 Header.<br />
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
L‟header protocol è composto dalle lettere maiuscole “AMQP” seguite da:<br />
La classe del protocollo, che è uno per tutti i protocolli AMQP.<br />
L’istanza del protocollo, che è: AMQP over TCP/IP con valore uno e AMQP over<br />
SCTP/IP con valore due.<br />
La maggiore versione del protocollo.<br />
La minore versione del protocollo.<br />
Il modello di negoziazione del protocollo è compatibile con i protocolli esistenti come http<br />
che inizializza una connessione con una stringa di testo costante ed è anche compatibile<br />
con i firewall che analizzano l‟inizio di un protocollo, per decidere quali regole applicare.<br />
In fase di negoziazione client e server AMQP si accordano per la versione di protocollo da<br />
usare.<br />
2.8.4 OpenAMQ<br />
OpenAMQ è un message middleware bastato sulle specifiche AMQP. OpenAMQ fornisce<br />
un framework su cui costruire applicazioni distribuite che comunicano utilizzando<br />
messaggi. Tali applicazioni distribuite sono a volte chiamati "loosely connected". In<br />
genere il flusso dei messaggi è asincrona, ciò significa che il flusso dei messaggi tra le<br />
parti avviene senza una logica complessiva di sincronizzazione o di controllo [55].<br />
OpenAMQ aggiunge ulteriori specifiche allo standard AMQP:<br />
1. Un API standard per le applicazioni, chiamato WireAPI.<br />
2. Un API standard per l'amministrazione remota, chiamata CML.<br />
3. Un modello standard per l'adesione broker insieme in federazione.<br />
68
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
AMQP ha caratteristiche utili che migliorano in alcuni casi message middleware come ad<br />
esempio JMS o Stomp queste caratteristiche posso essere così riassunte:<br />
AMQP a differenza di JMS è un wire-level protocol, come HTTP. Ciò significa che<br />
qualsiasi software che si preoccupa per l'attuazione del protocollo può parlare con<br />
un server AMQP.<br />
Funziona con diversi linguaggi di programmazione, i tipi di dati o costrutti non<br />
dipendono dal linguaggio specifico..<br />
Funziona su tutte le piattaforme, non dipende da Windows, Linux o qualsiasi altro<br />
sistema operativo specifico.<br />
Message routing: Implementa il modello di routing AMQP<br />
Implementa fanout, diretto, e cambio di intestazione dei tipi.<br />
Implementa lo scambio di default.<br />
Consente alle applicazioni di creare e gestire gli scambi in fase di runtime.<br />
Supporta temi gerarchica di qualsiasi complessità.<br />
Message Queuing: Implementa il modello della coda AMQP l'utente può definire code di<br />
messaggi flessibili<br />
Crea e gestisce il nome o le code senza nome.<br />
Messaggio di base il cui contenuto va dai zero byte fino a 4 GB.<br />
Code multiple per i readers con servizio round-robin.<br />
Messaggi asynchronous di publishing.<br />
Code condivise e code private ed esclusive<br />
Gestione delle risorse: Fornisce all'operatore il controllo sull'uso delle risorse di sistema<br />
Configurare i limiti sulle dimensioni della coda.<br />
Rallentamento automatico dei publishers quando vengono superati i limiti sulla<br />
dimensione della coda<br />
Clustering: Supporta il failover e la scalabilità grazie al clustering<br />
Creare coppie di server ad alta disponibilità.<br />
Connettere i server e le coppie di server in cluster.<br />
69
Fanout publish / subscribe tra vari server.<br />
Configurabile client-server<br />
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Sicurezza: Supporta le opzioni di sicurezza estensibile e configurabile<br />
Definizioni configurabile dall'utente.<br />
SASL authentication (PLAIN mechanism)<br />
Amministrazione: È facile da gestire tramite Secure Shell remota o la riga di comando<br />
Configurazione tramite file di configurazione XML o da riga di comando.<br />
Amministrazione remota e la configurazione (amq_shell).<br />
Interfaccia client WireAPI: Fornisce una API standard per lo sviluppo di applicazioni<br />
Il supporto per tutti i metodi definiti nella norma AMQP.<br />
Consegna del messaggio in modo asincrono.<br />
Segnalazione degli errori per le applicazioni.<br />
Il WireAPI OpenAMQ è stato progettato per fornire ai programmatori di applicazioni nei<br />
diversi linguaggi la stessa semantica. Ogni linguaggio di programmazione ha la propria<br />
sintassi, ma con una sola semantica, è molto facile per gli sviluppatori stessi cambiare<br />
linguaggio di programmazione e è più facile mantenere il codice in diverse lingue, e<br />
riutilizzare i designs fatti in un solo linguaggio, con ltri.Le WireAPI OpenAMQ seguono<br />
la semantica del protocollo AMQP utilizzando gli stessi nomi e parametri.<br />
WireAPI ha diversi vantaggi rispetto alle API standard di AMQP che possiamo<br />
riassumenre:<br />
Qualsiasi versione di AMQP viene implementata ha una semantica identica nelle<br />
WireAPI di OpenAMQ.<br />
La Semantica WireAPI è portabile in tutti i linguaggi di programmazioni.<br />
Gli aspetti negativi della WireAPI sono:<br />
Obbliga gli sviluppatori a comprendere il protocollo.<br />
Alcune astrazioni utili che sono implementate in AMQP mancano nelle WireAPI<br />
OpenAMQ.<br />
70
Affidabilità<br />
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Una differenza fondamentale tra OpenAMQ e altri prodotti AMQP è l'approccio alla<br />
affidabilità. Ogni messaggio deve essere parte di una transazione in modo che un eventuale<br />
fallimento può essere recuperato. L'affidabilità è centralizzato, il recapito dei messaggi è<br />
meticoloso, e il protocollo per la consegna affidabile è molto complesso. Quando abbiamo<br />
un mix di questo modello con un clustering per l'alta disponibilità (cioè di essere in grado<br />
di passare a un server di backup se si blocca il primo server) si ottiene in un territorio<br />
ancora più complessa. La complessità crea inaffidabilità e il rischio di incidenti e la perdita<br />
di dati aumenta. L'affidabilità centralizzata è incompatibile con il clustering dei mediatori,<br />
e va contro la moderna progettazione di rete. Consideriamo la rete AMQP idealmente<br />
costruita da apparati a basso costo. Questi possono essere organizzati in modo che un nodo<br />
può essere uno o due AMQP server. Questi nodi possono essere uniti insieme. Tali reti,<br />
essendo più semplice di classici messagge broker, risolvono parte del problema della<br />
reliabity. Per ottenere la piena affidabilità implementiamo un protocollo end-to-end nelle<br />
API per ottenere una maggiore affidabilità. Si noti però che le WireAPI non implementano<br />
ciò, questo è stato fatto dalle applicazioni AMQP piuttosto che da OpenAMQ. Il design è<br />
molto semplice. Costruire messaggistica affidabile come richiesta coppie di messaggio di<br />
risposta. Il mittente di una richiesta detiene la richiesta in memoria o sul disco, fino ad<br />
ottenere una risposta. Se non ottiene una risposta in tempi brevi, invia nuovamente la<br />
richiesta. L'altra estremità ignora le richieste di duplicato. In questo modello l'affidabilità è<br />
invisibile per il protocollo (che poi può essere più semplice e quindi migliore), e non ha<br />
bisogno di sostegno da parte del server (che può essere più semplice e più affidabile). E<br />
funziona con qualsiasi rete AMQP, non importa quanto grande o quanto molti server sono<br />
coinvolti.<br />
2.8.5 QPID<br />
Apache Qpid è un message middleware bastato sulle ultime specifiche AMQP fornendo la<br />
gestione delle transizioni, la coda dei messaggi, la distribuzione dei messaggi, la sicurezza,<br />
71
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
la gestione, il clustering, e multi-supporto di piattaforme eterogenee. Anche Qpid supporta<br />
diversi client API per linguaggi di programmazione differenti [56].<br />
Qpid permette lo scambio di messaggi Point-to-Point, Peer-to-Peer, Pub-Sub, ed Eventing.<br />
Point-to-point: AMQP consente di scambiare i messaggi in due modi:<br />
a.) Un client può creare una coda di chiamata che consente al produttore di pubblicare il<br />
messaggio per lo scambio diretto inserendo il nome della coda.<br />
b.) Si può specificare un indirizzo di risposta nei messaggi pubblicati in modo da<br />
consentire al consumatore di rispondere al produttore senza sapere da chi è stato<br />
inviato il messaggio prima di averlo ricevuto.<br />
One-to-many: ci sono alcuni modelli che possono essere utilizzati.<br />
a.) AMQP fornisce un 'fan-out' per l'exchange ed invierà un messaggio a tutte le code<br />
che sono legati ad essa. Domini differenti o argomenti vengono creati con 'fanout'<br />
di exchange diversi.<br />
b.) Si può anche utilizzare l'exchange di intestazioni in questo caso il pattern match<br />
viene utilizzato per inviare il messaggio a tutte le code vincolati. Esso può essere<br />
pensato come un filtro che consente di creare praticamente un modello di routing<br />
uno a molti.<br />
Pub-Sub: Un Topic può essere creato con il 'topic exchange' o il 'direct exchange' per<br />
consentire al consumatore di associare in flussi di dati quelli a cui sono interessati.<br />
FAST Reliable Messaging: Qpid consente trasferimenti affidabili tra due coetanei. Ciò<br />
significa che è possibile pubblicare o iscriversi al broker affidabile senza richiedere la<br />
necessità per le transazioni. Tutto questo può essere fatto in modalità asincrona con il C+ +<br />
Broker permettendo un throughput elevato durante l'esecuzione.<br />
Transient message delivery: i messaggi di default sono transient. Un messagio Transient<br />
può essere inviato a code che sono durevoli. Non saranno sicuri conservati o recuperati, e<br />
si esibirà come qualsiasi altro messaggio transitoria – fast.<br />
72
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Durable message delivery: C'è una intestazione di ogni messaggio in cui vengono<br />
specificate le proprietà del messaggio, uno di questi è la durata. Messaggi che vengono<br />
contrassegnati come durevoli e pubblicati in una coda lunga sarà sicuro memorizzato.<br />
Messaggio Durable sopravviverà il riavvio del broker o cluster.<br />
Federation (Hub-spoke, Trees, graphs): Come AMQP è simmetrica per le<br />
comunicazioni peer-to-peer tutti i building block sono in atto per la creazione di reti di<br />
intermediari. Il C+ + broker ti permette di collegare il broker insieme usando 'qpid-route' e<br />
quindi creare collegamenti tra i broker staticamente o con percorsi dinamici. Questo<br />
permette di avere un messaggio da pubblicare su un broker ed essere consumato da un altro<br />
broker nella rete federata di broker. Questa funzione è ideale per creare data-center, o<br />
isolare la rete consente<br />
2.9 Confronto delle soluzioni middleware<br />
Il crescente interesse in ambito commerciale per le applicazioni che permettono una<br />
distribuzione delle informazioni su sistemi distribuiti in LAN, in grado di fornire soluzioni<br />
scalabili per sistemi real-time ha portato alla creazione di diversi prodotti software.<br />
L‟unico modello di comunicazione in grado di essere scalabile è il modello<br />
Publish/Subscriber, per adattare tale modello alle applicazioni real-time è stato sviluppato<br />
un protocollo di comunicazione noto come RTPS (Real-Time Publish/Subscribe). Questo<br />
protocollo non è in grado di fornire una comunicazione che implementi molte qualità del<br />
servizio, è in grado di fornire un controllo sulle risorse utilizzate nella comunicazione, è<br />
tollerante ai fallimenti e permette di controllare il livello di affidabilità del protocollo<br />
implementato. Vista la difficoltà nel produrre software che implementi molte qualità del<br />
servizio offerto, l‟OMG (Object Management Group) ha deciso di creare uno standard in<br />
grado di garantire un modello di comunicazione di tipo Publish/Subscriber in cui lo<br />
scambio di informazione è di tipo Data-Centric con un‟insieme ampio di qualità del<br />
servizio supportate. Questo standard è stato adottato da molte aziende. L‟attuale interesse<br />
73
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
del mercato è capire se le soluzioni attualmente sviluppate sono adatte ad un ambiente<br />
distribuito. L‟obiettivo di questa <strong>tesi</strong> è stato lo studio e la valutazione di alcuni prodotti<br />
software: RTI DDS, OpenSpliceDDS, JMS Apache ActiveMQ - CPP, AMQP<br />
OPENAMQ, AMQP QPID, CORBA.<br />
RTI DDS ed OpenSpliceDDS seguono lo standard OMG nella specifica DDS, entrambi<br />
implementano le DCPS API, ma solo OpenSplice implementa la DLRL. RTI DDS e<br />
OpenSpliceDDS benché sviluppando lo stesso standard lo implementano in modi<br />
differenti. RTI DDS ha un architettura decentralizzata che gli conferisce il vantaggio di<br />
non aver bisogno di un demone per lo scambio di messaggi, facendo risultare così ogni<br />
applicazione autonoma. Uno svantaggio di questo middleware è che alcuni dettagli della<br />
configurazione come l‟indirizzo di multicast, il numero di porta, i parametri relativi ai<br />
differenti tipi di trasporto e il modello reliability devono essere definiti nel livello<br />
applicativo e, ciò comporta un sovraccarico del lavoro da parte dello sviluppatore e una<br />
maggiore probabilità di commettere errori. OpenSplice DDS utilizza invece un architettura<br />
federata in cui c‟è un processo demone distinto per ogni interfaccia di rete, una shared-<br />
memory per collegare le applicazioni, che risiedono in un nodo computazionale, ma anche<br />
gli hosts con un insieme di servizi configurabili ed estendibili; utilizzando un‟architettura<br />
di tipo shared-memory, i dati sono fisicamente presenti una sola volta su ogni macchina,<br />
usando un demone si disaccoppiano le applicazioni dai dettagli di comunicazione e di<br />
configurazione del DCPS. Inoltre, in caso di presenza di più partecipanti DDS sullo stesso<br />
nodo, la scalabilità risulta maggiore rispetto agli altri modelli di architettura, infatti è<br />
possibile semplificare la configurazione delle policy per un gruppo di partecipanti aventi la<br />
stessa interfaccia di rete. Uno svantaggio di quest‟architettura è sicuramente la presenza di<br />
un unico point of failure e la necessità di eseguire ulteriori configurazioni. JMS Apache<br />
ActiveMQ è un message middleware implementa lo standard Java Message Service 1.1.<br />
L‟architettura di JMS Apache ActiveMQ può essere sia di tipo centralizzato che di tipo<br />
federato. Secondo l‟architettura centralizzata usa un singolo demone operante su un nodo<br />
designato per la gestione delle informazioni necessarie per creare e gestire le connessioni<br />
74
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
tra i partecipanti in un dominio. I dati passano direttamente dai Publisher ai Subscriber,<br />
mentre è necessaria la comunicazione con il processo demone per il controllo e<br />
l‟inizializzazione delle attività. Il vantaggio di quest‟architettura sta nella semplicità<br />
dell‟implementazione e della configurazione poiché tutte le informazioni di controllo<br />
risiedono in un'unica locazione. Lo svantaggio è senza dubbio, la presenza di un solo<br />
demone che costituisce un unico point of failure. Seguendo invece l‟architettura federata,<br />
per la comunicazione tra i vari client CMS si ha bisogno di un message broker per lo<br />
scambio dei messaggi su rete. Il broker utilizzato è Apache ActiveMQ e per interfacciare i<br />
vari client CMS a quest‟ultimo serve un API C++, per il trasporto dei messaggi viene<br />
utilizzato un protocollo di connessione come Stomp, JMS Apache ActiveMQ garantisce la<br />
possibilità di specificare QoS per ogni messaggio scambiato tra i vari client. CORBA TAO<br />
si differenzia da JMS in quanto i pubblishers sono disaccoppiati dai subscribers per mezzo<br />
di un canale l‟event channel che si occupa della diffusione degli eventi per più consumers.<br />
Una caratteristica importante di questo middleware è che supporta la federazione dei canali<br />
senza l‟uso di intermediari per trasmettere gli eventi da un canale all‟altro. E‟ possibile<br />
specificare per lo scambio di messaggi delle Qos stringenti utili proprio per applicazioni<br />
real-time e mission-critical. OpenAMQ e QPID sono entrambi message middleware basate<br />
sulle specifiche AMQP. L‟architettura di entrambi i middleware può essere assimilata ad<br />
una di tipo federata per la presenza di un demone che mette in comunicazione i vari client<br />
per lo scambio dei messaggi, ne deriva che assimilano vantaggi e svantaggi di questa<br />
architettura. Entrambi i middleware implementano QoS per lo scambio di messaggi in<br />
modo da rendere robusta la comunicazione.<br />
75
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Nelle seguenti tabelle vengono riassunti gli aspetti salienti dei middleware esaminati:<br />
ARCHITETTUTRA<br />
CENTRALIZZATA DECENTRALIZZATA FEDERATA<br />
RTI DDS X<br />
OpenSpliceDDS X<br />
Apache ActiveMQ X X<br />
CORBA NS X X<br />
OPENAMQ X<br />
QPID X<br />
Tabella 2.2 Architettura<br />
76
VOLATILE<br />
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Quality of Service Policy<br />
DURABILITY DEADLINE OWNERSHIP RELIABILITY LIFESPAN HISTORY RESOURCE<br />
TRANSIENT<br />
LOCAL<br />
TRANSIENT<br />
PERSISTENT<br />
DURATION<br />
SHARED<br />
RTI DDS X X X X X X X X X X X<br />
OpenSplice<br />
DDS<br />
Apache<br />
ActiveMQ<br />
EXCLUSIVE<br />
RELIABLE<br />
BEST EFFORT<br />
DURATION<br />
KEEP_ALL<br />
KEEP_LAST<br />
- LIMITS<br />
X X X X X X X X X X<br />
X X X X X X X<br />
CORBA X X X X X X X X X<br />
OPEN AMQ X X X X X X X X X<br />
QPID X X X X X X X X X<br />
Tabella 2.3 Quality of Service Policy<br />
77
Capitolo 3 – Valutazione prestazionale<br />
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Nei capitoli precedenti abbiamo presentato i diversi middleware da noi utilizzati,<br />
rispettivamente RTI DDS, OpenSpliceDDS, Corba TAO, Apache ActiveMQ – CPP,<br />
OpenAMQ, Apache QPIDI. Abbiamo mostrato le loro caratteristiche generali ed illustrato<br />
le rispettive architetture di funzionamento. Lo scopo di questo capitolo è, invece,<br />
introdurre la metodologia e la tipologia dei test di funzionamento eseguiti sui middleware<br />
presi in esame. I risultati di tali test sono stati poi raccolti e utilizzati per effettuare una<br />
valutazione prestazionale delle varie soluzioni da cui si è ricavato un confronto che ha<br />
portato a conclusioni che saranno espresse in seguito.<br />
3.1 Sistema di Riferimento<br />
Per effetturare i test delle prestazioni abbiamo utilizzato i calcolatori del laboratorio CINI<br />
“CARLO SAVY”. Sugli host interessati per i test si è provveduto ad installare localmente i<br />
middleware che abbiamo esaminato in questo lavoro di <strong>tesi</strong>, in modo da avere una<br />
configurazione perfettamente omogenea non solo dal punto di vista hardware. Gli host<br />
hanno tutte la medesima configurazione ed hanno le seguenti specifiche tecniche:<br />
HOST: N. 2 CPU Xeon 2.8 Ghz con Hyperthreading per il sistema operativo sono<br />
visibili 4 CPU, 5 GB di memoria RAM, Disco fisso SCSI di 36 GB, N. 2 interfacce<br />
Gigabit Ethernet, N. 1 interfaccia Myrinet(2+2Gbit), Linux RedHat Enterprise con<br />
Kernel version 2.6.25.<br />
Gli host sono collegati tra loro mediante una rete Gigabit Ethernet, l'host server è collegato<br />
mediante un'interfaccia Gigabit Ethernet alla rete privata del CINI e quest'ultima mediante<br />
l'interfaccia GALILEO è collegata verso Internet permettendo così l'accesso da remoto agli<br />
host, secondo lo schema di figura 3.1:<br />
78
3.2 I Test<br />
Figura 3.1 Schema Cluster CINI utilizzato per i test.<br />
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Stabilire quali dovessero essere la grandezza o le grandezze da misurare per effettuare uno<br />
studio delle prestazioni del sistema, è stato il primo passo svolto nella fase di analisi delle<br />
attività da svolgere.<br />
A valle di tale fase, la scelta dell‟indice di prestazione è ricaduta sulla misura del tempo di<br />
RTT (Round Trip Time) impiegato dal sistema per l'invio e la ricezione di messaggi di<br />
dimensione diversa.<br />
In particolare si è provveduto alla creazione di un benchmark che ha il compito di calcolare<br />
il tempo di invio e ricezione dei messaggi scambiati tra Publisher e Subscriber. In<br />
79
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
particolare il benchmark memorizza sul Publisher due timestamp T1 T2, e sul Subscriber<br />
due timestamp T3 e T4 secondo la seguente metodologia:<br />
il Publisher invia un messaggio registriamo il tempo T1<br />
il Subscriber alla ricezione del messaggio del Publisher registra il tempo T3<br />
il Subscriber manda indietro il messaggio di risposta registra il tempo T4<br />
il Publisher alla ricezione del messaggio di risposta del Subscriber registra il<br />
tempo T2<br />
la latenza è data da T3-T1+T2-T4<br />
Nello schema di figura 3.2 viene schematizzato il funzionamento del benchmark appena<br />
descritto:<br />
Figura 3.2 Schema di Calcolo Latenza<br />
80
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
I tempi di inizio e fine che vengono rilevati durante i test sono memorizzati sia dal<br />
Publisher che dal Subscriber in file di testo differenti. Tali valori verranno poi elaborati con<br />
l‟ausilio di EXCEL per effettuare una rappresentazione grafica dei dati.<br />
Vengono di seguito riportati i frammenti di codice nei quali sono rilevati i tempi T1, T2,<br />
T3, T4.<br />
Sono state eseguite prove differenti con le seguenti caratteristiche:<br />
Test1: 1 Publisher 2 Subscriber: ciclo di scambio di messaggi di dimensione<br />
progressivamente crescente<br />
Test2: 1 Publisher 4 Subscriber: ciclo di scambio di messaggi di dimensione<br />
progressivamente crescente<br />
Test3: 1 Publisher 6 Subscriber: ciclo di scambio di messaggi di dimensione<br />
progressivamente crescente<br />
Tutti i test si riferiscono ad un numero di 1000 messaggi scambiati, i messaggi sono di<br />
dimensione crescente si parte da un minimo di 4B fino ad arrivare ad un massimo di 4096B<br />
con un incremento di 4B per volta, per l‟invio dei messaggi non abbiamo usato una<br />
particolare frequenza di invio, ma questa è stata conseguenza solo dell‟utilizzo e del livello<br />
di congestione della rete interna al CINI al momento dell‟esecuzione dei test.<br />
3.3 Parametri di confronto<br />
Il confronto tra le diverse soluzioni middleware publish/subscribe è stato condotto dal<br />
punto di vista prestazionale. I parametri che abbiamo ritenuto opportuno scegliere a tale<br />
scopo sono:<br />
MEDIANA<br />
DISTANZA INTERQUARTILE<br />
SCALABILITA‟<br />
La Mediana dei tempi, calcolata per ciascun test, ci da informazioni riguardanti le<br />
prestazioni in termini di tempo.<br />
81
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
La definizione stretta è: La mediana è il valore che occupa la posizione centrale quando le<br />
osservazioni di un campione sono ordinate in base al loro valore.<br />
La Distanza Interquartile, calcolata per ciascun test, ci da informazioni riguardanti la<br />
prevedibilità di consegna (prevedibilità, in termini di prevedibilità della distribuzione dei<br />
tempi). E‟ un indice di dispersione che ci permette di conoscere la tendenza delle singole<br />
osservazioni di una distribuzione ad allontanarsi dal valore centrale e quindi, è un indice<br />
della variabilità dei dati.<br />
La definizione stretta è: la differenza tra il terzo quartile (pari al 75% dei valori osservati) e<br />
il primo quartile (pari al 25% dei valori osservati). Infine, in termini di analisi prestazionale<br />
possiamo dire che: a distanza interquartile minore corrisponde maggiore prevedibilità di<br />
consegna.<br />
La Scalabilità è la capacità di un sistema di incrementare le proprie prestazioni, il proprio<br />
throughput nel caso di sistemi trasmissivi, se a tale sistema vengono fornite nuove risorse<br />
nel caso del software, maggiore potenza di processore o processori aggiuntivi, nel caso dei<br />
sistemi distribuiti aumentando il numero di client il sistema non deve perdere le proprie<br />
prestazioni. Dalla nostra analisi ricaviamo due curve di scalabilità, una è ottenuta mediante<br />
la differenza tra il tempo di RTT ottenuto con 4 Subscriber in esecuzione ed il tempo di<br />
RTT ottenuto con 2 Subscriber, l‟altra è ottenuta mediande la differenza tra il tempo di<br />
RTT ottenuto con 6 Subscriber ed il tempo di RTT ottenuto con 2 Subscirber.<br />
3.4 Test RTI - DDS<br />
L‟implementazione RTI DDS, da noi usata per fare i test, ha una architettura<br />
decentralizzata e di tipo simmetrico, come si nota dalla figura 3.3. Quest‟architettura pone<br />
la relativa capacità di comunicazione e la relativa capacità di configurazione all‟interno<br />
dello stesso processo utente. Queste capacità svolgono il loro compito in thread separati<br />
che poi la libreria del middleware DCPS usa per gestire comunicazioni e QoS.<br />
82
Figura 3.3 Architettura decentralizzata<br />
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Per testare il funzionamento di RTI DDS è stato prodotto un applicativo Publish/Subscribe<br />
costituito da due programmi:<br />
Un programma che implementa il comportamento del publisher<br />
Un programma che implementa il comportamento del subscriber<br />
Ogni volta che l‟applicazione publisher invia dei dati in un Topic il middleware li replica a<br />
tutti i Subscriber che hanno sottoscritto quel Topic. L‟applicazione nel lato Publisher non<br />
deve curarsi di quanti siano i subscriber e tanto meno dove siano; lo stesso discorso vale<br />
per il lato Subscriber, è lo stesso middleware RTI DDS a mantenere una lista di<br />
applicazioni interessate al Topic ed alcune informazioni sulla QoS per l‟invio dei dati.<br />
Ogni applicazione è autosufficiente, senza la necessità di un demone separato per la<br />
comunicazione ra i partecipanti così come si evince dalla figura 3.3. Quando un nuovo<br />
partecipante viene creato è lo stesso middleware che annuncia l'esistenza agli altri<br />
partecipanti del nuovo subscriber lanciando dei pacchetti sulla rete.<br />
Per ciascuno dei messaggi scambiati si e misurato il RTT e tali misurazioni sono state poi<br />
raccolte in un file EXCEL.<br />
83
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Nella seguente tabella vengono riportati i valori di mediana ottenuti per ognuno dei diversi<br />
test effettuati:<br />
RTI -DDS<br />
Dim. Messaggi Test1 Test2 Test3<br />
4<br />
202021<br />
240249,5 280665,5<br />
8<br />
202302,5<br />
241127 280966<br />
16<br />
203722<br />
244066 282158<br />
32<br />
207330,5<br />
246877 283911<br />
64<br />
212326<br />
253479 294539<br />
128<br />
220439,5<br />
263676 313639,5<br />
256<br />
237466<br />
280694 338933<br />
512<br />
254223<br />
300967 367708<br />
1024<br />
301462<br />
350700,5 427109,5<br />
2048<br />
378459<br />
447118 534575,5<br />
4096<br />
505204<br />
600083 721783<br />
Tabella 3.1 Valori della mediana RTI - DDS<br />
84
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Nella seguente tabella vengono riportati i valori della distanza interquartile ottenuti per<br />
ognuna delle tipologie di test effettuati:<br />
RTI -DDS<br />
Dim. Messaggi Test1 Test2 Test3<br />
4 267 43,5 253,5<br />
8 83 1236 196<br />
16 300 442 460<br />
32 1063 568,5 2318,75<br />
64 1908 4145 8073<br />
128 7402,75 10061,25 12393,25<br />
256 7566 8598 11506<br />
512 12128 16507 22165<br />
1024 24735,75 31124,25 31529,5<br />
2048 47428,25 63431 85382,5<br />
4096 76328,75 85961 94572<br />
Tabella 3.2 Valori della distanza interquartile RTI - DDS<br />
85
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Nella seguente tabella vengono riportati i valori della mediana di scalabilità.<br />
RTI -DDS<br />
Dim. Messaggi 2 Sub – 4 Sub 2 Sub – 6 Sub<br />
4 38228,5 78644,5<br />
8 39048 78677<br />
16 40227 78081<br />
32 39546,5 76624<br />
64 40811 82213<br />
128 43316 93106,5<br />
256 44037 102067<br />
512 46997 113665<br />
1024 48285 126016<br />
2048 67718 156077<br />
4096 94031,5 218011<br />
Tabella 3.3 Valori della mediana di Scalabilità RTI - DDS<br />
86
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Come è possibile notare dalla figura 3.4 dai valori della mediana, possiamo dedurre che i<br />
tempi di RTT aumentano con il crescere della dimensione del messaggio scambiato tra<br />
publisher e subscribe, inoltre si nota che all‟aumentare del numero dei partecipanti allo<br />
scambio dei messaggi si ha un salto verso l‟alto del tempo di RTT e ciò è dovuto al numero<br />
maggiore di richieste che il publisher deve soddisfare.<br />
Figura 3.4 Mediana dei tempi di RTT RTI - DDS<br />
87
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Invece come è possibile notare dalla figura 3.5 per quanto riguarda l‟analisi visiva del<br />
grafico della distanza interquartile si può dedurre che per messaggi di piccole dimensioni si<br />
ha una maggiore prevedibilità di consegna anche all‟aumentare del numero di partecipanti<br />
allo scambio di messaggi.<br />
Figura 3.5 Distanza interquartile dei tempi di RTT RTI - DDS<br />
88
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Nella figura 3.6 viene riportato il grafico della mediana di scalabilità, come si può notare<br />
da questo grafico nel passaggio da 2 a 4 subscriber per messaggi di dimensioni inferiori ai<br />
1024B le prestazioni della soluzione RTI – DDS subiscono piccole variazioni mentre per<br />
messaggi di dimensioni superiori ai 1024B si ha un peggioramento delle prestazioni con<br />
l‟aumento del tempo di RTT. Invece nel passaggio da 2 a 6 subscriber si ha un andamento<br />
pressocchè crescente lungo tutta la curva di scalabilità.<br />
Figura 3.6 Mediana Scalabilità RTI - DDS<br />
89
3.5 Test OpenSplice<br />
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
L‟implementazione OpenSplice DDS, da noi usata per fare i test, ha una architettura<br />
interna che utilizza una memoria condivisa di interconnessione, ovvero come si nota dalla<br />
figura 3.7 utilizza un processo demone distinto per ogni interfaccia di rete. Il demone<br />
dovrebbe essere inizializzato su ogni nodo prima dell‟instaurazione della connessione tra i<br />
vari partecipanti. Una volta attivato, comunica con i demoni DCPS presenti sugli altri nodi<br />
per istaurare un canale di comunicazione.<br />
Figura 3.7 Architettura federata<br />
Usando un demone si disaccoppiano le applicazioni dai dettagli di comunicazione e di<br />
configurazione del DCPS. Inoltre, in caso di presenza di più partecipanti DDS sullo stesso<br />
nodo, la scalabilità risulta maggiore rispetto agli altri modelli di architettura, infatti è<br />
possibile semplificare la configurazione delle policy per un gruppo di partecipanti aventi la<br />
stessa interfaccia di rete.<br />
Per testare il funzionamento di OpenSplice DDS è stato prodotto un applicativo<br />
Publish/Subscribe costituito da due programmi:<br />
Un programma che implementa il comportamento del publisher<br />
Un programma che implementa il comportamento del subscriber<br />
Ogni applicazione si collegherà alle librerie OpenSplice al fine di utilizzare le<br />
caratteristiche del DDS. Dato che i terminali di comunicazione sono situati su host<br />
differenti i dati ottenuti utilizzando il DDS service locale devono essere comunicati al<br />
90
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
DDS service remoto e viceversa, il demone ospl fornisce un ponte tra il DDS service<br />
locale e quello remoto, quindi prima di avviare i due applicativi sugli host si deve<br />
provvedere ad avviare il demone.<br />
Per ciascuno dei messaggi scambiati si e misurato il tempo di RTT e tali misurazioni sono<br />
state poi raccolte in un file EXCEL.<br />
Nella seguente tabella vengono riportati i valori di mediana ottenuti per ognuna delle<br />
tipologie di test effettuati:<br />
OpenSplice DDS<br />
Dim. Messaggi Test1 Test2 Test3<br />
4 220750 276234,5 325591<br />
8 221701 277080,5 325737<br />
16 224132 277874 329164<br />
32 226818 280888 334204<br />
64 234285 287596 344573<br />
128 246028 302867,5 366187,5<br />
256 271172 321469 397353<br />
512 298808 349964 437277<br />
1024 352732 403703 511085<br />
2048 446850 520851,5 636697<br />
4096 602313 695167 847714,5<br />
Tabella 3.4 Valori della mediana OpenSplice DDS<br />
91
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Nella seguente tabella vengono riportati i valori della distanza interquartile ottenuti per<br />
ognuna delle tipologie di test effettuati:<br />
OpenSplice DDS<br />
Dim. Messaggi Test1 Test2 Test3<br />
4 23 650,5 75<br />
8 1380 210,5 1307,5<br />
16 619 1100 1373<br />
32 1438,5 2054,25 1904,75<br />
64 2979 4147 8950<br />
128 8540,25 11195,75 17761,25<br />
256 10698 11166 15164<br />
512 20383 11779 27123<br />
1024 35460,75 33697,5 38872,5<br />
2048 59236 78160,5 82882,25<br />
4096 96309 101345 135991,25<br />
Tabella 3.5 Valori della distanza interquartile OpenSplice DDS<br />
92
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Nella seguente tabella vengono riportati i valori della mediana di scalabilità.<br />
OpenSplice DDS<br />
Dim. Messaggi 2 Sub – 4 Sub 2 Sub – 6 Sub<br />
4 55484,5 104841<br />
8 54752 104768,5<br />
16 53885 105231<br />
32 54390,5 106985,5<br />
64 53150 110147<br />
128 55359 120297,55<br />
256 49248 126334<br />
512 49842 134690<br />
1024 52516 157340,5<br />
2048 70989,5 189068<br />
4096 99842 251466,5<br />
Tabella 3.6 Valori della mediana di Scalabilità OpenSplice - DDS<br />
93
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Come è possibile notare dalla figura 3.8 dai valori della mediana, possiamo dedurre che i<br />
tempi di RTT aumentano con il crescere della dimensione del messaggio scambiato tra<br />
pubblisher e subscribe, inoltre si nota che all‟aumentare del numero dei partecipanti allo<br />
scambio dei messaggi si ha un salto verso l‟alto del tempo di RTT e ciò è dovuto al numero<br />
maggiore di richieste che il publisher deve soddisfare.<br />
Figura 3.8 Mediana dei tempi di RTT OpenSplice DDS<br />
94
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Invece come è possibile notare dalla figura 3.9 per quanto riguarda l‟analisi visiva del<br />
grafico della distanza interquartile si può dedurre che per messaggi di piccole dimensioni si<br />
ha una maggiore prevedibilità di consegna anche all‟aumentare del numero di partecipanti<br />
allo scambio di messaggi.<br />
Figura 3.9 Distanza interquartile dei tempi di RTT OpenSplice DDS<br />
95
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Nella figura 3.10 viene riportato il grafico della mediana di scalabilità, come si può notare<br />
da questo grafico nel passaggio da 2 a 4 subscriber per messaggi di dimensioni inferiori ai<br />
1024B la soluzione OpenSplice – DDS ha un andamento pressocchè costante della curva di<br />
scalabilità ciò sta ad indicare che pure aumentando il numero dei subscriber le prestazioni<br />
della soluzione non subiscono variazioni percettibili mentre per messaggi di dimensioni<br />
superiori ai 1024B si ha un peggioramento delle prestazioni con l‟aumento del tempo di<br />
RTT secondo un andamento esponenziale. Nel passaggio da 2 a 6 subscriber questo<br />
comportamento si ha fino a messaggi di dimensione pari a 64B, aumentando la dimensione<br />
del messaggio da questo valore in poi si ha un andamento pressocchè crescente lungo tutta<br />
la curva di scalabilità.<br />
Figura 3.10 Mediana Scalabilità OpenSplice - DDS<br />
96
3.6 Test CORBA TAO<br />
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
L‟implementazione CorbaTAO, da noi utilizzata per i test segue l‟architettura<br />
centralizzata, in cui usa un singolo demone operante su un nodo designato per la gestione<br />
delle informazioni necessarie per creare e gestire le connessioni tra i partecipanti DDS in<br />
un dominio. I dati passano direttamente dai Publisher ai Subscriber, mentre è necessaria la<br />
comunicazione con il processo demone per il controllo e l‟inizializzazione delle attività.<br />
Figura 3.11 Architettura centralizzata<br />
Il vantaggio di quest‟architettura sta nella semplicità dell‟implementazione e della<br />
configurazione poiché tutte le informazioni di controllo risiedono in un'unica locazione.<br />
Per testare il funzionamento di CorbaTAO è stato prodotto un applicativo<br />
Publish/Subscribe costituito da due programmi:<br />
Un programma che implementa il comportamento del publisher<br />
Un programma che implementa il comportamento del subscriber<br />
Publisher e subscriber di eventi si connettono ad un event channel comune che risiede su<br />
un host diverso da quelli su cui girano i due applicativi. I subscriber non devono essere a<br />
conoscenza dei publisher e viceversa, perché è l‟event channel responsabile della consegna<br />
97
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
dei messaggi a tutti i consumatori interessati. L'attivazione dell'ORB è necessaria affinchè<br />
avvenga lo scambio di messaggi tra i partecipanti.<br />
Per ciascuno dei messaggi scambiati si e misurato il tempo di RTT e tali misurazioni sono<br />
state poi raccolte in un file EXCEL. Nella seguente tabella vengono riportati i valori di<br />
mediana ottenuti per ognuno dei test effettuati:<br />
Corba TAO<br />
Dim. Messaggi Test1 Test2 Test3<br />
4 251185,5 310435 381604,5<br />
8 251626,5 310740 382349,5<br />
16 252828 312469 386751<br />
32 255617,5 314714 390649,5<br />
64 263786 322124 400035<br />
128 277474,5 337389 418263<br />
256 290823 364614 438023<br />
512 311061 395011 474795<br />
1024 354360,5 454720,5 558009,5<br />
2048 464143 579096,5 702172,5<br />
4096 634134 788601 943514<br />
Tabella 3.7 Valori della mediana Corba<br />
98
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Nella seguente tabella vengono riportati i valori della distanza interquartile ottenuti per<br />
ognuna delle tipologie di test effettuati:<br />
Corba TAO<br />
Dim. Messaggi Test1 Test2 Test3<br />
4 323,5 88 693,5<br />
8 243,5 269 1002,5<br />
16 901 681 1139<br />
32 2982,5 677,5 4402,5<br />
64 3660 5630 6863<br />
128 6625,25 11993,5 11632<br />
256 4569 14321 6575<br />
512 14880 19310 27530<br />
1024 34176,5 33799,5 52885,25<br />
2048 61794 74597,25 109471,25<br />
4096 98820 130160 151537,5<br />
Tabella 3.8 Valori della distanza interquartile Corba<br />
99
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Nella seguente tabella vengono riportati i valori della mediana di scalabilità.<br />
Corba<br />
Dim. Messaggi 2 Sub – 4 Sub 2 Sub – 6 Sub<br />
4 59249,5 130419<br />
8 59139 130723<br />
16 59541 133892<br />
32 58951,5 135032<br />
64 58967 136635<br />
128 61542,5 140788,5<br />
256 73252 147480<br />
512 84812 164160<br />
1024 100266 203514,5<br />
2048 116690,5 238510,5<br />
4096 151709 308019<br />
Tabella 3.9 Valori della mediana di Scalabilità Corba<br />
100
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Come è possibile notare dalla figura 3.12 dai valori della mediana, possiamo dedurre che i<br />
tempi di RTT aumentano con il crescere della dimensione del messaggio scambiato tra<br />
pubblisher e subscribe, inoltre si nota che all‟aumentare del numero dei partecipanti allo<br />
scambio dei messaggi si ha un salto verso l‟alto del tempo di RTT e ciò è dovuto al numero<br />
maggiore di richieste che il publisher deve soddisfare<br />
Figura 3.12 Mediana dei tempi di RTT Corba<br />
101
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Invece come è possibile notare dalla figura 3.13 per quanto riguarda l‟analisi visiva del<br />
grafico della distanza interquartile si può dedurre che per messaggi di piccole dimensioni si<br />
ha una maggiore prevedibilità di consegna anche all‟aumentare del numero di partecipanti<br />
allo scambio di messaggi.<br />
Figura 3.13 Distanza interquartile dei tempi di RTT Corba<br />
102
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Nella figura 3.14 viene riportato il grafico della mediana di scalabilità, come si può notare<br />
da questo grafico nel passaggio da 2 a 4 subscriber per messaggi di dimensioni inferiori ai<br />
128B la curva di scalabilità della soluzione Corba ha un andamento pressocchè costante,<br />
ciò sta ad indicare che pure aumentando il numero dei subscriber le prestazioni della<br />
soluzione non subiscono variazioni percettibili mentre per messaggi di dimensioni<br />
superiori ai 128B si ha un peggioramento delle prestazioni con l‟aumento del tempo di<br />
RTT secondo un andamento sempre crescente. Nel passaggio da 2 a 6 subscriber le<br />
prestazioni si mantengono costanti per messaggi inviati fino alla dimensione di 256B,<br />
aumentando la dimensione del messaggio da questo valore in poi si ha un andamento<br />
pressocchè crescente lungo tutta la curva di scalabilità.<br />
Figura 3.14 Mediana Scalabilità Corba<br />
103
3.7 Test Apache ActiveMQ - CPP<br />
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
L‟implementazione Apache ActiveMQ – CPP da noi utilizzata per i test segue<br />
l‟architettura centralizzata, descritta nei paragrafi precedenti.<br />
Per testare il funzionamento di Apache ActiveMQ – CPP è stato prodotto un applicativo<br />
Publish/Subscribe costituito da due programmi:<br />
Un programma che implementa il comportamento del publisher<br />
Un programma che implementa il comportamento del subscriber<br />
Il publisher ed il subcriber prima di iniziare lo scambio di messaggi devono creare una<br />
factory di connessione con il JMS Event connection e successivamente tramite questo<br />
registrarsi presso l‟event channel Apache ActiveMQ comune che risiede su un host diverso<br />
da quelli su cui girano i due applicativi. Sull‟host deputato ad essere l‟event channel, viene<br />
attivato il broker Apache ActiveMQ che si occupa di instradare i messaggi pubblicati dal<br />
publisher verso i subscribe che hanno fatto richiesta di partecipare alla comunicazione.<br />
Per ciascuno dei messaggi scambiati si e misurato il RTT e tali misurazioni sono state poi<br />
raccolte in un file EXCEL.<br />
104
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Nella seguente tabella vengono riportati i valori di mediana ottenuti per ognuna delle<br />
tipologie di test effettuati:<br />
Apache ActiveMQ – CPP<br />
Dim. Messaggi Test1 Test2 Test3<br />
4 180673 220928,5 332218,5<br />
8 181625 221476 333778,5<br />
16 184556 225242 335789<br />
32 189234,5 228901 339304<br />
64 194771 235711 355829<br />
128 209354,5 250950 374439,5<br />
256 223021 275797 413009<br />
512 250775 310366 458408<br />
1024 311671,5 364926,5 540213,5<br />
2048 417873 525532,5 728006,5<br />
4096 611272,5 764517 989378<br />
Tabella 3.10 Valori della mediana Apache ActiveMQ - CPP<br />
105
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Nella seguente tabella vengono riportati i valori della distanza interquartile ottenuti per<br />
ognuna delle tipologie di test effettuati:<br />
Apache ActiveMQ – CPP<br />
Dim. Messaggi Test1 Test2 Test3<br />
4 155 156,5 1292,5<br />
8 932 584 281,5<br />
16 2308 2195 1029<br />
32 2255,25 827,5 2329<br />
64 3779 6814 11657<br />
128 7242 9610,5 17073,25<br />
256 6602 14127 20601<br />
512 19253 18250 29157<br />
1024 38005,5 44674,5 61987<br />
2048 81318 98861,25 125971<br />
4096 107758,25 124773 161296<br />
Tabella 3.11 Valori della distanza interquartile Apache ActiveMQ - CPP<br />
106
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Nella seguente tabella vengono riportati i valori della mediana di scalabilità.<br />
Apache ActiveMQ – CPP<br />
Dim. Messaggi 2 Sub – 4 Sub 2 Sub – 6 Sub<br />
4 40255,5 151545,5<br />
8 39907,5 151503<br />
16 40063 150656<br />
32 39523 150069,5<br />
64 40940 161058<br />
128 42202 165541,5<br />
256 52776 190680<br />
512 60599 206032<br />
1024 60440,5 229598,5<br />
2048 103827,5 308600,5<br />
4096 158406 373704<br />
Tabella 3.12 Valori della mediana di Scalabilità Apache ActiveMQ - CPP<br />
107
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Come è possibile notare dalla figura 3.15 dai valori della mediana, possiamo dedurre che i<br />
tempi di RTT aumentano con il crescere della dimensione del messaggio scambiato tra<br />
pubblisher e subscribe, inoltre si nota che all‟aumentare del numero dei partecipanti allo<br />
scambio dei messaggi si ha un salto verso l‟alto del tempo di RTT e ciò è dovuto al numero<br />
maggiore di richieste che il publisher deve soddisfare<br />
Figura 3.15 Mediana dei tempi di RTT Apache ActiveMQ - CPP<br />
108
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Invece come è possibile notare dalla figura 3.16 per quanto riguarda l‟analisi visiva del<br />
grafico della distanza interquartile si può dedurre che per messaggi di piccole dimensioni si<br />
ha una maggiore prevedibilità di consegna anche all‟aumentare del numero di partecipanti<br />
allo scambio di messaggi.<br />
Figura 3.16 Distanza interquartile dei tempi di RTT Apache ActiveMQ - CPP<br />
109
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Nella figura 3.17 viene riportato il grafico della mediana di scalabilità, come si può notare<br />
da questo grafico nel passaggio da 2 a 4 subscriber per messaggi di dimensioni inferiori ai<br />
128B la soluzione Apache ActiveMQ - CPP ha un andamento pressocchè costante della<br />
curva di scalabilità ciò sta ad indicare che pure aumentando il numero dei subscriber le<br />
prestazioni della soluzione non subiscono variazioni percettibili, per messaggi di<br />
dimensioni comprese tra i 128B ed i 1024B si ha un piccolo scarto verso l‟alto mantendo<br />
prestazioni accettabili, mentre per messaggi di dimensione superiore ai 1024B si ha un<br />
peggioramento delle prestazioni con l‟aumento del tempo di RTT secondo un andamento<br />
sempre crescente. Nel passaggio da 2 a 6 subscriber le prestazioni si mantengono costanti<br />
per messaggi inviati fino alla dimensione di 32B, aumentando la dimensione del messaggio<br />
da questo valore in poi si ha un andamento pressocchè crescente lungo tutta la curva di<br />
scalabilità.<br />
Figura 3.17 Mediana Scalabilità Apache ActiveMQ - CPP<br />
110
3.8 Test OpenAMQ<br />
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
OpenAMQ è un message middleware bastato sulle specifiche AMQP utilizzato per<br />
costruire applicazioni distribuite che comunicano utilizzando messaggi. Il flusso dei<br />
messaggi è asincrona, ciò significa che il flusso dei messaggi tra le parti avviene senza una<br />
logica complessiva di sincronizzazione o di controllo.<br />
L‟implementazione C++ che abbiamo utilizzato è in pratica un broker C++ che<br />
implementa AMQP. Essenzialmente, AMQP è un middleware robusto che può gestire il<br />
traffico di messaggi all‟interno di una rete di client collegati a degli intermediari chiamati<br />
appunto broker.<br />
OpenAMQ utilizza un‟architettura centralizzata e per testare le prestazioni di OpenAMQ è<br />
stato prodotto un applicativo Publish/Subscribe costituito da due programmi:<br />
Un programma che implementa il comportamento del publisher<br />
Un programma che implementa il comportamento del subscriber<br />
I due programmi comunicano tra di loro utilizzando il broker amqserver messo a<br />
disposizione da OpenAMQ, il broker è attivato su un terzo host differente dagli host dove<br />
vengono lanciati i due applicativi, il quale si occupa di instradare i messaggi pubblicati dal<br />
publisher verso i subscribe che hanno fatto richiesta di partecipare alla comunicazione.<br />
Quindi per il corretto svolgimento dei test si è provveduto ad installare su ogni macchina lo<br />
strato middleware ed all‟attivazione del broker sulla macchina candidata ad essere il centro<br />
per la comunicazione dei partecipanti ai test.<br />
Per ciascuno dei messaggi scambiati si e misurato il RTT e tali misurazioni sono state poi<br />
raccolte in un file EXCEL.<br />
111
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Nella seguente tabella vengono riportati i valori della mediana ottenuti per ognuna delle<br />
tipologie di test effettuati:<br />
OpenAMQ<br />
Dim. Messaggi Test1 Test2 Test3<br />
4 241906,5 361647 412033,5<br />
8 242145 362366 414125<br />
16 243555 365575 417886<br />
32 247997,5 371059,5 425322<br />
64 258361 388449 440221<br />
128 271287 411146,5 470094<br />
256 294911 437807 503896<br />
512 331682 484815 558306<br />
1024 398560,5 561372,5 654650,5<br />
2048 540987 754389 856821<br />
4096 743316 1051373 1188383,5<br />
Tabella 3.13 Valori della mediana OpenAMQ<br />
112
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Nella seguente tabella vengono riportati i valori della distanza interquartile ottenuti per<br />
ognuna delle tipologie di test effettuati:<br />
OpenAMQ<br />
Dim. Messaggi Test1 Test2 Test3<br />
4 137,5 49 309,5<br />
8 163,5 1129,5 2086,5<br />
16 952 2112 2030<br />
32 959,5 3804,25 4309,75<br />
64 5355 14099 7336<br />
128 11691,5 14030,25 20318,25<br />
256 10601 13328 12486<br />
512 19022 32028 27454<br />
1024 50184,75 59156 77434<br />
2048 90226 132807,25 131255,75<br />
4096 102711,5 185233 216051,25<br />
Tabella 3.14 Valori della distanza interquartile OpenAMQ<br />
113
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Nella seguente tabella vengono riportati i valori della mediana di scalabilità.<br />
OpenAMQ<br />
Dim. Messaggi 2 Sub – 4 Sub 2 Sub – 6 Sub<br />
4 119740,5 170127<br />
8 120309,5 171980<br />
16 122020 174331<br />
32 123062 177324,5<br />
64 130088 181860<br />
128 138818 198807<br />
256 142971 208270<br />
512 150542 226431<br />
1024 164956 256459<br />
2048 215565 317318<br />
4096 306603 446147<br />
Tabella 3.15 Valori della mediana di Scalabilità OpenAMQ<br />
114
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Come è possibile notare dalla figura 3.18 dai valori della mediana, possiamo dedurre che i<br />
tempi di RTT aumentano con il crescere della dimensione del messaggio scambiato tra<br />
pubblisher e subscribe, inoltre si nota che all‟aumentare del numero dei partecipanti allo<br />
scambio dei messaggi si ha un salto verso l‟alto del tempo di RTT e ciò è dovuto al numero<br />
maggiore di richieste che il publisher deve soddisfare<br />
Figura 3.18 Mediana dei tempi di RTT OpenAMQ<br />
115
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Invece come è possibile notare dalla figura 3.19 per quanto riguarda l‟analisi visiva del<br />
grafico della distanza interquartile si può dedurre che per messaggi di piccole dimensioni si<br />
ha una maggiore prevedibilità di consegna anche all‟aumentare del numero di partecipanti<br />
allo scambio di messaggi.<br />
Figura 3.19 Distanza interquartile dei tempi di RTT OpenAMQ<br />
116
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Nella figura 3.20 viene riportato il grafico della mediana di scalabilità, come si può notare<br />
da questo grafico nel passaggio da 2 a 4 subscriber per messaggi di dimensioni inferiori ai<br />
32B la soluzione OpenAMQ ha un andamento pressocchè costante della curva di<br />
scalabilità in cui le variazioni del tempo di RTT sono impercettibili, questo è a vantaggio<br />
dei subscriber che pur aumentando di numero le prestazioni della soluzione non subiscono<br />
variazioni eccessive, per messaggi di dimensioni comprese tra i 32B ed i 1024B si ha un<br />
andamento crescente della curva di scalabilità con variazioni non eccessive, mentre per<br />
messaggi di dimensione superiore ai 1024B si ha un netto peggioramento delle prestazioni.<br />
Nel passaggio da 2 a 6 subscriber le prestazioni si mantengono costanti per messaggi<br />
inviati fino alla dimensione di 64B, aumentando la dimensione del messaggio da questo<br />
valore in poi si ha un andamento pressocchè crescente lungo tutta la curva di scalabilità.<br />
Figura 3.20 Mediana Scalabilità OpenAMQ<br />
117
3.9 Test QPID<br />
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Qpid è un incubator middleware, fornito da apache, è nato da un progetto in<br />
collaborazione con red-hat riguardante un sistema di messaggistica open-source che<br />
garantisca l‟interoperabilità tra le varie piattaforme esistenti all‟interno di un patchwork di<br />
sistemi; tale protocollo di messaggistica è appunto AMQP. Qpid è stato installato e<br />
utilizzato per realizzare i test riguardanti AMQP.<br />
L‟implementazione C++ che abbiamo utilizzato è in pratica un broker C++ che<br />
implementa AMQP. Essenzialmente, AMQP è un middleware robusto che può gestire il<br />
traffico di messaggi all‟interno di una rete di client collegati a degli intermediari chiamati<br />
appunto broker.<br />
Qpid utilizza un'architettura di tipo centralizzato e per testare le prestazioni di Qpid è stato<br />
prodotto un applicativo Publish/Subscribe costituito da due programmi:<br />
Un programma che implementa il comportamento del publisher<br />
Un programma che implementa il comportamento del subscriber<br />
I due programmi comunicano tra di loro utilizzando il broker qpidd messo a disposizione<br />
da Qpid, il broker è attivato su un terzo host differente dagli host dove vengono lanciati i<br />
due applicativ, il quale si occupa di instradare i messaggi pubblicati dal publisher verso i<br />
subscribe che hanno fatto richiesta di partecipare alla comunicazione. Quindi per il corretto<br />
svolgimento dei test si è provveduto ad installare su ogni macchina lo strato middleware ed<br />
all‟attivazione del broker sulla macchina candidata ad essere il centro per la comunicazione<br />
dei partecipanti ai test.<br />
Per ciascuno dei messaggi scambiati si e misurato il RTT e tali misurazioni sono state poi<br />
raccolte in un file EXCEL.<br />
118
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Nella seguente tabella vengono riportati i valori della mediana ottenuti per ognuna delle<br />
tipologie di test effettuati:<br />
QPID<br />
Dim. Messaggi Test1 Test2 Test3<br />
4 261924 321213,5 391743,5<br />
8 261994,5 322066 394650,5<br />
16 265203 324997 402312<br />
32 267033,5 333590 408540<br />
64 278681 349445 424717<br />
128 291477 384779 461207,5<br />
256 314706 419547 499377<br />
512 352352 475535 557782<br />
1024 408466,5 548248,5 671612,5<br />
2048 543454 717455,5 860605,5<br />
4096 732806 998251 1184010<br />
Tabella 3.16 Valori della mediana QPID<br />
119
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Nella seguente tabella vengono riportati i valori della distanza interquartile ottenuti per<br />
ognuna delle tipologie di test effettuati:<br />
QPID<br />
Dim. Messaggi Test1 Test2 Test3<br />
4 48 761,5 1265,5<br />
8 273 502 1736<br />
16 784 1818 914<br />
32 1864,75 1275 6473,5<br />
64 5065 10435 9420<br />
128 11640,75 16732,25 20855,25<br />
256 12100 13057 25782<br />
512 25535 36310 25970<br />
1024 38621,5 46803,25 73202,5<br />
2048 79075,25 113900,75 132916<br />
4096 129904,5 175994,75 173874,75<br />
Tabella 3.17 Valori della distanza interquartile QPID<br />
120
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Nella seguente tabella vengono riportati i valori della mediana di scalabilità.<br />
QPID<br />
Dim. Messaggi 2 Sub – 4 Sub 2 Sub – 6 Sub<br />
4 59289,5 150109,5<br />
8 60071,5 152130,5<br />
16 59794 152683<br />
32 66039,5 156948<br />
64 70764 161540<br />
128 93175 178438,5<br />
256 106778 190393<br />
512 122587 205119<br />
1024 141634 246714<br />
2048 175587 313367<br />
4096 265605 462602<br />
Tabella 3.18 Valori della mediana di Scalabilità QPID<br />
121
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Come è possibile notare dalla figura 3.21 dai valori della mediana, possiamo dedurre che i<br />
tempi di RTT aumentano con il crescere della dimensione del messaggio scambiato tra<br />
pubblisher e subscribe, inoltre si nota che all‟aumentare del numero dei partecipanti allo<br />
scambio dei messaggi si ha un salto verso l‟alto del tempo di RTT e ciò è dovuto al numero<br />
maggiore di richieste che il publisher deve soddisfare<br />
Figura 3.21 Mediana dei tempi di RTT QPID<br />
122
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Invece come è possibile notare dalla figura 3.22 per quanto riguarda l‟analisi visiva del<br />
grafico della distanza interquartile si può dedurre che per messaggi di piccole dimensioni si<br />
ha una maggiore prevedibilità di consegna anche all‟aumentare del numero di partecipanti<br />
allo scambio di messaggi.<br />
Figura 3.22 Distanza interquartile dei tempi di RTT QPID<br />
123
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Nella figura 3.23 viene riportato il grafico della mediana di scalabilità, come si può notare<br />
da questo grafico nel passaggio da 2 a 4 subscriber per messaggi di dimensioni inferiori ai<br />
16B la soluzione QPID ha un andamento pressocchè costante della curva di scalabilità in<br />
cui le variazioni del tempo di RTT sono impercettibili, questo è a vantaggio dei subscriber<br />
che pur aumentando di numero le prestazioni della soluzione non subiscono variazioni<br />
eccessive, per messaggi di dimensioni comprese tra i 16B ed i 64B la curva cresce ma<br />
molto lentamente tanto che le variazioni non sono percettibili, mentre per dimensioni<br />
superiori ai 64B si ha un andamento sempre crescente della curva con un netto<br />
peggioramento delle prestazioni. Nel passaggio da 2 a 6 subscriber le prestazioni si<br />
mantengono costanti per messaggi inviati fino alla dimensione di 64B, aumentando la<br />
dimensione del messaggio da questo valore in poi si ha un andamento pressocchè crescente<br />
lungo tutta la curva di scalabilità.<br />
Figura 3.23 Mediana Scalabilità QPID<br />
124
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
3.10 Confronto delle prestazioni delle soluzioni publish/subscribe<br />
Di seguito riportiamo i grafici ottenuti utilizzando i valori di mediana, distanza<br />
interquartile e scalabilità per le 3 tipologie di test effettuate. Ciascuno mette a confronto le<br />
diverse soluzioni middleware esaminate in questo lavoro di <strong>tesi</strong><br />
Figura 3.24 Mediana dei tempi di RTT 1Pub – 2 Sub<br />
Figura 3.25 Distanza interquartile dei tempi di RTT 1Pub – 2 Sub<br />
125
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Figura 3.26 Mediana dei tempi di RTT 1Pub – 4 Sub<br />
Figura 3.27 Distanza interquartile dei tempi di RTT 1Pub – 4 Sub<br />
126
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Figura 3.28 Mediana dei tempi di RTT 1Pub – 6 Sub<br />
Figura 3.29 Distanza interquartile dei tempi di RTT 1Pub – 6 Sub<br />
127
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Figura 3.30 Mediana scalabilità 2 Sub – 4 Sub<br />
Figura 3.31 Mediana scalabilità 2 Sub – 6 Sub<br />
128
Conclusioni e Sviluppi Futuri<br />
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
La qualità dei risultati ottenuti dalle analisi sono fortemente dipendenti dall‟architettura<br />
delle soluzioni esaminate e dai parametri di qualità del servizio definiti, vi è infatti una<br />
stretta dipendenza delle prestazioni del sistema e delfunzionamento complessivo. dai<br />
parametri di qualità del servizio definiti.<br />
Il middleware RTI DDS, avendo un‟architettura decentralizzata, ha il vantaggio di non<br />
aver bisogno di un demone o broker per lo scambio di messaggi, facendo risultare così<br />
ogni applicazione autonoma. In termini prestazionali questo si traduce in un minore tempo<br />
di consegna dei messaggi scambiati tra i partecipanti. Infatti dall‟analisi dei grafici riportati<br />
nel paragrafo precedente è l‟unica soluzione che garantisce un tempo di RTT minore.<br />
Questa soluzione garantisce, sia all‟aumentare della dimensione dei messaggi scambiati<br />
che del numero dei subscriber, una migliore prevedibilità di consegna infatti come si<br />
evince dai grafici della distanza interquartile si notano bassi valori di quest‟ultima. Per<br />
quanto rigurada la scalabilità questa è l‟unica soluzione che riesce pur aumentando il<br />
numero dei subscriber a mantere prestazioni ottimali.<br />
Il middleware OpenSplice DDS, avendo un‟architettura federata, ha un processo demone<br />
distinto su ogni host, ciò permette un maggiore disaccoppiamento delle parti, ma in termini<br />
prestazionali si traduce in un tempo di RTT di poco superiore a quello del middleware RTI<br />
DDS in quanto i messaggi devono attraversare il demone prima di essere consegnati al<br />
destinatario. Anche questa soluzione riesce a garantire una buona prevedibilità di<br />
consegna, ma non ai livelli di RTI, ed in termini di scalabilità risulta essere la seconda<br />
soluzione che riesce a mantenere buone prestazioni all‟aumentare del numero dei<br />
subscriber.<br />
In fine middleware come Corba, Apache ActiveMQ, OpenAMQ, QPID, avendo un<br />
architettura centralizzata, forniscono delle forti capacità d'interoperabilità tra sistemi<br />
eterogenei, sfruttando la caratteristica d'intermediazione del broker. In termini prestazionali<br />
129
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
questo si traduce in un tempo di RTT maggiore dovuta proprio al fatto che i messaggi<br />
scambiati devo attraversare l‟host su cui risiede il broker. Anche queste soluzioni risultano<br />
avere una buona prevedibilità di consegna con andamenti della curva della distanza<br />
interquartile molto simili. In termini di scalabilità Corba si pone un gradino sopra la<br />
soluzione RTI – DDS ed OpenSplice – DDS, mentre le altre sono nettamente distaccate<br />
dalle altre e le prestazioni decadono con l‟aumentare dei partecipanti allo scambio dei<br />
messagi.<br />
Per le applicazioni real time e mission critical la soluzione middleware RTI DDS è<br />
preferibile alle altre perché garantisce un tempo minore di RTT per il vantaggio di avere<br />
uno scambio diretto tra le parti e una maggiore prevedibilità di consegna.<br />
Un ulteriore sviluppo di questo lavoro può procedere nella direzione di estendere gli<br />
scenari di comunicazione sia unicast che multi cast in una rete reale quale internet, caso<br />
quest‟ultimo non considerato in questo lavoro. Inoltre sarebbe opportuno determinare il<br />
comportamento delle diverse soluzioni middleware per un numero ancora crescente di nodi<br />
e quindi valutare in modo approfondito le caratteristiche intrinseche di scalabilità delle<br />
diverse soluzioni.<br />
Per concludere è necessario sottolineare come la qualità dei risultati ottenuti dalle analisi<br />
sulle diverse soluzioni siano dipendenti dalla tipologia architetturale e dalle qualità del<br />
servizio definite.<br />
130
Ringraziamenti<br />
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Dopo anni di intenso studio e sacrifici, ci si guarda dentro e ci si rende conto che la più<br />
grande forza, per andare avanti, nasce dal desiderio di far felici le persone che ti sono state<br />
accanto e che hanno “scommesso” sulle tue capacità e giunto alla fine di questo intenso<br />
lavoro penso sia più che giusto spendere due parole anche verso coloro che mi hanno<br />
aiutato e sostenuto in questo lungo e faticoso percorso.<br />
In assoluto le singole persone che piú di ogni altre meritano che questo lavoro fosse loro<br />
dedicato sono certamente i miei genitori, mia sorella, ed il mio carissimo amico di sempre<br />
Roberto, a tutti loro dedico un ringraziamento sincero per aver avuto una grande pazienza,<br />
per aver aspettato, per aver atteso così a lungo questo traguardo che mi accingo a<br />
raggiungere, per avermi sopportato e supportato cosí a lungo. Ad essi vanno tutta la mia<br />
stima, il mio rispetto e la mia riconoscenza, senza di loro non sarei mai potuto arrivare fino<br />
a qui.<br />
Un ringraziamento particolare è rivolto al Prof. Domenico Cotroneo, che ha saputo<br />
suscitare interesse nella materia, che ha dimostrato di essere, innanzitutto, una grande<br />
persona prima che un professore, dando conforto ai suoi <strong>tesi</strong>sti nei momenti di difficoltà,<br />
che grazie a lui ho portato a termine due esperienze uniche, la prima senza ombra di<br />
dubbio questo lavoro di <strong>tesi</strong>, le seconda è l‟opportunità lavorativa presso la System<br />
Management, svolta in questi ultimi mesi di <strong>tesi</strong>.<br />
Un doppio ringraziamento è rivolto al Dott. Ing. Christian Esposito, doppio perché ancor<br />
prima di essere il mio correlatore per questa <strong>tesi</strong>, è stato, è e sarà un amico fidato su cui<br />
poter contare sempre, come “Correlatore” è stato impeccabile, mi ha seguito con grande<br />
attenzione dimostrandosi sempre “risolutivo” e “disponibile”, consigliandomi la strada<br />
giusta da seguire durante lo sviluppo e la stesura, come “Amico” mi è stato vicino in un<br />
momento particolare della mia vita, e come pochi è rimasto ad ascoltarmi e consigliarmi in<br />
tante lunghe chiacchierate.<br />
131
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Ora passiamo ai ringraziamenti più spensierati!!! Un grazie va a tutti i miei compagni di<br />
avventura ed in particolare:<br />
A Ettore per avermi spronato a dare il meglio negli ultimi esami, per aver rallegrato le<br />
giornate di studi di questi ultimi anni nell‟aula studio c2a, per la bellissima amicizia che mi<br />
ha regalato e per avermi saputo ascoltare e consigliare. Sicuramente un punto fermo di<br />
questi anni sia per quanto riguarda il percorso di studi sia per quanto riguarda ai valori in<br />
cui credere, un amico sincero sempre presente, pronto a sostenermi nel momento di<br />
bisogno.<br />
A Roberto Fulgido ricordo ancora quando insieme ci immatricolammo, quando i primi<br />
anni insieme seguivamo i corsi e ci facevamo coraggio a vicenda per superare gli esami di<br />
questo lungo percorso, dapprima sinceri compagni di studi e poi il tempo ha contribuito a<br />
consolidare una forte amicizia di quelle che non finiscono con un percorso, ma che<br />
continua al di là degli impegni della vita privata e lavorativa.<br />
A Peppe Di Meo, alias “The pezzott‟ man”, è stata una delle prime persone che ho<br />
conosciuto all‟università insieme a Roberto, lo ringrazio per il supporto che mi ha concesso<br />
nei primi anni di studi, ricordo ancora le ore trascorse insieme allo C.S.I.F. facendo tanti<br />
programmi di esempio per l‟esame di Fondamenti II, e le pause pranzo trascorse a giocare<br />
con una pseudo palla di carta stagnola presso le aule T di Monte Sant‟Angelo quelli erano<br />
anni spensierati, il punto di partenza di quello che siamo oggi, due buoni amici che hanno<br />
condiviso tanto durante il percorso di studi che condividono oggi un‟amicizia sincera fatta<br />
di scorribande serali.<br />
Il mio sogno è quello di poter un giorno lavorare insieme a loro tre, magari in un‟azienda<br />
di consulenza tutta nostra.<br />
Alla compagnia del pezzotto di cui sono membri Arcangelo De Micco, Peppe Ardizio,<br />
Davide Di Mare, Maria Esposito, Iolanda Pennino che hanno saputo rallegrare questi anni<br />
di studi, che si sono sempre interessati sugli esami che sostenevo, per avermi fornito<br />
appunti e materiali.<br />
132
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
A tutti gli amici e colleghi di università che ho incontrato lungo il mio cammino e chi più<br />
chi meno mi ha dato un aiuto a proseguire verso il mio traguardo.<br />
Agli amici di laboratorio Antonio, Berniero, Giuseppe che hanno rallegrato un laboratorio<br />
quello del Cini altrimenti solitario ed austero, che hanno reso indimenticabile le pause<br />
pranzo.<br />
Desidero inoltre ringraziare una serie di persone che in circostanze spesso diverse mi<br />
hanno dato serenità, amicizia e supporto morale nell‟arco di quest‟ultimo anno: Maria che<br />
mi ha saputo ascoltare e consigliare in momenti difficili, sempre presente e con parole che<br />
sono sempre riuscite a donarmi conforto, Daniele ragazzo leale sincero, spero il tempo mi<br />
dirà vero amico, che nonostante i miei modi di fare è stato sempre pronto a sostenermi ed<br />
ascoltarmi, specialmente quest‟estate durante il viaggio a Madrid, Eleonora che ogni volta<br />
che uscivamo la sera era sempre pronta a riempirmi la testa di chiacchiere, ma anche a<br />
lasciarsela riempire, Felicia per essere riuscita ad ascoltarmi sempre e comunque, che<br />
nonostante tutto è un‟amica sincera come poche, Manferino “m‟ schiaffiass san‟ san‟” con<br />
questo ho detto tutto sempre pronto a narrare eventi quasi leggendari delle sue vacanze<br />
trascorse qua e là in giro per il mondo, Emilia e Antonio che hanno saputo darmi ottimi<br />
consigli in questo ultimo periodo, Anita compagna di bevute e per avermi fatto ascoltare<br />
buona musica, Paola e Mauro per aver rallegrato le serate in piazzetta San Pelato, Pina per<br />
aver avuto sempre una parola di conforto, Giuseppina pur non essendo vicini, pur divisi da<br />
tanti chilometri siamo riusciti confortarci a vicenda in un periodo particolare delle nostre<br />
vite da lì è nata un‟amicizia che va oltre le distanze, oltre ogni immaginazione.<br />
Infine voglio ringraziare gli amici nonché colleghi della System Management che mi<br />
hanno sopportato e supportato in questi ultimi due mesi, ringrazio Antonino, Lina,<br />
Antonella, Grazia, Anna, Marianna, Fulvio, Valentina, ed un ringraziamento particolare va<br />
ad Annalisa, le sue idee sono state illuminanti per gli ultimi sviluppi di questo lavoro di<br />
<strong>tesi</strong>.<br />
133
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
Un ringraziamento va anche a tutte quelle persone che sicuramente avrò dimenticato,<br />
quindi un grazie sincero a tutti ognuno di voi mi ha dato qualcosa.<br />
Grazie a tutti di tutto<br />
Vincenzo<br />
134
Bibliografia<br />
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
[1] S.Russo, C. Savy, D. Cotroneo, A. Sergio 2003 “Introduzione a corba”<br />
[2] Christian Esposito “DDS‐ related material for beginners”<br />
[3] EUGSTER, FELBER, GUERRAOUI, KERMARREC “The Many Faces of<br />
Publish/Subscribe”<br />
[4] R. Baldoni, R. Beraldi, S. Tucci Piergiovanni, A. Virgillito, 2004 “Measuring<br />
notification loss in publish/subscribe communication systems”.<br />
[5] I. Dionysiou, D. Frincke, D. E. Bakken, Hauser, 2005 “Actor-oriented trust.<br />
Technical Report EECS-GS-006”.<br />
[6] Diot, C., Levine, B., Lyles, B., Kassem, H., Balensiefen, 2000 “Deployment issues<br />
for the ip multicast service”.<br />
[7] Shi, Y.S. 2002 “Design of Overlay Networks for Internet Multicast”<br />
[8] Haung, Y., Garcia-Molina, 2001“Publish/Subscribe in a Mobile Environment”.<br />
[9] Anceaume, E., Datta, A.K., Gradinariu, M., Simon, G. 2002 “Publish/Subscribe<br />
scheme for mobile networks”. 74-81.<br />
[10] Caporuscio, M., Carzaniga, A., Wolf, A.L. 2003 “Design and evalutation of a<br />
support service for mobile, wireless publish/subscribe applications”. 1059-1071.<br />
[11] Muthusamy, V., Petrovic, M., Jacobsen, H.A. 2005 “Effects of routing<br />
computations in content-based routing network with mobile data sources”. 103-116.<br />
[12] Sun Microsystems Inc. “Java messagge serviceapi” rev 1.1, 2002.<br />
[13] Oki B., Pfluegel M., Siegel A., Skeen, D. 1993 “The information bus an architecture<br />
for extensive distributed system”.<br />
[14] Baehni S., Eugster P.T., Guerraoui R. 2004 “Data-aware multicast” 233-242.<br />
[15] Segall B., Arnold D., J. Henderson M., Phelps T. 2000 “Content Based Routing<br />
with Elvin”.<br />
[16] Fabret F., Jacobsen A., Lirbat F., Pereira J., Ross K., Shasha D. 2001 “Filtering<br />
algorithms and implementation for very fast publish/subscribe”. 115-126.<br />
135
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
[17] Muhl G., 2001 “Generic Constraints for Content-Based Publish/Subscribe”<br />
[18] Eugster P., 2001 Guerraoui R., Damm C. 2001 “On Objects and Events”<br />
[19] Eugster P. 2001 Type-based publish/subscribe.<br />
[20] Rowstron A., Druschel P. 2001 “Pastry: Scalable, decentralized object location, and<br />
routing for large-scale peer-to-peer system”. 329-350.<br />
[21] Stoica I., Morris R., Karger D., Kaashoek M.F., Balakrishnan H. 2001 “Chord: A<br />
scalable peer-to-peer lookup service for internet application”.<br />
[22] Ratnasamy S., Handley M., Karp, R. Shenker S. 2001 “Application-level multicast<br />
using content-addressable networks”. 14-34.<br />
[23] Baldoni R., Beraldi R., Cugola G., Migliavacca M. Querzoni, L. 2005 “Structure-<br />
less Content-Based Routing in Mobile Ad Hoc Networks”.<br />
[24] Carzaniga A., Rosenblum D., Wolf A., 2001 “Design and Evalutation of a Wide-<br />
Area Notification Service”. 332-383<br />
[25] Carzaniga a., Rutherford M.J., Wolf A.L. 2005 “A routing scheme for content-based<br />
networking”.<br />
[26] Bittner S., Hinze A. 2005 “A classification of filtering algorithms in content-based<br />
publish/subscribe system”.<br />
[27] Baldoni R., Marchetti C., Virgillito A., Vitenberg, R., 2005 “Content-based publish-<br />
subscribe over structured overlay networks”.<br />
[28] Birman K.P., Hayden M., Ozkasap O., Xiao Z., Budiu M., Minsky Y. 1999<br />
“Bimodal multicast”. 41-88.<br />
[29] RTI “The Real-Time Publish-Subscribe Middleware – User‟s Manual”, Version 4.1<br />
[30] http://www.omg.org/technology/documents/dds_spec_catalog.htm “Data<br />
Distribution Service (DDS) for Real-Time” Systems, OMG Specification version 1.2<br />
[31] PrismTech “OpenSplice Version 2.2 C Tutorial Guide”<br />
[32] M.Henning, S.Vinoski – “Advanced CORBA Programming with C++”- 1999<br />
[33] Alan L. Pope. The CORBA Reference Guide<br />
136
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
[34] Object Management Group. “The Common Object Request Broker Architecture<br />
and Specification”. Revision 2.6 December 2001<br />
[35] Object Management Group. Web site. http://www.omg.org<br />
[36] Cetus Links, “Distributed Objects and components: CORBA”. http://www.cetus-<br />
links.org/oo_corba.html<br />
[37] IBM “CORBA notification services”<br />
http://www.ibm.com/developerworks/library/co-cjct7/<br />
[38] http://onjava.com/onjava/2001/12/12/jms_not.html<br />
[39] C.O‟Ryan, D.C.Schmidt et alter – “The Design and Performance of a Scalable ORB<br />
Architecture for CORBA Asynchronous Messaging” – 2000<br />
[40] D.C.Schmidt, S.Vinosky – “An Overview of the CORBA Messaging QoS<br />
Framework” – 2000<br />
[41] OMG - “CORBA Messaging Specification” - http://www.omg.org/cgi-<br />
bin/doc?formal/04-03-09<br />
[42] OMG - “FT CORBA” - http://www.omg.org/cgi-bin/doc?formal/04-03-10<br />
[43] OMG – “Data Distribution Service Specification”<br />
http://www.omg.org/technology/documents/formal/data_distribution.htm<br />
[44] http://it.wikipedia.org/wiki/Java_Message_Service<br />
[45] http://java.sun.com/products/jms/<br />
[46] http://www.codemesh.com/products/junction/examples/jms.html<br />
[47] http://en.wikipedia.org/wiki/Apache_ActiveMQ<br />
[48] http://activemq.apache.org/articles.html<br />
[49] Apache ActiveMQ User Manual<br />
[50] JMS User Manul<br />
[51] IEEE Advanced Message Queueing Protocol – 0-10 Specification.<br />
[52] QPID User Manual.<br />
[53] http://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol<br />
137
[54]<br />
Analisi delle prestazioni delle principali soluzioni<br />
per servizi publish/subscribe<br />
http://www.amqp.org/confluence/display/AMQP/Advanced+Message+Queuing+Protocol<br />
[55] http://www.openamq.org/doc:rfc-cml<br />
[56] http://qpid.apache.org/documentation.html<br />
[57] “Service-Oriented Architecture and Web Service: Concepts, Technologies, and<br />
tools.” Ed Ort http://java.sun.com/developer/technicalArticles/WebServices/soa2/<br />
[58] “What‟s new in SOA and Web Service” Ed Ort<br />
http://java.sun.com/developer/technicalArticles/WebServices/soa2/WhatsNewArticle.html<br />
[59] “SEDA: An Architecture for Scalable, Well Conditioned Internet Services” Matt<br />
Welsh, David Culler, and Eric Brewer http://www.eecs.harvard.edu/~mdw/talks/seda-<br />
sosp01-talk.pdf<br />
[60] “SEDA: An Architecture for Scalable, Well Conditioned Internet Services” Matt<br />
Welsh, David Culler, and Eric Brewer http://www.eecs.harvard.edu/~mdw/papers/seda-<br />
sosp01.pdf<br />
138