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