INGEGNERIA DEI SISTEMI DISTRIBUITI E LABORATORIO
Modulo LABORATORIO

Anno accademico 2025/2026 - Docente: EMILIANO ALESSIO TRAMONTANA

Risultati 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

La frequenza delle lezioni è fortemente consigliata.

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

 ArgomentiRiferimenti testi
1Design pattern Scatter/Gather[3] C. 7
2Design pattern Leader-Followers, Heartbeat, Idempotent Receiver[2] C. 6, 7, 15
3Design pattern Two-Phase Commit, Request Batch, Request Pipeline[2] C. 21, 31, 32
4Microservizi, coordinamento, service discovery, Spring boot[4] C. 1, 2, 3, 4, 5
5Design pattern per microservizi: database per service, saga, event sourcing[1] C. 4, 5, 6
6Design 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

Descrivere le principali strategie di progettazione quando si usano i microservizi

ENGLISH VERSION