CREDITI
9 CFU, I semestre

LEZIONI
Lunedì 9:30-11:15, aula B13
Mercoledì 11:30-13:15, aula C3
Venerdì 9:30-11:15, aula B13

DOCENTI
Valeria Cardellini e Gabriele Russo Russo

ESAME
Scritto + progetto + orale facoltativo

LINK
[ Microsoft Teams ] [ Delphi ] [ DidatticaWeb ]

Informazioni Generali

Obiettivi formativi

L'insegnamento si propone di fornire i principi, le metodologie e le tecnologie per la progettazione ed implementazione di sistemi distribuiti moderni, inclusi i sistemi distribuiti a larga scala ed i sistemi di Cloud computing. Durante il corso verranno coniugati aspetti metodologici e tecnologici, affrontando le principali problematiche e tecniche per lo sviluppo di sistemi distribuiti efficienti. In particolare, verranno approfonditi gli aspetti architetturali, i modelli di comunicazione tra i componenti di un sistema distribuito ed i corrispondenti middleware, le soluzioni per fornire sistemi scalabili e tolleranti ai guasti, le problematiche di coordinazione distribuita, replicazione e consistenza e le relativi soluzioni algoritmiche e tecniche, e la virtualizzazione dell'ambiente di esecuzione. Viene anche introdotto il linguaggio Go per la programmazione dei sistemi distribuiti. Il progetto proposto ha lo scopo di consolidare ed approfondire la preparazione teorica, metodologica e tecnologica sui temi affrontanti nel corso.

Prerequisiti

Il corso presuppone una buona conoscenza dei protocolli di rete, della progettazione e programmazione di applicazioni software e di rete (linguaggi C, Python e Java), dell'organizzazione e gestione di basi di dati, dell'infrastruttura Web.

Lezioni

Orario valido dal 21/9/2026 al 15/1/2027 (primo semestre)
  • Lunedì dalle 9:30 alle 11:15, aula B13
  • Mercoledì dalle 11:30 alle 13:15, aula C3
  • Venerdì dalle 9:30 alle 11:15, aula B13

La didattica è svolta esclusivamente in presenza.
La classe virtuale su Teams è utilizzata per condividere il materiale del corso, gli avvisi e le informazioni.


Docenti

Valeria Cardellini

Pagina web
Tel.: 067259 7510
E-mail: Indirizzo e-mail della docente (specificare [SDCC] nell'oggetto della mail)
Ufficio: stanza D1-17, Edificio "Ingegneria dell'Informazione", corpo D, piano 1
Orario di ricevimento: al termine delle lezioni oppure per appuntamento

Gabriele Russo Russo

Ciclo di lezioni "Hands-on Cloud Computing Services" (1 CFU)
Pagina web
E-mail: img (specificare [SDCC] nell'oggetto della mail)
Ufficio: stanza D1-15, Edificio "Ingegneria dell'Informazione", corpo D, piano 1
Orario di ricevimento: al termine delle lezioni oppure per appuntamento

Programma

Introduzione ai sistemi distribuiti
Introduzione al Cloud computing
Architetture per sistemi distribuiti
Sistemi distribuiti auto-adattativi
Comunicazione nei sistemi distribuiti
Introduzione alla programmazione in Go
Virtualizzazione
Architetture a microservizi e serverless
Sincronizzazione nei sistemi distribuiti
Mutua esclusione ed elezione nei sistemi distribuiti
Consistenza e replicazione nei sistemi distribuiti
Consenso nei sistemi distribuiti
Hands-on Cloud Computing Services


Materiale Didattico

Testi consigliati

Slide e calendario delle lezioni

Argomento Slide Data lezione
Organizzazione del corso Organization.pdf
21/9
Introduzione ai SD DS_Introduction.pdf 21/9, 23/9, 25/9
Introduzione al Cloud computing Cloud_Introduction.pdf 25/9

Slide delle lezioni "Hands-on Cloud Computing Services"

Ciclo di lezioni pratiche dedicato ai principali servizi Cloud di Amazon Web Service e agli strumenti per la loro configurazione e automazione.

Argomento Slide Ultima modifica

Codice

SUN RPC
square: sun-rpc_square.zip

Java RMI
echo: rmi_echo.zip

Remote Python Call
rpyc.zip

Go
Introduzione a Go: go-introduction.zip
RPC in Go: gorpc_arith.zip

gRPC
gRPC in Go: grpc-go_examples.zip

Esempi RabbitMQ
Hello in Go, worker in Go: rabbitmq-go.zip

Esempi Kafka
Using Kafka Command Line Interface (CLI): kafka-CLI_examples.pdf

Per approfondire

In questa sezione, sono indicati articoli e video utili per approfondire ed integrare gli argomenti trattati a lezione.
Gli articoli sono suddivisi in base agli argomenti del corso e la loro lettura è consigliata.
[ Articoli ] [ Video ]

Articoli

When I talk to researchers, when I talk to people wanting to engage in entrepreneurship, I tell them that if you read research papers consistently, if you seriously study half a dozen papers a week and you do that for two years, after those two years you will have learned a lot. This is a fantastic investment in your own long term development. (Andrew Ng, Inside The Mind That Built Google Brain: On Life, Creativity, And Failure)

Introduzione ai SD

  • M. van Steen and A.S. Tanenbaum, "A brief introduction to distributed systems", Computing, vol. 98, no. 10, pp. 967-1009, 2016. (pdf)
  • J. Hodges, "Notes on distributed systems for young bloods", 2013. (html)
  • A. Rotem-Gal-Oz, "Fallacies of distributed computing explained". (pdf)

Introduzione al Cloud Computing

  • M. Armbrust et al., "A view of cloud computing", Comm. ACM, Vol. 53, No. 4, 2010. (pdf)
  • P. Mell, T. Grance, "The NIST definition of cloud computing", 2011. (pdf)
  • N. Herbst, S. Kounev, R. Reussner, "Elasticity in cloud computing: What it is, and what it is not", ICAC '13, 2013. (pdf)
  • S.A. Baset, "Cloud SLAs: Present and future", SIGOPS Oper. Syst. Rev., Vol. 46, No. 2, pp. 57-66, 2012. (pdf)
  • R. Buyya et al., "A manifesto for future generation cloud computing: Research directions for the next decade", ACM Comput. Surv., Vol. 51, No. 5, 2019. (pdf)
  • W. Shi, J. Cao, Q. Zhang, Y. Li, and L. Xu, "Edge computing: Vision and challenges", IEEE Internet of Things Journal, Vol. 3, No. 5, 2016. (pdf)
  • L. Bittencourt at al., "The computing continuum: Past, present, and future", Computer Science Review, Vol. 58, 2025. (pdf)

Architetture dei SD

  • P.T. Eugster, P.A. Felber, R. Guerraoui, A.-M. Kermarrec, "The many faces of publish/subscribe", ACM Comput. Surv., Vol. 35, No. 2, pp. 114-131, 2003. (pdf)
  • H. Balakrishnan, M.F. Kaashoek, D. Karger, R. Morris, I. Stoica, "Looking up data in P2P systems", Comm. ACM, Vol. 46, No. 2, pp. 43-48, 2003. (pdf)
  • I. Stoica, R. Morris, D. Liben-Nowell, D.R. Karger, M.F. Kaashoek, F, Dabek, H. Balakrishnan, "Chord: A scalable peer-to-peer lookup service for internet applications", SIGCOMM Comput. Commun. Rev., Vol. 31, No. 4, 2001. (pdf)
  • D. Karger, E. Lehman, T. Leighton, R. Panigrahy, M. Levine, D. Lewin, "Consistent hashing and random trees: distributed caching protocols for relieving hot spots on the World Wide Web", Proc. of 29th ACM Symposium on Theory of Computing (STOC '97), 1997. (pdf)
  • P. Maymounkov and D. Mazieres, "Kademlia: A peer-to-peer information system based on the XOR metric", Proc. of IPTPS '02, 2002. (pdf)
  • T. V. Doan, Y. Psaras, J. Ott and V. Bajpai, "Toward decentralized cloud storage with IPFS: Opportunities, challenges, and future considerations", IEEE Internet Computing, Vol. 26, No. 6, 2022. (pdf)
  • D. Yaga, P. Mell, N. Roby, K. Scarfone, "Blockchain technology overview", NIST.IR 8202, 2018. (pdf)

SD auto-adattativi

  • J.O. Kephart, D.M. Chess, "The vision of autonomic computing", IEEE Computer, Vol. 36, No. 1, 2003. (pdf)
  • D. Weyns, "An Introduction to Self-Adaptive Systems: A Contemporary Software Engineering Perspective", chapter 1, 2020. (pdf)
  • D. Weyns, B. Schmerl, V. Grassi, S. Malek, R. Mirandola, C. Prehofer, J. Wuttke, J. Andersson, H. Giese, K. Göschka, "On patterns for decentralized control in self-adaptive systems", In Software Engineering for Self-Adaptive Systems II, 2013. (pdf)

Comunicazione nei SD

  • E. Petron, "Remote Procedure Calls", Linux Journal, 1997. (html)
  • Trail: RMI (The Java tutorials) (html)
  • RPyC tutorial (html)
  • A. A. Donovan, B. W. Kernighan, "Tutorial", in "The Go Programming Language", Addison-Wesley, 2015. (pdf)
  • N. Jackson, "RPC in the Go standard library", in Building Microservices with Go, 2017. (html)
  • M. Sax, "Apache Kafka", in Encyclopedia of Big Data Technologies, Springer, 2018. (doi)
  • A.-M. Kermarrec, M. van Steen, "Gossiping in distributed systems", ACM Operating System Review, Vol. 41, No. 5, Oct. 2007. (pdf)
  • A. Montresor, "Gossip and epidemic protocols", Wiley Encyclopedia of Electrical and Electronics Engineering, 2017. (pdf)

Virtualizzazione

  • J.E. Smith, R. Nair, "The architecture of virtual machines", IEEE Computer, pp. 32-38, May 2005. (pdf)
  • E. Bugnion, J. Nieh, D. Tsafrir, Hardware and software support for virtualization, Synthesis Lectures on Computer Architecture, 2017. (pdf)
  • A. Agache et al., "Firecracker: Lightweight Virtualization for Serverless Applications", Proc. NSDI 2020, 2020. (html)
  • S. Kuenzer et al., "Unikraft: fast, specialized unikernels the easy way", Proc. EuroSys 2021, 2021. (pdf)

Architetture a microservizi e serverless computing

  • J. Lewis, M. Fowler, "Microservices", 2014. (html)
  • M. Fowler, "Microservices Guide", 2019. (html)
  • C. Richardson, "Microservice Architecture", 2024. (html)
  • P. Jamshidi, C. Pahl, N. C. Mendonça, J. Lewis and S. Tilkov, "Microservices: The Journey So Far and Challenges Ahead", IEEE Software, 2018. (pdf)
  • M. Roberts, "Serverless Architectures", 2018. (html)
  • S. Kounev et al., "Serverless Computing: What It Is, and What It Is Not?", Comm. ACM, 2023. (pdf)

Sincronizzazione nei SD

  • L. Lamport, "Time, clocks and the ordering of events in a distributed system", ACM Communications, 1978. (pdf)
  • M. Raynal, M. Singhal, "Logical time: Capturing causality in distributed systems", IEEE Computer, 1996. (pdf)
  • C. Baquero, N. Preguiça, "Why logical clocks are easy", ACM Queue, 2016. (pdf)

Consenso nei SD

  • L. Lamport, "Paxos made simple", ACM SIGACT News, Vol. 32, No. 4, Dec. 2001. (pdf)
  • The Paper Trail, "Consensus Protocols: Paxos", 2009. (html)
  • D. Ongaro and J. Ousterhout, "In search of an understandable consensus algorithm", Proc. of USENIX Annual Technical Conference 2014, 2014. (pdf)

Consistenza e replicazione nei SD

  • D.K. Gifford, "Weighted voting for replicated data", Proc. of the 7th ACM Symposium on Operating Systems Principles, Dec. 1979. (pdf)
  • W. Vogels, "Eventually consistent", Communications of the ACM, Vol. 52, No. 1, pp. 40-44, Jan. 2009. (pdf)

Video


Esami

Prove d'esame

L'esame si compone di: Le prove d'esame devono essere tutte superate nello stesso anno accademico.

Prova scritta

La prova scritta verte sugli argomenti dell'intero corso e prevede domande a risposta aperta ed esercizi. Si raccomanda di sostenere la prova scritta prima del progetto.

In alternativa alla prova scritta, si terranno due prove scritte intermedie. Tali prove intermedie possono essere sostenute soltanto dagli studenti immatricolati al primo anno della Laurea Magistrale nell'A.A. 2026/27 e dagli studenti immatricolati in anni precedenti e che optano per il programma dell'A.A. 2026/27.
Se entrambe le prove intermedie saranno superate positivamente, verrà proposto un voto finale per la prova scritta. Non è possibile recuperare le prove intermedie in modo parziale.

Non ci sono vincoli sulla partecipazione alle prove (eccetto la prenotazione obbligatoria per le prove scritte).
Tuttavia, la partecipazione ad una prova scritta comporta la rinuncia automatica ad un voto sufficiente conseguito in una prova scritta precedente.

Prove scritte di anni precedenti: SDCC_PastExams.zip

Progetto

Le tracce dei progetti sono suddivise in due modalità, corrispondenti a due diversi pesi del progetto nella valutazione finale e a due differenti composizioni dei gruppi:

  • tipo A: 50% prova scritta, 50% progetto (2-3 studenti per gruppo);
  • tipo B: 75% prova scritta, 25% progetto individuale.
Il progetto è valido solo per l'A.A. di riferimento e deve essere consegnato e discusso entro la sessione autunnale 2026/27. Anche la prova d’esame scritta deve essere superata entro la sessione autunnale 2026/27.

Per il ciclo di lezioni "Hands-on Cloud Computing Services" e la realizzazione del progetto, è possibile usufruire del grant offerto da Amazon Web Services tramite un Learner Lab del programma AWS Academy. Le istruzioni per l'accesso al Learner Lab saranno fornite sul canale Teams e l'invito per accedere al Learner Lab inviato sulla mail istituzionale degli studenti iscritti al corso.

Negli anni passati alcuni hanno svolto il loro progetto in gruppo partecipando a competizioni internazionali o nazionali, tra cui:

Prova orale facoltativa

La prova orale è facoltativa e verte su tutto il programma del corso. E' possibile sostenere la prova orale facoltativa in un appello diverso da quello in cui si è sostenuto la prova scritta, purchè nella stessa sessione.
E' possibile sostenere la prova scritta e l'eventuale prova orale in una stessa sessione e posticipare la discussione del progetto ad un'altra sessione.

Appelli

Prenotazione obbligatoria tramite Delphi.
  • I prova intermedia
  • II prova intermedia
  • I appello sessione invernale
  • II appello sessione invernale
  • I appello sessione estiva
  • II appello sessione estiva
  • I appello sessione autunnale
  • II appello sessione autunnale