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

In base a quanto stabilito dal Senato Accademico e dalla Macroarea di Ingegneria, la didattica dell’A.A. 2021/22 sarà svolta prioritariamente in presenza, fino alla concorrenza del numero massimo dei posti disponibili nelle aule (pari al 50% della capienza).
Le lezioni saranno disponbili anche in diretta streaming su Teams per coloro che non potranno accedere in aula.

Orario delle lezioni

Orario valido dal 20/9/2021 al 15/1/2022 (primo semestre)
  • Lunedì dalle 9:30 alle 11:15, aula B13
  • Mercoledì dalle 9:30 alle 11:15, aula B13
  • 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: da definire

Gabriele Russo Russo
Docente del corso integrativo "Hands-on Cloud Computing Services"
E-mail: img (specificare [SDCC] nell'oggetto della mail)
Ufficio: stanza D1-19, corpo D dell'edificio "Ingegneria dell'Informazione", primo piano.

Avvisi

  • 19 ottobre 2021 - Il corso integrativo tenuto dal Dr. Russo Russo inizierà mercoledì 27 ottobre alle ore 14:00 in aula 9.
  • 17 ottobre 2021 - Come anticipato a lezione, a causa delle sedute di laurea la lezione di mercoledì 20/10 è anticipata a lunedì 18/10 dalle 11:30 alle 13:15 in aula 5, dopo la lezione delle 9:30. Pertanto la lezione di mercoledì 20/10 non si terrà.
  • 19 settembre 2021 - Il corso inizierà lunedì 20 settembre in presenza.
    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:

Calendario e slide delle lezioni

Giorno Argomento Slide Ultima modifica
20/9/2021 Organizzazione del corso
Introduzione ai SD
Organization.pdf
DS_Introduction.pdf
22/9/2021
22/9/2021
22/9/2021 Introduzione ai SD vedi lezione precedente
24/9/2021 Introduzione ai SD
Introduzione al Cloud computing
vedi lezione 20/9
Cloud_Introduction.pdf
 
27/9/2021
27/9/2021 Introduzione al Cloud computing vedi lezione precedente  
29/9/2021 Introduzione al Cloud computing vedi lezione 24/9  
1/10/2021 Architetture dei SD: stili DS_Architecture.pdf 4/10/2021
4/10/2021 Architetture dei SD: architetture di sistema e introduzione alle reti P2P vedi lezione precedente
6/10/2021 Architetture dei SD: reti P2P non strutturate e strutturate vedi lezione dell'1/10
8/10/2021 Architetture dei SD: reti P2P strutturate e architetture ibride vedi lezione dell'1/10
11/10/2021 Architetture dei SD: sistemi self-* vedi lezione dell'1/10
13/10/2021 Architetture dei SD: esempi di sistemi self-*
Comunicazione nei SD: tipologie, semantica
vedi lezione dell'1/10
DS_Communication1.pdf
 
28/10/2021
15/10/2021 Comunicazione nei SD: RPC vedi lezione precedente  
18/10/2021 Comunicazione nei SD: SUN RPC vedi lezione del 13/10
18/10/2021 Comunicazione nei SD: Java RMI vedi lezione del 13/10
22/10/2021 Introduzione a Go Go.pdf
go_introduction.zip
28/10/2021
28/10/2021
25/10/2021 Introduzione a Go, RPC in Go
Comunicazione nei SD: MPI
vedi lezione del 22/10
DS_Communication2.pdf
 
3/11/2021
27/10/2021 Comunicazione nei SD: gRPC vedi lezione del 13/10  
29/10/2021 Comunicazione nei SD: esempio gRPC
Presentazione dell'esercizio in Go
vedi lezione del 13/10
Go_Exercise.pdf
 
3/11/2021
3/11/2021 Presentazione dell'esercizio in Go
Comunicazione nei SD: sistemi MOM
vedi lezione del 29/10
vedi lezione del 25/10
 
 
3/11/2021 Comunicazione nei SD: esempi di sistemi MOM
RabbitMQ e Go: esempi
vedi lezione del 25/10
rabbitmq_1_hello.zip, rabbitmq_2_worker.zip
 
3/11/2021
8/11/2021 Comunicazione nei SD: Kafka, protocolli di messaggistica vedi lezione del 25/10
kafka-python_example.py
10/11/2021 Comunicazione nei SD: protocolli di gossiping vedi lezione del 25/10  
12/11/2021 AWS Academy Learner Lab - Foundation Services
Virtualizzazione: introduzione, tassonomia, di sistema
 
Virtualization.pdf
 
26/11/2021
15/11/2021 Comunicazione nei SD: Matching distribuito degli eventi nei sistemi pub-sub
Virtualizzazione: di sistema (completa, paravirtualizzazione, architettura del VMM)
vedi lezione del 25/10
vedi lezione precedente
 
 
17/11/2021 Comunicazione nei SD: command line tool per Kafka con esempi
Virtualizzazione: condizioni, della memoria, Xen
vedi lezione del 25/10
vedi lezione del 12/11
 
 
19/11/2021 Virtualizzazione: prestazioni, resizing e migrazione di VM vedi lezione del 12/11  
22/11/2021 Virtualizzazione: a livello di sistema operativo
Docker
Soluzione di prove d'esame passate
vedi lezione del 12/11
Docker.pdf
 
 
29/11/2021
 
24/11/2021 Docker vedi lezione precedente
26/11/2021 Docker: volumi, Compose, Swarm
Virtualizzazione: light OS, unikernel
vedi lezione del 22/11
vedi lezione del 25/10
 
29/11/2021 Virtualizzazione: Resizing e migrazione di container
Microservizi e serverless: SOA, caratteristiche microservizi
vedi lezione del 25/10
Microservice+serverless.pdf

15/12/2021
1/12/2021 Microservizi e serverless: stato, design pattern
Esempio pattern SAGA
Soluzione di esercizi di prove d'esame passate
vedi lezione del 29/11
Microservice_SAGAexample.pdf
 
 
30/12/2020
 
3/12/2021 Microservizi e serverless: esempi di applicazioni a microservizi, caratteristiche del serverless
Soluzione di esercizi di prove d'esame passate
vedi lezione del 29/11
 
 
 
6/12/2021 Prima prova intermedia    
10/12/2021 Microservizi e serverless: serverless computing
Kubernetes
Integrazione su Kubernetes: slide A.A. 20/21 di Fabiana Rossi (video su Teams)
vedi lezione del 29/11
Kubernetes.pdf
Kubernetes_FRossi2021.pdf
 
21/12/2021
 
13/12/2021 Sincronizzazione e coordinazione nei SD: introduzione, tempo fisico, algoritmi di sincronizzazione fisica DS_Synchronization.pdf 20/12/2021
15/12/2021 Sincronizzazione e coordinazione nei SD: NTP, clock logico scalare e vettoriale vedi lezione del 13/12
17/12/2021 Sincronizzazione e coordinazione nei SD: multicasting totalmente e causalmente ordinato, mutua esclusione nei SD vedi lezione del 13/12  
20/12/2021 Sincronizzazione e coordinazione nei SD: algoritmi di mutua esclusione distribuita vedi lezione del 13/12  
22/12/2021 Esercizi su sincronizzazione
Sincronizzazione e coordinazione nei SD: algoritmi di elezione
Consistenza nei SD: introduzione, modelli di consistenza
EserciziClockLogico.pdf
vedi lezione del 13/12
DS_Consistency.pdf
13/1/2022
 
12/1/2022
10/1/2022 Consistenza nei SD: modelli di consistenza data-centrici, teorema CAP vedi lezione precedente  
12/1/2022 Esercizi sulla consistenza
Consistenza nei SD: consistenza finale, protocolli di consistenza
Redirezione basata su DNS
EserciziConsistenza.pdf
vedi lezione del 22/12
 
13/1/2022
 
 
14/1/2022 Tolleranza ai guasti: dependability, modelli di failure, TMR, consenso distribuito,
algoritmo di Paxos
Presentazione dei progetti
DS_FaultTolerance.pdf
 
 
15/1/2022
 
 
14/1/2022 Tolleranza ai guasti nei SD: algoritmi di Paxos e Raft, algoritmo dei generali bizantini vedi lezione precedente
 

Corso integrativo Hands-on Cloud Computing Services

Giorno Argomento Slide Ultima modifica
27/10/2021 Introduzione ad AWS; EC2 Slides (.pdf)
codice (.zip)
27/10/2021
05/11/2021 Elastic Load Balancing, Auto-Scaling, VPC, AWS CLI Slides (.pdf) 05/11/2021
10/11/2021 Ansible, boto3, Amazon S3 Slides (.pdf)
codice (.zip)
10/11/2021
17/11/2021 AWX, IaC, Terraform, CloudFront, DynamoDB slides (.pdf)
codice (.zip)
17/11/2021
15/12/2021 AWS Beanstalk, Lambda, SQS slides (.pdf)
codice (.zip)
15/12/2021
22/12/2021 AWS API Gateway, Step Functions, ... slides (.pdf)
codice (.zip)
22/12/2021

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, R. Krebs, G. Oikonomou, G. Kousiouris, A. Evangelinou, A. Iosup, S. Kounev, "Ready for rain? A View from SPEC Research on the future of cloud metrics", SPEC Research Group - Cloud Working Group, Standard Performance Evaluation Corporation (SPEC), Technical Report SPEC-RG-2016-0, 2016. (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 Computing Surveys, 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", Communications of the 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)
  • 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, Oct. 1997. (html)
  • Trail: RMI (The Java tutorials) (html)
  • A. A. Donovan, B. W. Kernighan, ch. 1 of "The Go Programming Language", Addison-Wesley, 2015. (pdf)
  • Application-level multicast and gossiping protocols

  • 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, "From epidemics to distributed computing", IEEE Computer, Vol. 37, No. 5, pp. 60-67, May 2004. (pdf)
  • A.-M. Kermarrec, M. van Steen, "Gossiping in distributed systems", ACM Operating System Review, Vol. 41, No. 5, Oct. 2007. (pdf)
  • M. Portmann, A. Seneviratne, "The cost of application-level broadcast in a fully decentralized peer-to-peer network", Proc. of ISCC 2002, 2002. (pdf)

Virtualizzazione

  • K. Hwang, J. Dongarra, G.C. Fox, "Virtual machines and virtualization of clusters and data centers", chapter 3 of Distributed and Cloud Computing, Morgan Kaufmann, 2011. (pdf)
  • J.E. Smith, R. Nair, "The architecture of virtual machines", IEEE Computer, pp. 32-38, May 2005. (pdf)
  • OS-level virtualization

  • D. Bernstein, "Containers and cloud: from LXC to Docker to Kubernetes", IEEE Cloud Computing, Vol. 1, No. 3, pp. 81-84, Sept. 2014. (pdf)
  • C. Pahl, "Containerisation and the PaaS Cloud", IEEE Cloud Computing, Vol. 2, No. 3, pp. 24-31, May 2015. (pdf)
  • S. Yegulalp, "What is Docker? The spark for the container revolution", InfoWorld, 2019. (html)
  • Performance of hypervisors, containers, and LV approaches

  • J. Hwang, S. Zeng, F. Wu, T. Wood, "A component based performance comparison of four hypervisors", Proc. of IFIP/IEEE Integrated Network Management Symposium (IM 2013), May 2013. (pdf)
  • J. Li, Q. Wang, D. Jayasinghe, J. Park, T. Zhu, C. Pu, "Performance overhead among three hypervisors: an experimental study using Hadoop benchmarks", Proc. of IEEE Big Data 2013, 2013. (pdf)
  • B. Xavier, T. Ferreto, L. Jersak, "Time provisioning evaluation of KVM, Docker and unikernels in a cloud platform", Proc. of IEEE/ACM CCGrid 2016, 2016. (pdf)
  • F. Manco, C. Lupu, F. Schmidt, J. Mendes, S. Kuenzer, S. Sati, K. Yasukata, C. Raiciu, F. Huici, "My VM is lighter (and safer) than your container", Proc. of SOSP 2017, 2017. (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)
  • D.B. Terry, A.J. Demers, K. Petersen, M.J. Spreitzer, M.M Theimer, B.B. Welch, "Session guarantees for weakly consistent replicated data", Proc. of the 3rd Int'l Conference on Parallel and Distributed information Systems, pp. 140-150, 1994. (pdf)
  • W. Vogels, "Eventually consistent", Communications of the ACM, Vol. 52, No. 1, pp. 40-44, Jan. 2009. (pdf)

Tolleranza ai guasti nei SD

  • A. Avizienis, J.-C. Laprie, B. Randell, C. Landwehr, "Basic concepts and taxonomy of dependable and secure computing", IEEE Trans. on Dependable and Secure Computing, 2004. (pdf)
  • L. Lamport, "Paxos made simple", ACM SIGACT News, Vol. 32, No. 4, Dec. 2001. (pdf)
  • D. Ongaro and J. Ousterhout, "In search of an understandable consensus algorithm", Proc. of USENIX Annual Technical Conference 2014, 2014. (pdf)
  • The Paper Trail, "Consensus Protocols: Paxos", 2009. (html)

Video

Video di presentazioni utili per approfondire alcuni argomenti del corso.

Programmazione RPC


Esempi SUN RPC

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

Esempi Java RMI

echo, compute engine: rmi.zip (per compute engine, vedere anche Java RMI tutorial)

Esempi Go

Introduzione a Go: go_introduction.zip
RPC moltiplicazione e divisione tra interi: rpc_arith.zip
gRPC ProductInfo in Go: grpc-go_productinfo.zip

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
Coordinazione e sincronizzazione nei sistemi distribuiti
Consistenza e replicazione nei sistemi distribuiti
Tolleranza ai guasti 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. 2021/22 e dagli studenti immatricolati in anni precedenti e che optano per il programma dell'A.A. 2021/22.
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. 2021/22 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.
Le informazioni relative ai progetti sono disponibili su Microsoft Teams.
Eventuali modifiche nella scelta del progetto devono essere tempestivamente comunicate alla docente e con lei concordate. Non è possibile cambiare la tipologia del progetto (da A a B o viceversa).

Il progetto è valido solo per l'A.A. 2021/22 e deve essere consegnato entro la sessione autunnale. Per la validità del progetto, la prova d’esame scritta deve essere superata entro la sessione autunnale 2021/22.

Per la realizzazione del progetto, è possibile usufruire del grant offerto da Amazon Web Service tramite il programma AWS Academy. Gli studenti iscritti al corso hanno ricevuto via email le istruzioni per l'accesso.

La consegna del progetto deve avvenire una settimana prima della data (da concordare con la docente) in cui si intende sostenere la discussione del progetto.
Ciascuno studente esporrà una presentazione individuale tramite slide di una parte del progetto (max 10 minuti per studente).
Tutti i componenti del gruppo devono sostenere la presentazione del progetto nella stessa data.

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
    Lunedì 6 dicembre 2021, ore 9:30 aula 1 edificio Didattica.
    Testo
  • II prova intermedia
    Mercoledì 19 gennaio 2022, ore 9:30 aula 7 edificio Didattica.
    Testo
  • I appello sessione invernale
    Lunedì 24 gennaio 2022, ore 9:30 aula 7 edificio Didattica.
  • II appello sessione invernale
    Lunedì 14 febbraio 2022, ore 9:30 aula 7 edificio Didattica.
  • I appello sessione estiva
    Mercoledì 15 giugno 2022, ore 9:30, aula B6 edificio Didattica.
  • II appello sessione estiva
    Martedì 5 luglio 2022, ore 9:30, aula B5 edificio Didattica.
  • I appello sessione autunnale
    Lunedì 5 settembre 2022, ore 9:30, aula B5 edificio Didattica.
  • II appello sessione autunnale
    Venerdì 23 settembre 2022, ore 9:30, aula B6 edificio Didattica.