Informazioni Generali

Pagina su DidatticaWeb
Link per Microsoft Teams

Risultati dell'apprendimento

Principi, metodologie e tecnologie per la progettazione ed implementazione di sistemi distribuiti moderni, inclusi i sistemi distribuiti a larga scala ed i sistemi di Cloud computing.

CFU

9 CFU, 90 ore di didattica frontale distribuite in 6 ore a settimana.

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.

Modalità di svolgimento delle lezioni

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

Orario delle lezioni

Orario valido dal 22/9/2025 al 16/1/2026 (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

Docenti

Valeria Cardellini
Tel.: 067259 7388
E-mail: img (specificare [SDCC] nell'oggetto della mail)
Ufficio: stanza D1-17, Edificio "Ingegneria dell'Informazione", corpo D, primo piano.
Orario di ricevimento: al termine delle lezioni, per appuntamento

Gabriele Russo Russo
Ciclo di lezioni "Hands-on Cloud Computing Services" (1 CFU)
E-mail: img (specificare [SDCC] nell'oggetto della mail)
Ufficio: stanza D1-15, Edificio "Ingegneria dell'Informazione", corpo D, primo piano.

Avvisi

  • 20 settembre 2025 - Il corso avrà inizio lunedì 22 settembre.
    Si raccomanda di effettuare l'iscrizione al corso tramite Delphi.
  • 20 settembre 2025 - Le lezioni previste per mercoledì 24 settembre alle 11:30 e venerdì 26 settembre alle 9:30 sono anticipate a martedì 23 settembre alle ore 11:30 in aula A3 e mercoledì 24 settembre alle ore 9:30 in aula A2.

Materiale Didattico

Testi consigliati

Slide delle lezioni

Argomento Slide Ultima modifica
Organizzazione del corso Organization.pdf
22/09/2025
Introduzione ai SD DS_Introduction.pdf 24/09/2025
Introduzione al Cloud computing Cloud_Introduction.pdf 03/10/2025
Architetture dei SD DS_Architecture.pdf 17/10/2025
Sistemi distribuiti auto-adattativi DS_Self-adaptive.pdf 22/10/2025
Comunicazione nei SD - RPC DS_Communication-RPC.pdf 29/10/2025
Introduzione a Go Go.pdf 29/10/2025


Ciclo di lezioni Hands-on Cloud Computing Services

Argomento Slide Ultima modifica
Introduzione ad AWS; EC2 slides (.pdf)
codice (.zip)
13/10/2025

Articoli

I seguenti articoli approfondiscono ed integrano gli argomenti trattati a lezione; la loro lettura è raccomandata.

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, Ralf 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)

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)
  • Video

    Video per approfondire alcuni argomenti del corso.

    Programmazione


    Programma preliminare

    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
    Amazon Web Services

    Esami

    Modalità di esame

    L'esame si compone di:

    • Prova scritta;
    • Progetto e relativa discussione;
    • Prova orale facoltativa.
    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. 2025/26 e dagli studenti immatricolati in anni precedenti e che optano per il programma dell'A.A. 2025/26.
    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.

    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.

    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.

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

    Negli anni passati alcuni gruppi di studenti hanno svolto il loro progetto partecipando a competizioni internazionali o nazionali, tra cui:

    Prove scritte di anni precedenti

    Appelli

    Per la prenotazione alle prove d'esame, usare il servizio di prenotazione su 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