28.05.2013 Views

download tesi - MobiLab

download tesi - MobiLab

download tesi - MobiLab

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

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!