Progetto
Message Queues Service
Olivelli Enrico
Corso di Reti di Calcolatori LS
A.A. 2003-2004
Obiettivi del progetto
 Un servizio di gestione di code
–
–
–
–
Affidabilità
Tolleranza ai guasti
Flessibilità
Indipendenza dal linguaggio di programmazione e
dal sistema operativo client
 Case study interessante per
– Replicazione attiva
– Assenza di Gestione Centralizzata
– Oggetti attivi
– Ordinamento Atomico
– Protocollo Ricart & Agrawala
Idea base
?
N3
N1
L’utente Bob vuole inviare
un messaggio a Fred
N2
Bob affida il msg al
servizio QMS presso N1
Il gruppo QMS si coordina
ed il messaggio viene
replicato su N2 ed N3
Fred comunque
recupera il
messaggio da
QMS attraverso N3
Anche nel caso che il nodo
N1 si guastasse
Dietro le quinte…
 Il client di Bob richiede una modifica ad una
coda (aggiungere un messaggio)
 Il nodo N1 richiede l’accesso esclusivo alla
coda per modificarla
 Il nodo N1 modifica la coda
 Il nodo N1 rilascia la coda
Two Phase
Lock Protocol
Ordinamento
atomico
Coordinamento (1)
 Per ogni coda
– Uno stack di messaggi di coordinamento
– Un insieme di possibili possessori della coda
 Nodi ordinati (a priori o dinamicamente)
Ow = N1
Locked!
Ow = N1
Ow = N1
N1
N2
N3
N1 Req Lock
N1 Req Lock
N1 Req Lock
N2
N1
N1
Agree
Change
Unlock
Lock
N1
N1 Change
Unlock
N1 Change
Unlock
N1
N3 Agree Lock
N1 Agree Lock
La coda viene modificata solo quando tutti i nodi
sono d’accordo sul fatto che N1 (e solo N1!) la
modificherà
Coordinamento (2)
 Richieste concorrenti di modificare una coda
N1
OW=N1
OW=N3,N1
Locked!
N2
OW=N1
OW=N3,N1
N3
OW=N3
Locked!
OW=N1
N1 Req Lock
N1 Req Lock
N3 Req Lock
N1N1
Agr
Unlock
Lck N1
N3
N1Req
Unlock
Lock
N1
N1Req
Unlock
Lock
N2 Agr Lck N1
N3 Unlock
N2N3
Agr
Unlock
Lck N3
N3
N3Agr
ReqLck
Lock
N1 Adesso N3 può modificare la coda
N3 Unlock
Adesso N1 può modificare la coda
N3 Agr Lck N3
N1 Agr Lck N3
Gestione del gruppo (1)
 Il gruppo deve coordinarsi non solo per gestire le
code
– Aggiunta di un nuovo nodo
– Partenza di un nodo
– Dichiarazione del fallimento di un nodo
 Recovery di uno stato consistente
 QMS garantisce
– Continuità di servizio anche durante l’aggiunta di
un nodo
– Continuità di servizio anche a fronte di guasto di
un nodo (purché resti almeno un nodo attivo nel
gruppo)
Gestione del gruppo (2)
 Aggiunta di un nuovo nodo al gruppo
Richiesta di join a N1
Freeze !
Copia stato code
Copia info su Gruppo
Info sul nuovo nodo
Ready
Ora il nuovo nodo fa
parte del gruppo
Il gruppo viene “congelato”, tutti i messaggi di coordinamento sulle
code e tutte le richieste dei client vengono poste in un buffer
Quando il gruppo viene dichiarato di nuovo “pronto” i messaggi
bufferizzati vengono processati come se fossero stati ricevuti in
ritardo
Gestione del gruppo (3)
 Partenza di un nodo dal gruppo
– Il nodo informa il gruppo della propria partenza
– Gli altri nodi si “dimenticano” del nodo
 Eliminare i messaggi di lock/agree pendenti
 Avviare le operazioni sospese in attesa dell’
agree del nodo che parte
 Dichiarazione del fallimento di un nodo
– Un nodo ha un sospetto di fallimento di un altro
nodo
– Vengono informati tutti i nodi del fallimento
– Il nodo allontanato se ancora attivo deve iniziare
nuovamente il protocollo di join (vedendosi
allontanato dal gruppo)
Client API
 Interfaccia standard
– Protocollo http/https
– XML
 ADT Messaggio
– Mittente / Destinatario / Corpo
– Stringhe con significato a carico dell’applicazione
client
 API semplice
– Creazione/Distruzione di code
– Inserimento/Lettura/Estrazione di messaggi
Prototipo
 Applicazione Web Java




– Portabilità
– Semplicità nel deployment
– Librerie standard per XML e HTTP
Libreria Java QMS Client API
Semplificazioni
– Protocollo di join al gruppo semplificato
– Persistenza solo in memoria RAM
Componenti collaterali sviluppati
– Scheduler per gestire l’asincronicità delle operazioni da
portare avanti (il nodo è praticamente un ‘oggetto attivo’)
– Servlet per interfaccia HTTP N2N e C2N
– Amministrazione Web
Predisposto per estensioni
– Sistema Publish/Subscribe
– Riordinamento dei messaggi
Caratteristiche del servizio
 Affidabilità
– Tolleranza ai guasti
– No gestione centralizzata
 Apertura / Indipendenza dal linguaggio
– Interfaccia basata su protocolli/formati
standard
 Servizio general purpose
– Il sistema non pone particolari vincoli sul
significato dei messaggi trattabili
Limiti
 Richiesta di canali di comunicazione affidabili fra i
nodi
– Messaggi ritardati ma mai persi
– Grafo dei nodi completamente connesso
 Over-head dovuto alla sincronizzazione nell’accesso
per modificare le code
 Sistema poco scalabile
– Numero di messaggi scambiati
– Tutte le entità da sincronizzare per ogni
operazione significativa
Sviluppi futuri
 Differenziare le politiche di gestione delle code
– Qualità di servizio
– Sicurezza
 Servizio publish/subscribe
– Il client non è costretto a fare polling ma può
registrarsi come interessato a sapere quando un
certo tipo di messaggio è stato inserito in una
coda
 Ordinamento in base all’invio dei messaggi
– Etichettamento sul client e poi ricostruzione della
sequenza
 Ordinamento CAUSALE dei messaggi
– Non mostrare messaggi “effetto” senza “causa”
Scarica

presentazione