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 dell’A.A. 2023/24 sarà svolta esclusivamente in presenza.
La classe virtuale su Teams sarà utilizzata per condividere il materiale del corso e per le informazioni.

Orario delle lezioni

Orario valido dal 25/9/2023 al 19/1/2024 (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, corpo D dell'edificio "Ingegneria dell'Informazione", 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, corpo D dell'edificio "Ingegneria dell'Informazione", primo piano.

Avvisi

  • 22 settembre 2023 - Il corso avrà inizio lunedì 25 settembre.
    Si raccomanda di effettuare l'iscrizione al corso tramite Delphi.

Materiale Didattico

Testi consigliati

Testi "classici" sui sistemi distribuiti:

Testi che trattano in modo esteso i sistemi e le applicazioni Cloud:

Slide delle lezioni

Argomento Slide Ultima modifica
Organizzazione del corso Organization.pdf
25/9/2023
Introduzione ai SD DS_Introduction.pdf 29/9/2023
Introduzione al Cloud computing Cloud_Introduction.pdf 3/10/2023
Architetture dei SD DS_Architecture.pdf 16/10/2023
Sistemi distribuiti auto-adattativi DS_Self-adaptive.pdf 20/10/2023
Comunicazione nei SD, I parte DS_Communication1.pdf 13/11/2023
Introduzione a Go
Esercizio facoltativo in Go
Go.pdf
Go_Exercise.pdf
8/11/2023
12/1/2024
Comunicazione nei SD, II parte DS_Communication2.pdf 22/11/2023
Virtualizzazione Virtualization.pdf 19/12/2023
Docker Docker.pdf 19/12/2023
Kubernetes Kubernetes.pdf 22/12/2023
Microservizi e serverless
Esempio pattern SAGA
Microservice+Serverless.pdf
Microservice_SAGAexample.pdf
22/12/2023
 
Sincronizzazione nei SD
Esercizi su sincronizzazione
DS_Synchronization.pdf
EserciziClock.pdf
11/1/2024
12/1/2024
Mutua esclusione ed elezione nei SD DS_MutualExclusion+Election.pdf 12/1/2024
Consistenza nei SD
Esercizi sulla consistenza
DS_Consistency.pdf
EserciziConsistenza.pdf
17/1/2024
20/1/2023
Consenso nei SD DS_Consensus.pdf 19/1/2024
Presentazione dei progetti Projects.pdf 1/2/2024


Ciclo di lezioni Hands-on Cloud Computing Services

Argomento Slide Ultima modifica
Introduzione ad AWS; EC2 slides (.pdf)
codice (.zip)
23/10/2023
Elastic Load Balancer, Auto-Scaling, VPC slides (.pdf) 15/12/2023
AWS CLI, Ansible, Amazon S3 slides (.pdf) 09/01/2024
boto3, Terraform, DynamoDB slides (.pdf) 10/01/2024
AWS Lambda, SQS, API Gateway, Step Functions slides (.pdf)
codice (lez 3-5) (.zip)
12/01/2024

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

  • A. Rotem-Gal-Oz, "Fallacies of distributed computing explained". (pdf)
  • 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)

Introduzione al Cloud Computing

  • M. Armbrust et al., "A view of cloud computing", ACM Comm., Vol. 53, No. 4, 2010. (pdf)
  • P. Mell, T. Grance, "The NIST definition of cloud computing", Sept. 2011. (pdf)
  • S.A. Baset, "Cloud SLAs: Present and future", SIGOPS Oper. Syst. Rev., Vol. 46, No. 2, pp. 57-66, July 2012. (pdf)
  • N. Herbst, S. Kounev, Ralf Reussner, "Elasticity in Cloud Computing: What It Is, and What It Is Not", ICAC '13, 2013. (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)

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, June 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, Feb. 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 protocol for Internet applications", IEEE/ACM Trans. Netw., Vol. 11, No. 1, pp. 17-32, Feb. 2003. (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)
  • D. Yaga, P. Mell, N. Roby, K. Scarfone, "Blockchain Technology Overview", NIST.IR 8202, 2018. (pdf)
  • J.O. Kephart, D.M. Chess, "The vision of autonomic computing", IEEE Computer, Vol. 36, No. 1, Jan. 2003. (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)
  • 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)
  • K.P. Birman, M. Hayden, O. Ozkasap, Z. Xiao, M. Budiu, Y. Minsky, "Bimodal multicast", ACM Trans. Comput. Syst., Vol. 17, No. 2, pp. 41-88, May 1999. (pdf)
  • M. Castro, P. Druschel, A-M. Kermarrec, A. Rowstron, "Scribe: A large-scale and decentralised application-level multicast infrastructure", IEEE Journal on Selected Areas in Communications, Oct. 2002. (pdf)
  • P. Th. Eugster, R. Guerraoui, A.-M. Kermarrec, L. Massoulie, "Epidemic information dissemination in distributed systems", IEEE Computer, Vol. 37, No. 5, pp. 60-67, May 2004. (pdf)
  • M. Portmann, A. Seneviratne, "The cost of application-level broadcast in a fully decentralized peer-to-peer network", Proc. of ISCC 2002, 2002. (doi)

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)
  • K. Hwang, J. Dongarra, G.C. Fox, "Virtual machines and virtualization of clusters and data centers", in Distributed and Cloud Computing, Morgan Kaufmann, 2011. (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)
  • R. Morabito, V. Cozzolino, A.Y. Ding, N. Beijar, J. Ott, Consolidate IoT edge computing with lightweight virtualization, IEEE Network, 2018.(pdf)

Architetture a microservizi e serverless computing

  • M. Fowler, "Microservices Guide", 2019. (html)
  • J. Lewis, M. Fowler, "Microservices", 2014. (html)
  • P. Jamshidi, C. Pahl, N. C. Mendonça, J. Lewis and S. Tilkov, "Microservices: The Journey So Far and Challenges Ahead", IEEE Software, Vol. 35, No. 3, 2018. (pdf)
  • C. Richardson, "Microservice Architecture", 2021. (html)
  • P. Castro, V. Ishakian, V. Muthusamy, A. Slominski, "The Rise of Serverless Computing", Communications of the ACM, Vol. 62, No. 12, pp. 44-54, Dec. 2019. (pdf)
  • E. Jonas et al., "Cloud Programming Simplified: A Berkeley View on Serverless Computing", Technical Report No. UCB/EECS-2019-3, Feb. 2019. (pdf)
  • M. Roberts, "Serverless Architectures", 2018. (html)
  • J. Schleier-Smith et al., "What serverless computing is and should become: the next phase of cloud computing", ACM Comm., 2021. (pdf)

Sincronizzazione nei SD

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

Consistenza e replicazione nei SD

  • E. Brewer, "CAP twelve years later: how the "rules" have changed", IEEE Computer, Feb. 2012. (pdf)
  • 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)

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)

Video

Video per approfondire alcuni argomenti del corso.

Programmazione

Esempi SUN RPC
square, echo, average, remote directory listing: sun-rpc.zip

Esempi Java RMI
echo: rmi_echo.zip

Esempi Remote Python Call
rpyc.zip

Esempi Go
Introduzione a Go: go-introduction.zip
RPC in Go, moltiplicazione e divisione tra interi: go_rpc_arith.zip
RPC in Go, WordCount: go_rpc_wordcount.zip

Esempi 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

Altri link utili

I seguenti link forniscono delle fonti per approfondimenti.


Programma

Introduzione ai sistemi distribuiti
Introduzione al Cloud computing
Architetture per sistemi distribuiti
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.
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. 2023/24 e dagli studenti immatricolati in anni precedenti e che optano per il programma dell'A.A. 2023/24.
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.
Gli studenti immatricolati in anni precedenti all'A.A. 2023/24 e che intendono sostenere le prove intermedie devono comunicarlo alla docente.

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
    Mercoledì 6 dicembre 2023, ore 14:00 aula B4 edificio Didattica.
  • II prova intermedia
    Lunedì 22 gennaio 2024, ore 10:00 aula B3 edificio Didattica.
  • I appello sessione invernale
    Giovedì 1 febbraio 2024, ore 9:30 aula B5 edificio Didattica.
  • II appello sessione invernale
    Martedì 20 febbraio 2024, ore 9:30 aula B6 edificio Didattica.
  • I appello sessione estiva
    Lunedì 24 giugno 2024, ore 10:00 aula C4 edificio Didattica.
  • II appello sessione estiva
    Venerdì 19 luglio 2024, ore 9:30 aula B5 edificio Didattica.
  • I appello sessione autunnale
    Lunedì 2 settembre 2024, ore 10:00 aula C4 edificio Didattica.
  • II appello sessione autunnale
    Venerdì 13 settembre 2024, ore 9:30 aula C5 edificio Didattica.