Università degli studi di Bologna Facoltà di ingegneria Reti di calcolatori L-S Un sistema software per la vendita di prodotti on-line Studente: Rinaldi Francesco Matricola 0900011421 Anno Accademico 2003/2004 Acquisti on-line Azienda Cliente soddisfacimento del cliente tempi di risposta accettabili prevenzione di guasti Sicurezza dell’acquisto qualità del servizio disponibilità del servizio Sistema Software Inserimento acquisti nel carrello Cancellazione acquisti dal carrello Visualizzazione acquisti in ordine di costo Visualizzazione acquisti per data di immissione Salvataggio acquisti su un supporto di memorizzazione Il sistema software terrà conto di modelli di comunicazione remota: modello publish and subscribe, modello callback replicazione di servizi tramite copie attive e passive politiche di sincronizzazione per l’ accesso ad una risorsa condivisa tecniche di load sharing Modello publish-and-subscribe Il cambio di stato di un elemento A implica l’invio di una notifica a uno o più componenti dipendenti, di cui A non conosce l’identità a priori. Si distinguono due categorie di oggetti: soggetti e osservatori. Un soggetto (o publisher) può essere associato a zero o pıù osservatori (o subscribers), ciascuno dei quali riceve una notifica ad ogni modifica di stato del soggetto. I Java Bean Un bean in Java denota una classe di componenti Proprietà Personalizzabilità Eventi Introspezione Persistenza Proprietà accessibili con metodi setXXX() e getXXX() Rappresentazione grafica esterna modificabile con un ambiente di lavoro sorgenti di eventi di tipo specifico Rilevamento dinamico di proprietà, metodi e eventi supportati Memorizzazione del bean in una forma personalizzata Architettura di rete Livelli dell’architettura di rete Livello applicativo Livello di servizio Rete Livello Server Tipi di server in esecuzione Server dell’utente Server di sistema Server di supporto Architettura logica 1 - registrazione Azione Login Azione Insert Azione Save BeanControllo Azione Remove 2 – arrivo di un evento 3 - notifica evento Azione Logout 4 - notifica evento Bean di elenco 9 - notifica evento 6 - notifica evento 7 - notifica evento AdapterCosto AdapterElenco Listener Elenco1 5 - notifica evento 10 - notifica evento Bean del costo Bean di elenco 8- notifica evento 11 - notifica evento Listener Elenco2 Listener Costo L’elenco degli acquisti è stato modellato con due Bean a cui sono associati ordinamenti diversi Il bean del costo calcola la somma dei prezzi di tutti i prodotti presenti nel carrello Tecnica di replicazione Replicazione a copie passive server di sistema: una copia attiva e una copia passiva aggiornate in modalità eager Bean di controllo, bean di elenco, bean del costo: una tripla di copie attive e due triple di copie passive aggiornate in modalità eager Evento Load BeanControllo Azione Load BeanControllo Azione Load BeanControllo Azione Load Nodo del Bean di Controllo Bean di Elenco Bean del 2° Elenco Bean di Elenco Bean del 2° Elenco Bean di Elenco Bean del 2° Elenco Nodo del bean del 2° Elenco Bean del costo Bean del costo Bean del costo Nodo del Bean del costo Gestore del Bean di Controllo Il bean di controllo si presenta come un entità senza stato che notifica un evento alle azioni registrate: le singole copie rimangono in esecuzione per tutta la sessione utente ListenerLogin 1 – richiesta nome Bean di controllo 2 – connect GestoreBeanControllo Autenticatore 6 – nome Bean 5 – nome Bean 3 – crea 7 – crea GeneratoreCopie GestoreServizi 4 – crea Nodo Client 8 – connect BeanControllo1 BeanControllo2 BeanControllo3 ThreadPolling ThreadPolling Ad ogni copia passiva del bean di controllo è associato un processo che rileva, ad intervalli regolari di tempo, lo stato di tutte le istanze associate alla copia attiva (Bean di controllo, Bean del secondo elenco, Bean del costo) e delle istanze associate alle copie passive. Politica di prevenzione ai guasti Tecnica di recovery guasti su istanze attive: eliminazione delle istanze rimanenti associate alla copia attiva, fase di elezione guasti su istanze passive: eliminazione delle istanze rimanenti associate alla copia passiva GestoreServizi BeanControllo1 Bean 2°Elenco1 copia attiva copia attiva 1 – crash copia attiva Bean del Costo1 copia attiva 2 – eliminazione copia 3 – eliminazione copia 4 – crea copia fittizia BeanControllo1 BeanControllo2 (BeanControlloFalso) BeanControllo3 BeanControllo1 7 – invio richieste memorizzate 8- aggiornamento archivio BeanControllo1 Fase di elezione 6 – inizializzazione (BeanControllo2) 5 – elezione copia attiva Fase di elezione scambio dei codici identificativi tra tutte le copie passive del bean di controllo elezione della nuova copia attiva (copia con il codice minore) recupero eventi memorizzati nel Bean di controllo fittizio Politica di prevenzione ai guasti Aggiornamento eager delle copie passive La creazione delle copie fittizie (bean di controllo, bean del secondo elenco, bean del costo) il crash su una copia attiva del bean di controllo non impedisce l’aggiornamento delle copie passive restanti. evita l’attivazione di più bean di controllo fittizi nasconde la fase di elezione Il protocollo è corretto se ogni copia passiva del bean di controllo conosce le copie candidate attive altrimenti una copia può aspettare indefinitamente un codice da parte di una istanza passiva che potrebbe esser andata in crash. Server di naming Il gestore di Naming accetta in ingresso il tipo di gestore a cui si vuole accedere e ritorna l’elenco delle stringhe di connessione associate ai server che forniscono il servizio richiesto GestoreNaming1 GestoreNaming2 stato 2 – crea stato RilevatoreStatoGestori GestoreNaming3 stato 3 – memorizzazione richiesta in coda 1 – arrivo richiesta Codice prenotazione: indirizzo server NamingObject 4 – 102 : //156.7.0.98/gestorenaming3 L’accesso ad un gestore di naming avviene tramite il NamingObject, una entità di servizio che dopo aver recuperato la lista di gestore di Naming disponibili accede ad un gestore in modo pseudocasuale. in caso di guasto, il NamingObject procede ad inviare la richiesta ad un altro gestore disponibile Server di Accesso all’archivio L’archivio tiene traccia degli ordini effettuati da un cliente ed è localizzato su tre file: il recupero e la modifica delle informazioni include una fase di coordinamento tra le singole richieste che accedono alla risorsa. GestoreArchivio Archivio1 RichiestaAccesso Coordinatore RichiestaAccesso Coordinatore RichiestaAccesso Coordinatore RichiestaAccesso Coordinatore coordinazione la suddivisione dell’archivio riduce i tempi medi di attesa in coda il gestore dell’archivio genera un processo per ogni richiesta di accesso Archivio2 Archivio3 il protocollo di sincronizzazione basato sull’ ordinamento dei tempi logici di Lamport coinvolge solo i coordinatori è fondamentale rilevare lo stato della Richiesta di accesso che utilizza al momento la risorsa Server di autenticazione La fase di autenticazione permetterà all’utente di accedere al carrello dei prodotti: l’entità di servizio Autenticatore nasconde i dettagli della fase di login all’applicazione. Nodo Client 1 – richiesta indirizzi IP GestoreCopieAutenticatrici NamingObject Autenticatore 2 – indirizzi liberi 5 – crea 3 – crea 4 – connect GeneratoreCopie GestoreRecRisultati 6 – crea 7 – recupera nome del cliente ServizioAutenticazione ServizioAutenticazione ServizioAutenticazione Un guasto su una delle copie non compromette la fase di autenticazione tecnica alternativa: fase di coordinamento tra le copie prima del rilascio del risultato Prototipo Un primo prototipo del sistema è stato sviluppato in Java, di conseguenza le invocazioni remote sono state implementate tramite Java RMI. un’applicazione esterna consente di visualizzare lo stato dei server e degli oggetti registrati nel registry la simulazione di un crash di un componente è ottenuta effettuando un’operazione di unbind ipotesi: i guasti non si verificano mai durante l’esecuzione di una richiesta specificata dal client Conclusioni Il sistema non fa alcuna ipotesi sui tempi di risposta a fronte di una richiesta del cliente: politiche di load balancing tra i gestori di naming ridurre il numero di invocazioni sul gestore di nomi Ulteriori sviluppi futuri includono l’introduzione di: procedure più complesse per il recovery ai guasti gestione delle transazioni accessi multipli dello stesso utente da diversi client