Modello di replicazione attivo e di supporto alla tolleranza ai guasti in ambito MOM Autore: Claudio Fusconi Matricola: 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 Argomenti coinvolti: Replicazione attiva delle risorse Coordinamento tra copie Paradigma Publish/Subscriber per lo scambio dei messaggi Realizzare un sistema per la gestione di una coda di messaggi tipo FIFO, rappresentante una lista dattesa, in cui un client può: Inserire un messaggio Cancellare un messaggio
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 lutilizzo del servizio di messaging: Connection Factory Connection Factory Connection Crea Session Crea Message Producer Message Producer Crea Message Consumer Message Consumer Crea Invia a Destination (Topic) Ricevi da Destination (Topic) Crea message
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) Fase 1: Fase 2: Fase 3: Fase 4: Client Topic Richiesta ServerA ServerC ServerB arrivo richiesta del client risposta al client ServerAServerCServerB Topic A Topic BTopic C accordo tra server ServerAServerC ServerB esecuzione operazione
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) Lista Posizione Prenotazione 1 Kia 2 Sam 3 Tom 4 Mike 5 Joe inserisci: Joe Due possibili operazioni sulla Lista: inserisci cancella cancella: Mike Lista Posizione Prenotazione 1 Kia 2 Sam 3 Tom 4 Mike 5 Joe Posizione Prenotazione 1 Kia 2 Sam 3 Tom 4 Joe Lista
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 Properties, insieme di coppie nome-valore facoltativi PROPERTIES Client: Joe BODY Testo: inserisci HEADER JMSReplyTo:TopicTemp Msg di richiesta PROPERTIES Client: Joe Server: server-A Posizione: 4 HEADER Msg dinformazione PROPERTIES Ack: true HEADER Msg di Acknowledge BODY Copia di Lista HEADER 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 lamministratore ha creato e registrato nel namespace sotto il nome di TopicRichiesta creare un messaggio di richiesta pubblicare il messaggio attendere larrivo di una risposta session Subscriber Publisher Topic Richiest a TempTopic Client 1-crea 2- lookupNamespace Topic A message
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 allinterno 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 laltro Producer eventualmente invierà il messaggio di risposta al client tramite la Topic temporanea sessio n Topic Richiest a TempTopi c 1-crea 2- lookup Namespace Topic B Server Topic A Topic C Message listener Publisher Subscriber B Subscriber A Lista
ServerC ServerB Fault tolerance(1) ServerA Client Result=A iscrivi risposta Ack
ServerC ServerB Fault tolerance(2) ServerA Client Result=A Result=B Ack ripristino iscrivi risposta se non vi è accordo tra le copie? Con tre copie della risorsa riesco a tollerare un guasto e a rilevarne due. Invio risposta al client di mancato servizio
Gestione invio risposte a i client La gestione dellinvio 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