INGEGNERIA DEI SISTEMI DISTRIBUITI E LABORATORIOModulo LABORATORIO
Anno accademico 2025/2026 - Docente: EMILIANO ALESSIO TRAMONTANARisultati di apprendimento attesi
1. Conoscenza e capacità di comprensione (knowledge and understanding): lo studente conoscerà meccanismi di programmazione avanzata con servizi web di tipo REST, Microservizi, framework Spring Boot, e vari costrutti per la programmazione distribuita. Viene approfondita la comprensione dei principali design pattern per i microservizi: 2PL, Saga.
2. Capacità di applicare conoscenza e comprensione (applying knowledge and understanding): lo studente avrà la capacità di progettare, integrare e implementare sistemi software distribuiti adottando i pattern studiati. Saprà utilizzare strumenti e tecnologie (framework per microservizi, sistemi di messaging come RabbitMQ) per implementare soluzioni scalabili e affidabili, gestendo efficacemente lo stato della sessione, l’interscambio di dati (DTO) e il salvataggio dei dati (SLOB).
3. Autonomia di giudizio (making judgements): Lo studente sarà in grado di valutare in modo autonomo la soluzione architetturale più appropriata per un dato contesto applicativo, analizzando vari fattori che incidono e scegliendo in modo adeguato una soluzione.
4. Abilità comunicative (communication skills): lo studente imparerà a descrivere in linguaggio tecnico le caratteristiche dei sistemi distribuiti e paralleli. Saprà documentare le architetture distribuite e le scelte progettuali adottate.
5. Capacità di apprendimento (learning skills): lo studente potrà affrontare e risolvere problemi di progettazione e implementazione in ambiti realistici, studiando, valutando e utilizzando, nuove tecnologie per i sistemi distribuiti.
Modalità di svolgimento dell'insegnamento
Lezioni frontali per concetti e soluzioni, spiegazione di esempi di codice per le tecniche esaminate.
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
Capacità di comprendere i requisiti di un sistema software, di progettare, implementare e convalidare sistemi ad oggetti in C++ o Java.
Frequenza lezioni
Contenuti del corso
Il modulo di laboratorio del corso di ingegneria dei sistemi distribuiti complementa in modo efficace e molto intimo i contenuti del modulo principali. Verranno quindi esposti vari esempi di piccole applicazioni basate sui design pattern visti e si espanderanno alcuni dei contenuti in modo da arrivare allo sviluppo di applicazioni distribuite complete, robuste, sicure, moderne. Saranno messi in evidenza le soluzioni progettuali e implementative per l'architettura a microservizi e alcuni dei design pattern principali come: Leader-Followers, Heartbeat, Idempotent Receiver, Request Pipeline. Si farà uso di Spring Boot per i microservizi e di RabbitMQ per la comunicazione fra essi.
Testi di riferimento
1. C. Richardson. Microservices patterns: with examples in Java. Manning, 2019
2. U. Joshi. Patterns of Distributed Systems. Addison-Wesley, 2024
3. B. Burns. Designing Distributed Systems. O’Reilly, 2018
4. S. Newman. Building Microservices: designing fine-grained systems. O’Reilly, 2021
Programmazione del corso
| Argomenti | Riferimenti testi | |
|---|---|---|
| 1 | Design pattern Scatter/Gather | [3] C. 7 |
| 2 | Design pattern Leader-Followers, Heartbeat, Idempotent Receiver | [2] C. 6, 7, 15 |
| 3 | Design pattern Two-Phase Commit, Request Batch, Request Pipeline | [2] C. 21, 31, 32 |
| 4 | Microservizi, coordinamento, service discovery, Spring boot | [4] C. 1, 2, 3, 4, 5 |
| 5 | Design pattern per microservizi: database per service, saga, event sourcing | [1] C. 4, 5, 6 |
| 6 | Design pattern per microservizi: API gateway, service registry, health check API | [1] C. 8, 11 |
Verifica dell'apprendimento
Modalità di verifica dell'apprendimento
L'esame consiste di un progetto assegnato a singoli studenti o a gruppi di studenti composti al massimo da tre persone. Una volta svolto il progetto, e consegnata la documentazione si potrà svolgere una parte orale a conclusione dell’esame. Il progetto consiste nella progettazione e implementazione di un piccolo sistema software distribuito e/o concorrente che usa una parte delle tecnologie del corso. La verifica dell’apprendimento potrà essere effettuata anche per via telematica, qualora le condizioni lo dovessero richiedere.
La prova d’esame è finalizzata a valutare in modo approfondito la preparazione dello studente, la capacità di analisi e di ragionamento sugli argomenti trattati durante il corso, nonché l’adeguatezza del linguaggio tecnico utilizzato.
L'esame sarà valutato in modo ottimo (28-30 e lode) se si mostrerà di aver acquisito profonda conoscenza e precisione nell’esposizione dei concetti del corso, valutata sia tramite l’analisi del progetto realizzato che tramite colloquio orale. Un voto intermedio (24-27) sarà dato nel caso in cui l'esame mostra una comprensione parziale di alcuni argomenti del corso. Uno voto sufficiente (18-23) sarà dato quando pur conoscendo parzialmente gli argomenti del corso, questi vengono esposti in modo superficiale o poco preciso.
Gli studenti con disabilità e/o DSA dovranno contattare con sufficiente anticipo rispetto alla data dell'esame il docente, il referente CInAP del DMI (prof.ssa Daniele) e il CInAP per comunicare che intendono sostenere l'esame fruendo delle opportune misure compensative.
Esempi di domande e/o esercizi frequenti
Descrivere il design pattern Saga
Descrivere come si implementa un microservizio usando Spring boot