Safe and Efficient Dynamic Updates of Distributed Software Systems
Valerio Panzica La Manna · 2014
L’evoluzione dinamica del software ha un ruolo cruciale nella progettazione, lo sviluppo e il mantenimento di sistemi software distribuiti basati su componenti. L’evoluzione, tipicamente realizzata attraverso il rilascio di aggiornamenti software, proviene dai cambiamenti nei requisiti o nell’ambiente, dalla necessita di rilasciare nuove versioni e da esigenze di ottimizzazione. L’aggiornamento del software e un processo tipicamente off-line poiche l’installazione della nuova versione richiede lo spegnimento, l’aggiornamento, ed il riavvio del sistema. Tuttavia, un numero sempre piu crescente di sistemi che opera in un ampia varieta di domini applicativi, dai sistemi per il processamento di transazioni finanziarie o per la gestione delle emergenze, ai sistemi critici per il controllo del traffico aereo e dei trasporti autonomi, devono offrire un servizio continuo che non puo essere interrotto nemmeno durante l’aggiornamento. Questi sistemi devono essere aggiornati dinamicamente, a runtime, mentre sono in esecuzione. L’aggiornamento dinamico del software deve essere allo stesso tempo affidabile ed efficiente. Un aggiornamento affidabile impone che il processo non porti il sistema in uno stato di errore inatteso. Un aggiornamento efficiente richiede la capacita di completare il processo il prima possibile e con minimo overhead. Recenti attivita di ricerca nelle aree dei linguaggi di programmazione, sistemi distribuiti, e architetture del software, hanno proposto diversi approcci per la progettazione di sistemi software aggiornabili dinamicamente. Tuttavia, gli approcci proposti non hanno finora fornito una risposta adeguata all’importante problematica dell’identificazione di criteri generali volti a garantire un aggiornamento dinamico che sia allo stesso tempo affidabile ed efficiente. Questa tesi affronta questo problema proponendo approcci innovativi basati su modelli per la definizione e identificazione automatica di nuovi criteri per l’aggiornamento dinamico del software. Questi criteri non dipendono da particolari tecnologie e linguaggi di programmazione utilizzati per l’implementazione del sistema, e verificati a runtime, permettono un aggiornamento dinamico affidabile ed efficiente. I risultati di questa tesi sono organizzati in due principali contributi che si differenziano nei sistemi oggetto di studio e nei modelli adottati: 1) Aggiornamenti dinamici di sistemi transazionali basati su Version Consistency. Si introduce il criterio di version consistency per la sostituzione dinamica di componenti software che eseguono transazioni distribuite. Si propone un algoritmo distribuito per garantire la version consistency attraverso la modellazione delle dipendenze dinamiche che intercorrono a runtime tra i vari componenti del sistema. Vengono fornite due implementazioni dell’approccio per aggiornare, in maniera efficiente e affidabile, processi BPEL distribuiti, e sistemi basati sul paradigma SCA (Service Component Architecture). 2) Aggiornamenti dinamici di sistemi software-intensive guidati dalla specifica. Si considerano sistemi distribuiti i quali componenti interagiscono attraverso l’invio e la ricezione di messaggi per lo svolgimento di complesse funzionalita. La specifica di questi sistemi descrive in dettaglio il comportamento del sistema e le assunzioni sull’ambiente. Per questi sistemi vengono definiti un insieme di criteri di aggiornamento dinamico che si basano sul cambiamento della specifica. Inoltre, si propone un approccio che genera automaticamente delle implementazionni della specifica modellizzate da automi che sono in grado di aggiornarsi dinamicamente e quindi offrire il nuovo comportamento specificato. E stato implementato un tool basato su Eclipse per l’ingegnerizzazione di sistemi aggiornabili dinamicamente. Il tool supporta tutte le fasi dell’approccio proposto: dalla modellazione della specifica, alla generazione e simulazione dell’automa aggiornabile dinamicamente.