DISTRIBUTED SYSTEMS AND BIG DATA

Anno accademico 2022/2023 - Docente: Antonella DI STEFANO

Risultati di apprendimento attesi

Tutti i sistemi software enterprise e le applicazioni di successo sono oggi sistemi distribuiti caratterizzati da grandi dimensioni di codice e dati. Il corso si propone di presentare in forma sistematica le problematiche fondamentali riguardanti la progettazione di sistemi distribuiti di grandi dimensioni nello scenario odierno e fornire conoscenze sulle moderne tecnologie in quest'ambito.

In uno scenario in rapido divenire, come quello trattato in questo corso, l’obiettivo è soprattutto sviluppare nell’allievo le capacità di applicare algoritmi e metodologie di progetto fondamentali nella realizzazione di soluzioni complesse, su larga scala.

Conoscenza e capacità di comprensione

Le soluzioni oggi sono tante e diverse e si evolvono grazie ad una costante attività di ricerca in grado di far fronte alla crescente richiesta. L’obiettivo è dunque quello di fornire allo studente gli skill e le conoscenze e  la capacità di adattare le proprie competenze alle diverse modalità di progettazione emergenti evolvendo con l’integrazione di nuove soluzioni e tecnologie.

Più nel dettaglio, il corso mira a fornire conoscenze su

  • strutture software per development, delivery & deployment ; 

  • modelli 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 dell'interoperabilità, della Qualità del Servizio (QoS), della scalabilità, della consistenza e della tolleranza ai guasti; 

  • algoritmi di gestione di transazioni, repliche;  

  • pattern e tecnologie di progettazione di microservizi;

  • tecniche di virtualizzazione delle risorse di un sistema distribuito e di "containerizzazione";

  • tecniche di monitoraggio

  • analisi di serie temporali

  • caratteristiche di storage e processing dei Big Data; 

“Conoscenze applicate e capacità di comprensione”

Le conoscenze fornite e soprattutto la modalità orientata alla progettazione e sviluppo di soluzioni software mirano a sollecitare l'allievo a sviluppare capacità di applicare tecnologie e strumenti per la progettazione, lo sviluppo e il deployment di sistemi distribuiti di grandi dimensioni negli scenari reali odierni. Durante il corso l'allievo attraverso esercitazioni e homework potrà mettere in pratica quanto appreso in modo da: 

  • saper utilizzare le principali strategie atte a garantire determinati livelli di QoS in termini di performance, scalabilità, availability e robustezza nei sistemi distribuiti.

  • Saper avvalersi di tecniche per la progettazione ed il deployment di micro-servizi su piattaforme container based (Docker) e orchestrazione Kubernetes.

  • Saper progettare sistemi per la gestione dei big data, integrando data pipeline, data lake e datawarehouse

Modalità di svolgimento dell'insegnamento

Il metodo di insegnamento principale è la didattica frontale ed esercitazioni   

poichè l'insegnamento verrà impartito in modalità mista o a distanza potranno essere introdotte le necessarie variazioni rispetto a quanto dichiarato in precedenza, al fine di rispettare il programma previsto e riportato nel syllabus

Prerequisiti richiesti

linguaggio java. Progettazione OO, e UML. programmazione multithreading. Conoscenza di architetture e protocolli di rete, ed in particolare della suite TCP/IP. DNS. mySQL 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 non è obbligatoria ma fortemente incoraggiata.

la frequenza (70%) è necessaria solo per gli studenti che intendano sostenere le prove in itinere

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, Service Oriented Architecture (WS e REST) e _aaS,  microservizi e containerizzazione (Docker), message oriented systems (Kafka) , Sistemi P2P - Strutturati (DHT) e Non  (flooding,es Gnutella), CDN, Cloud e Fog computing, Data Lake, DataWarehouse e Big Data .

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, ETL, ELT, Data Pipeline. 

Testi di riferimento

riferimenti principali

  • “Distributed Systems: Concepts and Design”, G. Coulouris, J. Do llimore, T. Kindberg, G. Blair, 2011 – 5th edition”, Addison Wesley, 2011.

  • “Microservices Patterns, with examples java”, Chris Richardson, Madison

  • per le tecnologie si consiglia di consultare i siti web indicati durante il corso

altri testi consultabili

  • “Distributed Computing: Principles, Algorithms, and Systems”, Kshemkalyani, M Singhal,

  • “Pattern Oriented Software Architecture” vol. 1-4 Buschmann, Schmidt et alii (particolare riferimento a vol. 2 e 4)

  • “Distributed and Cloud Computing”, K. Hwang, J.Dongarra, G.C. Fox, Morgan Kaufmann, 2011.

  • "Cloud Computing: Theory and Practice, Second Edition", Dan Marinescu, Morgan Kaufmann, 2018

  • K.P. Birman, Guide to Reliable Distributed Systems: Building High-Assurance Applications and Cloud-Hosted Services”, Springer, 2012.

  • “Kubernetes: Up and Running: Dive into the Future of Infrastructure”, K Hightower, O’Reilly 2017

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

Programmazione del corso

 ArgomentiRiferimenti testi
11_tipi di Distributed Systems (DS)
22_caratteristiche dei Distributed Systems (DS)
33_lo scenario cloud
44_architettura sw: componenti, connettori, ruoli C/S e P2P
54a_modelli di comunicazione
65_placement, distribuzione verticale e orizzontale
76_SOA e REST
86b_springboot
97_monolithic vs microservice Architecture
108_DOCKER e Docker Compose
119_kubernetes
1210_messaging
1311_kafka
1412a_HDFS, MapReduce, Function as a Service
1512_Big Data. Data Lake e Data Pipeline
1612b partitioning & sharding; NoSQL data model
1713 graphDB e Neo4j
1814 time series
1915 Prometheus
201alg_Tempo
212alg_GlobalSnapshot
223alg_FaultDelivery
234alg_Consenso
245alg_Paxos; Raft
256alg_Flooding & DHT
266alg_a gossip
277alg_transactions & ACID properties
288alg_saga
299alg_repliche
3010alg_ election;
3111alg_CAP theorem & BASE properties

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 solo la prova orale con una valutazione massima di 26/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 quest'ultimo caso la valutazione sarà condizionata: la mancanza di homework limita il massimo raggiungibile nell valutazione a 26/30

Le prove saranno in 1/più tempi di verifica (2 massimo per esami orali); la prova finale a completamento dovrà essere entro gennaio.

Qualora l'insegnamento venisse impartito in modalità mista o a distanza potranno essere introdotte le necessarie variazioni sulla prova in itinere rispetto a quanto dichiarato in precedenza; tale prova potrebbe anche non essere svolta

Esempi di domande e/o esercizi frequenti

esempi di domande 

trasazioni ACID, clock logici, consistenza, saga, microservizi, messaging, API gateway, Kafka, repliche attice e passive, CAP theorem, global snapshot

esempi di progetti con varianti in base al numero degli studenti coinvolti si trovano su studium

ENGLISH VERSION