Modello di replicazione attivo e di
supporto alla tolleranza ai guasti in
ambito MOM
Autore: Claudio Fusconi
Matricola: 189269
Esame: Reti di calcolatori LS
Università di Bologna
Agenda










Scenario
Requisiti da soddisfare
JMS
Comportamento del sistema
Liste e Messaggi
Struttura del Client
Struttura del Server
Fault tolerance
Gestione invio risposte a i Client
Possibili sviluppi futuri
Scenario
Realizzare un sistema per la gestione di una coda di
messaggi tipo FIFO, rappresentante una lista
d’attesa, in cui un client può:
 Inserire un messaggio
 Cancellare un messaggio
Argomenti coinvolti:
 Replicazione attiva delle risorse
 Coordinamento tra copie
 Paradigma Publish/Subscriber per lo scambio dei
messaggi
Requisiti da soddisfare
Caratteristiche richieste dal sistema:
 tolleranza a i gusti
 trasparenza del grado di replicazione lato client
 nessuna forma di gestione centralizzata
 Indipendenza dal MOM
Ottenuta seguendo le specifiche JMS
Java Message Service (JMS)
Elementi di base per l’utilizzo del servizio di messaging:
Connection
Factory
Crea
Connection
Crea
Message
Producer
Session
Crea
Crea
Invia a
Crea
Message
Consumer
Ricevi da
message
Destination
(Topic)
Destination
(Topic)
Comportamento del sistema
Il JMS mette a disposizione un modello di comunicazione
Publish/Subscribe, basato su una figura destinazione chiamata
Topic (rapporto uno-a-molti)
ServerA
Fase 1: arrivo richiesta del client
ServerB
Client
ServerB
ServerC
ServerB
ServerC
Topic C
ServerA
Topic A
Fase 4: risposta al client
ServerA
Topic B
Fase 3: accordo tra server
Topic Richiesta
Fase 2: esecuzione operazione
ServerC
Liste e messaggi (1)
La lista è un vettore di oggetti (serializzabili) Prenotazione
Un ogetto Prenotazione contiene:
 un messaggio JMS
 un campo di tipo stringa (nome del client che lo ha creato)
Due possibili operazioni
sulla Lista:
■
■
inserisci
cancella
Posizione
Prenotazione
1
2
3
4
5
Kia
Sam
Tom
Mike
Joe
inserisci: Joe
Lista
Posizione
Prenotazione
1
2
3
4
5
Kia
Sam
Tom
Mike
Joe
Lista
Posizione
Prenotazione
1
2
3
4
Kia
Sam
Tom
Joe
Lista
cancella: Mike
Liste e messaggi (2)
JMS Message usati sia per la comunicazione C/S che
Server-to-Server. In JMS un Messaggio è formato da tre
parti:
 Header in cui risiedono informazioni sul messaggio
 Body che determina il tipo di messaggio
facoltativi
 Properties, insieme di coppie nome-valore
HEADER
JMSReplyTo:TopicTemp
BODY
Testo: inserisci
PROPERTIES
Client: Joe
Msg di richiesta
HEADER
HEADER
PROPERTIES
Client: Joe
Server: server-A
Posizione: 4
Msg d’informazione
PROPERTIES
Ack: true
Msg di Acknowledge
HEADER
BODY
Copia di Lista
Msg di ripristino
Struttura Client
La creazione di un client richiede di:
 creare una session con cui
costruire una Topic temporanea,
un Message Producer (publisher)
e un Message
Consumer(subscriber)
 effettuare un lookup alla Topic che
l’amministratore ha creato e
registrato nel namespace sotto il
nome di TopicRichiesta
 creare un messaggio di richiesta
 pubblicare il messaggio
 attendere l’arrivo di una risposta
Client
2- lookup
Namespace
Topic
A
1-crea
session
Publisher
Topic
Richiest
a
message
Subscriber
TempTopic
Struttura Server
Per realizzare un server si deve:
 creare una session da cui effettuare i
lookup alle Topic registrate
 creare un Message Receiver di tipo
asincrono e il relativo listener
 all’interno del metodo onMessage (che
viene sollevato dal listener in caso di
ricezione di un nuovo messaggio) si
devono creare una coppia di Message
Receiver sincroni e una coppia di
Message producer
 i Receiver creati devono attendere i
messaggi pubblicati sulle Topic con cui
gli altri server inviano i messaggi di
coordinazione
 un Producer dovrà inviare i messaggi
di coordinazione per gli altri server,
mentre l’altro Producer eventualmente
invierà il messaggio di risposta al client
tramite la Topic temporanea
Namespace
Server
Topic
B
Topic
A
2- lookup
1-crea
sessio
n
Lista
Topic
C
Topic
Richiest
a
Message
listener
Publisher
Subscriber
A
Subscriber
B
TempTopi
c
Fault tolerance(1)
ServerB
Result=A
Ack
Ack
Result=A
Client
iscrivi
risposta
Ack
Result=A
ServerA
Result=A
Ack
Ack
Result=A
Ack
Result=A
ServerC
Fault tolerance(2)
ServerB
Result=A
Ack
Ack
Result=A
Client
iscrivi
risposta
Result=A
ServerA
ripristino
Result=B
Result=B
se non vi è accordo tra le copie?
ripristino
Result=A
ServerC
Invio risposta al client di mancato servizio
Con tre copie della risorsa riesco a tollerare un guasto e a
rilevarne due.
Gestione invio risposte a i client
La gestione dell’invio dei messaggi tra server e
client è realizzato da un algoritmo che tiene
conto di:
 ultimi invii effettuati
 stato dei server
In questo modo si è sicuri che un client riceva
sempre una risposta e non vi siano punti di
centralizzazione nella comunicazione
server/client
Possibili sviluppi futuri

Aggiungere la possibilità di scegliere il tipo di gestione da
applicare alla Lista. Per esempio si potrebbe prevedere una
Lista che sia organizzata in un modello misto tra FIFO e
priorità dei messaggi.

Utilizzare XML per la creazione dei messaggi, sia di
richiesta che di risposta

creare un sistema di autenticazione dei clienti in modo da
garantire la riservatezza del servizio
Scarica

presentazione