PROGETTAZIONE DI SISTEMI DISTRIBUITI
Anno accademico 2018/2019 - 2° annoCrediti: 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: 1°
Obiettivi formativi
Tutti i sistemi software enterprise sono oggi sistemi distribuiti. Il corso si propone, di presentare in forma sistematica le problematiche fondamentali riguardanti la progettazione di sistemi distribuiti di grandi dimensioni nello scenario odierno, Lo scopo del corso è fornire conoscenze sulle moderne tecnologie in ambito distribuito, e soprattutto sviluppare nell’allievo le capacità di applicare algoritmi e metodologie di progetto fondamentali nella realizzazione di soluzioni complesse, su larga scala.
Più nel dettaglio, il corso mira a
1) fornire conoscenze su
- tecniche di progettazione di componenti e servizi
- modelli, le architetture e i componenti principali di architetture software as a Service (_aaS);
- algoritmi e pattern di condivisione di risorse, controllo della concorrenza e data management.
- algoritmi e tecniche per la gestione di eterogeneità ed interoperabilità dei componenti e di servizi, della Qualità del Servizio, della scalabilità, della tolleranza ai guasti.
- tecniche di virtualizzazione delle risorse di un sistema distribuito e di "containerizzazione" (Docker)
2) sviluppare capacità applicative di tecnologie e strumenti di progettazione di sistemi distribuiti di grandi dimensioni negli scenari reali odierni.
3) acquisire competenze per il design, development e deployment di applicazioni nell' ambito di sistemi enterprise.
Verranno trattati problem solving tipici di SOA, P2P, CDN, Cloud e Fog Computing.
Modalità di svolgimento dell'insegnamento
Il metodo di insegnamento principale è la didattica frontale e le attività di laboratorio
Prerequisiti richiesti
linguaggi C e Java. Progettazione OO eUML. programmazione multithreading. Conoscenza di architetture e protocolli di rete, ed in particolare della suite TCP/IP. DNS. mySQL. Javascript e web programming. socket Java e/o BSD . 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 (con o senza eventuale home-work) durante il corso
Contenuti del corso
Paradigmi, modelli e architetture software di sistemi di ampie dimensioni - multithreading vs virtualizzazione, Pattern per architetture sw distribuite, componenti, container e application server, sistemi multitier e distribuzione verticale ed orizzontale, Enterprise Systems (JEE), Service Oriented Architecture (WS e REST) e _aaS, microservizi e containerizzazione (Docker), message oriented systems (come MQTT o Rabbit MQ) , Sistemi P2P - Strutturati (DHT) e Non (flooding,es Gnutella), CDN, Cloud e Fog computing.
Comunicazione e localizzazione - C/S e Group communication. Multicast e Broadcast. Messaging systems. CallBack ed Event Notification, web socket.
Requisiti dei sistemi distribuiti interoperabilità, Qualità dei Servizi (QoS), Scalabilità, Tolleranza ai guasti e soluzioni, Data consistency.
Algoritmi distribuiti sistemi sincroni vs. asincroni, modelli di clock:,clock di Lamport e vector clock, event ordering e concorrenza, global snapshot; Fault tolerance. Classificazione dei fault: crash e byzantine, dependability e 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. Load Sharing. cenni di File System distribuiti e architetture Big Data.
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 chi non svolge le prove in itinere |
orale + progetto il progetto non è obbligatorio: deve essere richiesto 30 giorni prima della prova orale, viene assegnato 20 giorni prima della prova orale e deve essere discusso contestualmente alla prova orale chi non fa il progetto può sostenere soloa prova orale con una valutazione massima di 25/30 |
Modalità d esame per chi svolge le prove in itinere sono previste delle prove in itinere durante l'erogazione del corso. tipicamente consistono di discussione sulle tematiche teoriche e pratiche e attività di progetto (homework) relative agli argomenti, sia teorici che pratici ,trattati. gli studenti potranno concordare se cimentarsi su homework oppure limitarsi ad una discussione orale degli argomenti trattati. Naturalmente in questultimo caso la valutazione sarà condizionata: la mancanza di homework limita il massimo raggiungibile nell valutazione a 26/30 le prove saranno in 2 tempi di verifica: una è prevista nel periodo di dicembre (la data può essere concordata) e una finale a completamento entro la data del 1o appello utile. |