Nuova ricerca

Claudia CANALI

Professore Associato
Dipartimento di Ingegneria "Enzo Ferrari"

Insegnamento: Distributed Edge Programming

Ingegneria informatica (Offerta formativa 2023)

Obiettivi formativi

Negli ultimi anni, i sistemi software di produzione stanno abbandonando i modelli monolitici tradizionali in favore soluzioni distribuite più flessibili, scalabili, ma anche decisamente più complesse. Questa deriva, guidata dalla diffusione di siti internet global-scale, piattaforme cloud, sistemi di containerizzazione, e dall’integrazione crescente di modelli AI, ha reso fondamentale per molte figure aziendali – dagli sviluppatori ai designer di sistema, fino ai manager – acquisire una chiara comprensione di come questi sistemi funzionano.

Il corso fornisce una panoramica completa delle tecnologie e delle metodologie necessarie per progettare, sviluppare e gestire applicazioni distribuite moderne. Si affrontano temi chiave come l’orchestrazione di containers, la comunicazione tra microservizi, la resilienza, l’osservabilità ed il trattamento di dati distribuiti. Inoltre, i moduli finali su DevOps ed MLOps permetteno di comprendere come modelli AI possano essere messi in produzione all'interno di un sistema distribuito moderno in modo tracciabile ed automatizzato.

Prerequisiti

Conoscenza di base di programmazione orientata agli oggetti, ingegneria del software, reti di calcolatori. Esperienza in Java (o linguaggi simili).

Programma del corso

Introduzione alle architetture software e agli strumenti per lo sviluppo – Maven per la gestione delle dipendenze, Spring Boot come chassis per microservizi, Docker per la gestione dei container (1 CFU)

Comunicazione – Comunicazioni sincrone (REST, GraphQL, Protobuf) e asincrone (RabbitMQ) (1 CFU)

Resilienza e tolleranza ai guasti – Approfondimento sui pattern di resilienza, con utilizzo di Resilience4j in Spring Boot (1 CFU)

Osservabilità e monitoring – Strumenti e tecniche per il tracciamento e il monitoraggio delle applicazioni, tra cui ELK, Grafana, Jaeger, Zipkin e OpenTelemetry (1 CFU)

Gestione delle transazioni distribuite – Problematiche legate alla consistenza dei dati e soluzioni come il pattern SAGA, CQRS e l'orchestrazione con Conductor (1 CFU)

DevSecOps, MLOps – Introduzione ai modelli DevOps e MLOps, per automazione del deployment e del monitoraggio dei modelli di machine learning in produzione (1 CFU).

Metodi didattici

L’insegnamento è organizzato in moduli organizzati su base settimanale. Ogni modulo tratta un argomento specifico e prevede una parte di laboratorio. La frequenza alle lezioni in presenza non è obbligatoria. L’insegnamento è erogato in lingua italiana.

Testi di riferimento

Materiale fornito dal docente

Verifica dell'apprendimento

Una sola prova al termine dell'insegnamento composta da: (a) una parte scritta (durata 30-45 minuti) in cui viene richiesto di risolvere un esercizio pratico simile a quelli visti durante i laboratori; (b) una parte orale (durata 20-30 minuti) riguardo le nozioni teoriche. Come alternativa, è possibile sviluppare un progetto individuale. Il voto finale consiste nella media della prova scritta e orale oppure nella valutazione del progetto.

Risultati attesi

Conoscenze di modellazione e progettazione di soluzioni distribuite, con particolare accento sul modello a microservizi.