28.05.2013 Views

download tesi - MobiLab

download tesi - MobiLab

download tesi - MobiLab

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!