Producer – Consumer System Di Carlo Matteo 195111 CdLS Ingegneria Informatica (0234) Reti di Calcolatori LS A.A. 2004/2005 Modello semantico del sistema – «store and forward» Producer Queue Consumer Consumer I consumatori sono scelti arbitrariamente… Consumer Obiettivi e ipotesi di progetto Modello di replicazione passiva con copie calde permetta ad ogni cliente di usufruire dei servizi, permetta ad applicazioni diverse, in generale di linguaggi differenti, di fruire il sistema, sia tollerante ai guasti, operazioni tipiche per la gestione di cluster per alta disponibilità monitoraggio dei servizi, migrazione del servizio, controllo dello stato dei nodi; garantisca qualità del servizio, garantisca qualche forma di sicurezza. Ipotesi di guasto singolo Client-Proxy-Server Client Application Client Portion Client/Proxy Interface Public Interface Proxy Application Proxy Portion Server Request Result Application Server Portion Relazione client/proxy: Proxy Interface Stessa applicazione Proxy come modulo del SO Proxy come server nella rete locale Public interface: in generale questa interfaccia potrebbe anche non essere pubblica; nel caso specifico si fa riferimento a proxy che utilizzano interfaccia definite da protocolli di uso comune come per esempio http. Modello generale del sistema Proxy Client Client Master Client Slave Come conosce i server? Nei parametri di configurazione del proxy Proxy ci deve essere almeno l’indirizzo del master Slave Client Client Client Architettura Server – parte 1 ServiceManager StateManager AddressManager HotStandByManager SenderLiveManager ReceiverLiveManager RecoveryManager Sender Receiver Architettura server – parte 2 ServiceManager : oggetto remoto a cui il proxy rivolge le sue richieste; Caso Mastersempre attivo; Caso slave pronto per essere attivato se primo slave, altrimenti comunque aggiornato; AddressManager : memorizza gli indirizzi della catena; responsabile dell’ingresso nella catena da parte di uno slave ; fornisce a tutti gli altri manager le informazioni necessarie per la comunicazione con i server pari; StateManager : mantiene aggiornato lo stato della copia slave collegata al server; devono essere inviati aggiornamenti man mano che arrivano richieste da parte dei clienti; Heartbeat: SenderLiveManager: manda messaggi a cadenze regolari di tempo al suo master del tipo “are you alive?”; ReceiverLiveManager: arrivato il messaggio di “are you alive?”, da parte del suo slave, risponde con un messaggio di “alive”; RecoveryManager : responsabile del recovery di un guasto; Sender e Receiver : gestiscono i canali di comunicazione; HotStandByManager: coadiuvante di tutti i manager. Code e Messaggi – parte 1 gestione delle code dei messaggi è delegata dal serviceManager (incarico di prendere le richieste dei proxy) al queueManager; Code: serie di liste ordinate di messaggi, in cui ogni lista ha una propria priorità (utilizzata nello smistamento dei messaggi); persistenti e non persistenti (in fase di sviluppo) Il messaggio è un dato composto da: un sender: colui che invia il messaggio; uno o più recipient: i destinatari del messaggio (possibilità di avere destinatari particolari); un contenuto: nella semantica java, possiamo definire il contenuto come un qualsiasi oggetto serializzabile. Code e Messaggi – parte 2 Le operazioni che possono essere effettuate dal cliente sono: aggiunta di una coda; rimozione di una coda; produzione di un messaggio: deve essere specificato in quale coda dovrà essere inserito il messaggio e con quale priorità; consumo di un messaggio: viene prelevato e rimosso dalla coda specifica il messaggio più prioritario; ottenere una lista delle code presenti; chiedere se esiste una certa coda; chiedere se esistono messaggi in una certa coda. Protocolli di comunicazione La comunicazione avviene sempre a catena dal master fino all’ultimo slave; Comunicazione tra manager: ogni manager gestisce una serie di variabili che sono visibili a tutti gli altri manager ma che non possono essere modificate da loro(manager delle code escluso); Comunicazione tra client, proxy e master: varie possibilità Client-proxy: comunicazione locale, remota; Proxy-server: comunicazione remota. Comunicazione a catena Message Master Slave Message Slave Comunicazione di ingresso slave 2. New Address Chain Master Slave 2. New Address Chain, queues 3. connection 1. Entry: hostname, port New Slave Aggiornamento stato Request: produce Message Proxy Client Client Client Request: produce Message Request: produce Message Master Aggiornamento stato Aggiornamento stato Slave Comunicazione di vita: heartbeat 1. Are you alive? Master 1. Are you alive? Slave 2. Alive Se entro un certo tempo non mi risponde: MORTE MASTER Slave 2. Alive Se entro un certo tempo non mi chiede nulla: MORTE LAST SLAVE Crash o caduta del master New Address chain Master Slave 1.Morte master 2. Divento il nuovo master 3. Mando la nuova Address chain Slave Crash o caduta di uno slave 2. Recovery, new Address chain Master 3. New Address chain Slave Slave Slave 4. New Address chain 1. Morte slave Crash o caduta dell’ultimo slave Master 3. Recovery, New Address chain 4. New Address chain Slave Slave Slave 4. New Address chain 1.Morte ultimo slave 2. Divento il nuovo ultimo slave 3. Mando la nuova Address chain al master Errori interni Master Winner Queue 2. Conteiner queue 2. Send Conteiner queue 3. Send Winner Queue Winner Queue Winner Queue + my queue Slave 1 2. Conteiner queue Slave 2 Conteiner queue Slave 3 + my queue 1. 2. Problemi con una certa coda… Mando conteiner queue Prototipo Ambiente di sviluppo: java; Manager: classi java e solo alcuni di loro sono thread; Comunicazione tra i server: socket stream; Per ogni canale di comunicazione: thread receiver + switcher per la distribuzione del messaggio ai manager(interfaccia IListener); Il proxy comunica con il master attraverso java RMI; Oggetti presenti nell’rmiregistry: serviceManager e il Chain serviceManeger: servizio delle code; Chain: permette al proxy di avere informazioni su tutta la catena dei server; Il proxy è stato implementato come un classe appartenente all’applicazione client; Configurazione server e proxy: file xml (esempio) Conclusioni e sviluppi futuri Obiettivi rispettati QoS nella consegna dei messaggi e interazione tra server Tolleranza ai guasti Cluster per alta disponibilità Sviluppi futuri Sicurezza: utenti con diritti Comunicazioni sicure DNS Politiche di filtro dei messaggi