MCSA Infrastruttura a supporto della code mobility Mobile Code System Architecture Pierfrancesco Felicioni 171856 Reti di Calcolatori L.S. 2005/2006 Definizioni Mobile Code: software in grado di viaggiare su una rete eterogenea, attraversando domini di protezione e che può essere eseguito automaticamente all’arrivo a destinazione Mobile Computation: computazione che inizia su qualche nodo lungo una rete, e che può continuare la sua esecuzione su qualche altro nodo Vantaggi del Code Mobility Permette di aggiornare un server e riqualificarlo senza dover interrompere il servizio: reti intelligenti e attive Traffico di rete ridotto Spedisce direttamente un processo sul server evitando ripetute iterazioni Task Client Response Server Efficienza Invia uno o più task sul server sfruttando i vantaggi di una macchina ad alte performance Task Response Client2 Macchina specializzata in attesa di task da eseguire Obbiettivi Realizzare una architettura a supporto della code mobility che sia: Tollerante ai guasti Replicazione Trasparente verso il cliente Affidabile Controllo correttezza delle risposte Efficiente Load Sharing/Balancing Analisi Tolleranza ai guasti Trasparenza verso il cliente Implementazione del modello a copie attive All’atto del collegamento In caso di guasto Efficienza Ottenuta mediante un bilanciamento del carico di lavoro, fra le entità che forniscono il servizio Architettura L’architettura che è stata implementata è la Client/Server Per ovviare ai tipici problemi di una architettura centralizzata sono state introdotte forme di replicazione (copie attive). Il client invia dei task da eseguire ad un gestore (master) che passa le richieste alle varie copie (slave) Il gestore coordina gli slave e verifica la correttezza delle risposte, restituendo il risultato al client In questo modo il client comunica con i servitori in modo implicito Architettura del sistema Si occupa di assegnare al client un gruppo che gestisca le sue richieste Client che richiede di registrarsi presso un server Proxy Ogni gruppo di server è formato da un master e zero o più slave Il proxy conosce la composizione di ogni gruppo, poiché tutti i server devono registrarsi presso di lui Gli slave eseguono le stesse operazioni: copie attive Client Gruppo 1 Master gruppo1 Slave gruppo1 Slave gruppo 1 Gruppo 2 Master gruppo 2 Slave gruppo 2 Fault Tolerance E’ stato implementato il modello a copie attive. Il sistema gestisce i seguenti fault: Caduta del master Mentre è idle Ogni master è controllato dagli stessi slave e dal proxy Durante la gestione di una richiesta da parte del client Il master dopo aver ricevuto un task (richiesta) la inoltra sugli slave. Lo slave designato come nuovo master, invia la risposta al client in call back e aggiorna i riferimenti del client (trasparenza). Fault Tolerance Esempio di gestione della fault tolerance nel caso peggiore I’m new master Response Task Task Slave A Client Master Task Il proxy, entità che controlla i master è caduto Proxy Slave B Fault Tolerance Caduta di uno slave: Mentre è idle: il master controlla periodicamente gli slave del proprio gruppo. In caso in cui uno slave cade il master provvede a rimuoverlo dalla sua lista e a notificarlo agli altri componenti del gruppo Prima di rispondere ad una richiesta inoltrata dal master: Ogni task inviato dal client viene eseguito su tutti gli slave. Il master prima di inviare un responso, controlla che tutti gli slave abbiano risposto. In caso contrario accerta che non ci sia qualche slave caduto, se si, lo deregistra e lo notifica al resto del gruppo Fault Tolerance Risposte incoerenti Nel caso in cui le risposte restituite dagli slave, siano incoerenti Viene scelta la risposta data dal maggior numero di server facenti parte del gruppo Nel caso in cui i responsi siano tutti diversi fra loro, viene restituita al client una condizione di errore Efficienza Proxy Load Sharing Decide quale gruppo assegnare ad un client, in base a due parametri: Numero di richieste attualmente gestite Numero di client connessi Questo tipo di bilanciamento (a priori) non è efficace. Supponiamo che in una fase successiva, i client connessi ad un gruppo inizino ad inviare un numero esorbitante di richieste, mentre nell’altro gruppo questa situazione non si verifichi. In questo caso il bilanciamento del carico non avrebbe esordito l’effetto voluto. Efficienza Master Load Balancing Nel caso in cui il numero di richieste da gestire superi una certa soglia, il master chiede al proxy di poterle smistare su un altro gruppo. Se il proxy non riesce nell’intento, il master raggiunto il valore soglia rifiuta ulteriori registrazioni da parte di altri client. Master Load Balancing Valore soglia pari a 3 Unregistered Client1 Request Redirected Client 2 Task Task Client 3 Master gruppo 1 Task Response Client 1 Proxy Redirect Request of Client1 I’mClient your 6 master Master gruppo 2 Task Register Client1 and compute the active request Client 4 Client 5 Implementazione Ogni task dovrà implementare la seguente interfaccia: Il metodo run viene invocato all’arrivo di un nuovo Task <ITask extends Serializable>> Object run() String toString() Il metodo toString permette di confrontare i vari risultati Conclusioni Il sistema che è stato realizzato, soddisfa i requisiti di cui si è parlato precedentemente: Affidabilità Trasparenza Efficienza Tolleranza ai guasti Tuttavia….. Il sistema è basato su una struttura centralizzata Il proxy è un entità centrale del sistema. Sviluppi futuri Gestire la fault tolerance lato proxy Introdurre forme di sicurezza Autenticazione del client Supporto per la strong mobility Composizione automatica di gruppi di server in modo da trovare un compromesso tra: Replicazione Load Balancing