PROGETTAZIONE DI SISTEMI DISTRIBUITI

Anno accademico 2017/2018 - 2° anno
Docente: Antonella DI STEFANO
Crediti: 9
SSD: ING-INF/05 - Sistemi di elaborazione delle informazioni
Organizzazione didattica: 225 ore d'impegno totale, 146 di studio individuale, 49 di lezione frontale, 30 di esercitazione
Semestre:
ENGLISH VERSION

Obiettivi formativi

Conoscere gli algoritmi fondamentali per la gestione delle risorse in scenari reali di grandi dimensioni e i pattern classici delle architetture distribuite. Acqisire competenze per la gestione degli scenari distribuiti a garanzia di scalabilità, high availability, robustezza, trasparenza e QoS. Conoscere tecnologie e strumenti di progettazione di sistemi distribuiti di grandi dimensioni nello scenario odierno. Conoscere i paradigmi di progettazione tipici dei Component Based Enterprise Systems, il modello SOA, e la relativa incarnazione in WS e REST. Conoscere tecniche di virtualizzazione delle risorse di un sistema distribuito con particolare riferimento al Cloud. Acquisire competenze per il design, development e deployment di applicazioni a componenti nell' ambito di sistemi enterprise.


Prerequisiti richiesti

linguaggi C e Java. Progettazione OO. programmazione multithreading. Conoscenza di architetture e protocolli di rete, ed in particolare della suite TCP/IP. DNS. socket Java e BSD (almeno Java). Conoscenza delle tecniche di progettazione del software e dei pattern fondamentali di GoF. conoscenze di base relative al management di sistemi UNIX-Like, basic Unix Bash programming, SSH, nmap, iptables, Iperf


Frequenza lezioni

la frequenza (70%) è richiesta solo agli studenti che intendano sostenere le prove in itinere e/o fare l'home-work durante il corso


Contenuti del corso

Paradigmi e modelli di progettazione del software in sistemi di ampie dimensioni - Qualità dei Servizi (QoS), Pattern per architetture sw distribuite, sistemi C/S, multitier, P2P, Cloud, componenti e container, Enterprise Systems, JEE, EJB, SOA, WS e REST

Comunicazione, interoperabilità e localizzazione - multiThread e Networking. C/S e Group communication. Multicast e Broadcast. Socket BSD e Java. Meccanismi di invocazione e chiamata remota: Dynamic Invocation, message passing. CallBack ed Event Notification.

Algoritmi distribuiti: sistemi sincroni vs. asincroni; modelli di clock: clock di Lamport e vector clock. event ordering e concorrenza. global snapshot. Classificazione dei fault, fault tolerance e dependability. algoritmi di agreement in presenza di varie topologie di fault, fault detector. algoritmi cooperativi: elezione, mutua esclusione, deadlock detection. Transazioni distribuite, serializzabilità recuperabilità e commitment. Consistenza e Replicazione. Distribuzione delle repliche; Protocolli di replicazione attiva e passiva. File system distribuiti.

Sistemi P2P - Strutturati (DHT) vs Non strutturati (flooding). Gnutella, Chord,

Cloud, Virtual Machine e OpenStack


Testi di riferimento

  • Pattern Oriented Software Architecture vol. 1-4 Buschmann, Schmidt et alii (particolare riferimento a vol. 2 e 4)
  • Distributed Systems: Concepts and Design, G. Coulouris, J. Dollimore, T. Kindberg, G. Blair, 2011 – 5th edition”, Addison Wesley, 2011.
  • K. Hwang, J.Dongarra, G.C. Fox, “Distributed and Cloud Computing”, Morgan Kaufmann, 2011.
  • Arun Gupta “Java EE 7 Essentials ”, O’Reilly 2013

per le Tecnologie si consiglia di consultare direttamente i siti web indicati durante il corso


Verifica dell'apprendimento

Modalità di verifica dell'apprendimento

Modalità d esame per non frequentanti o per chi non svolge le prove in itienere

orale + progetto (il progetto non è obbligatorio: assegnato su richiesta 20 giorni prima della prova orale