DISTRIBUTED SYSTEMS AND BIG DATA

Anno accademico 2023/2024 - Docente: Antonella DI STEFANO

Risultati di apprendimento attesi

Tutti i sistemi software enterprise e le applicazioni di successo sono oggi sistemi distribuiti (DS) su larga scala, 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 di progettazione 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 per la soluzione delle problematiche fondamentali (come consistenza, fault tolerance, hight avalability, scalabilità, e adeguate performance) e metodologie di progetto fondamentali nella realizzazione di soluzioni complesse su larga scala, con particolare enfasi per le architetture a microservizi.

Conoscenza e capacità di comprensione

Le soluzioni oggi sono tante e diverse e si evolvono grazie alla costante di ricerca di nuovi modelli e tecnologie in grado di far fronte alla crescente richiesta. L’obiettivo è dunque quello di fornire allo studente le conoscenze, gli skill e  la capacità di adattare le competenze acquisite 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; 

  • comunicazione diretta e indiretta 

  • 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 e analisi di serie temporali

  • definizione di data pipeline per il 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

Autonomia di giudizio

lo studente sarà in grado di decidere le architetture software e gli algoritmi più adeguate alla specifica applicazione e di progettare una soluzione  in grado di garantire adeguate proprietà di QoS

Abilità comunicative

lo studente sarà in grado di esporre in modo rigoroso le conoscenze acquisite e con padronanza della terminologia dei Distributed Systems

Capacità di apprendimento

nello scenario eterogeneo e in rapido divenire dei DS occorre essere in grado di apprendere autonomamente nuove metodologie, pattern e algoritmi emergenti nel settore.

L’obiettivo è dunque quello di fornire allo studente gli skill e  la capacità di adattare le proprie competenze alle nuove modalità di progettazione emergenti evolvendo con l’integrazione di nuove soluzioni e tecnologie.

Modalità di svolgimento dell'insegnamento

il corso si sviluppa in lezioni di didattica frontale ed esercitazioni di laboratorio. 

sono previsti seminari su argomenti avanzati: casi reali e tecnologie non in programma ma utili nel contesto dei DSBD.

qualora l'insegnamento venisse 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. Conoscenza di internetworking, web programming e firewall e security. 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 - caratteristiche dei sistemi distribuiti (DS) ed in particolare dei DS du grandi dimensioni (Wide Area DS): overview dei concern, delle criticità e delle architetture software fondamentali. Virtualizzazione e Containerizzazione. Service Oriented Architecture (WS e REST) e _aaS,  microservizi e container, message oriented systems, Sistemi P2P - Strutturati (DHT) e Non  (flooding,es Gnutella), Overlay Network, CDN, Cloud e Fog computing.

Requisiti dei sistemi distribuiti: interoperabiliy, separation of concerns & Transparency,  Quality of Service (QoS), Scalabilità, Availability,and Fault Tolerance, Data consistency. CAP theorem.

Paradigmi e modelli di progettazione del software in sistemi di ampie dimensioni - Pattern per architetture software distribuite, componenti, application server e dependency injection. Service Oriented Architecture (SOA e XaaS), Localization: Naming, Addressing & Discovery. Sistemi multitier e distribuzione verticale. Distribuzione orizzontale. Scaleup & scale out. message oriented systems.

Comunicazione, interoperabilità, naming e localizzazione - C/S e remote procedure  call (gRPC). Group communication, Multicast e Broadcast.  Messaging systems Kafka).  web socket (cenni), 

architetture software dei sistemi distribuiti di grandi dimensioni: architetture Monolitiche e a Microservizi. cenni su enterprise system monolitici (cenni Maven e Spring).  

architetture a Microservizi, architettura esagonale,  containerizzazione. Docker. Docker Compose

DevOps. Orchestrazione. Kubernetes.

Big Data. Caratteristiche dei Big Data. Big Data Storage. Partitioning, sharding. Saga. Data Stream processing. 

Algoritmi distribuiti sistemi sincroni vs. asincroni, modelli di clock:,clock di Lamport e vector clock,  event ordering e concorrenza, global snapshot; dependability e Fault tolerance. Tassonomia dei fault: crash e byzantine, 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. Transazioni Sincrone vs Saga. Load Sharing. cenni di File System distribuiti 

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

  • “Kafka: The Definitive Guide” 2nd ed. G. Shapira, T. Palino, Rajini Sivaram, Krit Petty  O'Reilly Media; 2021.

  • “Cloud Native DevOps with Kubernetes” 2nd ed, Justin Domingus, John Arundel

Programmazione del corso

 ArgomentiRiferimenti testi
1caratteristiche dei Distributed Systems (DS), requisiti di trasparenza, interoperabilità scalabilità, Availability, Fault Tolerance... CAP Theorem
2cloud scenario e cloud native application
3architetture sw: componenti, application service,  SOA, Monolitico vs Microservizi
4comunicazione: gRPC, messaging,  e Kafka
5distribuzione verticale e orizzontale. scale-out e scale up 
6Virtualizzazione; VM e Container
7microservizi e pattern fondamentali
8Docker e Docker compose
9DevOps, Orchestration, Kubernetes
10Big Data. Data Lake e Data Pipeline
11partitioning & sharding; NoSQL data model
12graphDB e Neo4j
13sistemi di monitoraggio e Prometheus
14time series for performance evaluation of DS 
15Temporal ordering, Time consistency and Global Snapshot
16Consenso, Faults in asynchronous and eventually synchronous systems. FLP theorem
17gossip protocol, paxos e raft
18Election Algorithms
19ACID vs BASE. transazioni sincrone e Saga
20replicas, consistency, ed eventual consistency 
21Flooding & DHT (cenni)

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 prima o contestualmente alla prova orale

La prova orale verte sulla discussione del progetto, e da domande inerenti gli argomenti del programma del corso

chi non fa il progetto può sostenere solo la prova orale con una valutazione minima sufficiente del progetto (cioè viene valutata 18/30 che farà media con la valutazione dell'orale e permetterà una valutazione dell'esame di 25/30 al più) 

---

Modalità d'esame per chi svolge le prove in itinere

sono previste come 1 o 2 homework riguardanti progettazione e DevOp a microservizi e analisi di performance e QoS . 

la prova saranno in 1/2 tempi di verifica discussione homework e prova orale sugli argomenti del corso; l'homework dovrà essere consegnato entro gennaio mentre la prova orale dovrà avvenire entro la 1a sessione che si conclude a febbraio.

---

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, caratteristiche di un Orchestrator

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

ENGLISH VERSION