PROGETTAZIONE DI SISTEMI DISTRIBUITI

Anno accademico 2018/2019 - 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

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.