Informazioni Generali

Link su DidatticaWeb

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 accordo alle disposizioni rettorali e di coordinamento della Macroarea di Ingegneria e fino a eventuali nuove disposizioni, le lezioni si svolgeranno a distanza in modalità sincrona, nell'orario previsto ed utilizzando la piattaforma Teams.
Per accedere al team del corso, fare clic su Unisciti a un team o creane uno nell’elenco dei team e cercare la scheda Partecipa a un team con un codice. Il codice del corso è keruk4r.

Orario delle lezioni

Orario valido dal 21/9/2020 al 16/1/2021 (primo semestre)
  • Lunedì dalle 9:30 alle 11:15
  • Mercoledì dalle 9:30 alle 11:15
  • Venerdì dalle 9:30 alle 11:15

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

  • new 12 gennaio 2021 - La seconda prova intermedia si terrà in forma orale su Teams a partire da lunedì 25 gennaio ore 9:00 (vedi Appelli per la prenotazione).
  • new 12 gennaio 2021 - Sono disponibili le date degli appelli per la sessione invernale (vedi Appelli per la prenotazione).
  • 2 dicembre 2020 - La prima prova intermedia si terrà in forma orale a partire da giovedì 10 dicembre ore 9:00 (vedi Appelli per la prenotazione).
    Gli argomenti della prova includono tutta la virtualizzazione, fino alla prima parte della lezione del 27 novembre inclusa.
  • 29 novembre 2020 - La lezione di lunedì 30/11 non si terrà.
  • 15 settembre 2020 - Il corso inizierà lunedì 21 settembre in modalità a distanza sincrona.
    Per l'utilizzo della piattaforma Teams vedi la sezione Modalità di svolgimento delle lezioni.
    Si raccomanda inoltre 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
21/9/2020 Organizzazione del corso
Introduzione ai SD
Organizzazione.pdf
IntroSD.pdf
23/9/2020
23/9/2020
23/9/2020 Introduzione ai SD vedi lezione precedente
25/9/2020 Introduzione ai SD
Introduzione al Cloud computing
vedi lezione 21/9
IntroCloud.pdf
 
30/9/2020
28/9/2020 Introduzione al Cloud computing vedi lezione precedente  
30/9/2020 Introduzione al Cloud computing vedi lezione 25/9  
2/10/2020 Architetture dei SD: stili ArchitettureSD.pdf 15/10/2020
5/10/2020 Architetture dei SD: stili e architetture di sistema vedi lezione precedente
7/10/2020 Architetture dei SD: reti P2P non strutturate vedi lezione del 2/10
9/10/2020 Architetture dei SD: reti P2P strutturate vedi lezione del 2/10
12/10/2020 Architetture dei SD: sistemi self-* vedi lezione del 2/10
14/10/2020 Architetture dei SD: sistemi self-*
Comunicazione nei SD: introduzione
vedi lezione del 2/10
ComunicazioneSD_1.pdf
 
3/11/2020
16/10/2020 Comunicazione nei SD: semantica della comunicazione e RPC vedi lezione precedente  
19/10/2020 Comunicazione nei SD: SUN RPC vedi lezione del 14/10
23/10/2020 Comunicazione nei SD: SUN RPC, Java RMI vedi lezione del 14/10
26/10/2020 Comunicazione nei SD: Java RMI vedi lezione del 14/10  
28/10/2020 Introduzione a Go Go.pdf
go_introduction.zip
31/10/2020
 
30/10/2020 Introduzione a Go, RPC in Go vedi lezione del 28/10  
2/11/2020 Esempio RPC in Go
Comunicazione nei SD: MPI
vedi lezione del 28/10
ComunicazioneSD_2.pdf
 
30/12/2020
4/11/2020 Comunicazione nei SD: sistemi MOM ed esempi
RabbitMQ e Go
vedi lezione del 2/11
rabbitmq_1_hello.zip
6/11/2020 Comunicazione nei SD: Kafka
RabbitMQ e Go
vedi lezione del 2/11
rabbitmq_2_worker.zip
9/11/2020 Comunicazione nei SD: Kafka, protocolli di messaggistica vedi lezione del 2/11
kafka-python_example.py
11/11/2020 Comunicazione nei SD: protocolli di gossiping vedi lezione del 2/11  
13/11/2020 Virtualizzazione: introduzione, tassonomia, di sistema Virtualizzazione.pdf 26/11/2020
16/11/2020 Virtualizzazione: di sistema, della memoria, Xen vedi lezione del 13/11
18/11/2020 Virtualizzazione: resizing e migrazione di VM, a livello di sistema operativo vedi lezione del 13/11
20/11/2020 Virtualizzazione: a livello di sistema operativo
Docker
vedi lezione del 13/11
Docker.pdf
 
23/11/2020
23/11/2020 Docker
Resizing e migrazione di container
vedi lezione del 20/11
vedi lezione del 13/11
 
 
25/11/2020 Virtualizzazione: unikernel, orchestrazione di container (Docker Swarm e Kubernetes), Apache Mesos vedi lezioni del 13/11 e 20/11
27/11/2020 Virtualizzazione: distribuzioni di Kubernetes
Microservizi e serverless: SOA, caratteristiche microservizi
vedi lezione del 13/11
Microservice+serverless.pdf
 
2/1/2021
30/11/2020 Lezione non tenuta    
2/12/2020 Microservizi e serverless: design pattern
Esempio pattern SAGA
Soluzione di esercizi di prove d'esame passate
vedi lezione del 27/11
Microservice_SAGAexample.pdf
 
 
30/12/2020
 
4/12/2020 Microservizi e serverless: esempi di architetture a microservizi
Soluzione di esercizi di prove d'esame passate
vedi lezione del 27/11
 
 
 
9/12/2020 Microservizi e serverless: serverless computing
Soluzione di esercizi di prove d'esame passate
vedi lezione del 27/11
 
 
 
11/12/2020 Sincronizzazione e coordinazione nei SD: introduzione, tempo fisico, algoritmi di sincronizzazione fisica SincronizzazioneSD.pdf 30/12/2020
14/12/2020 Sincronizzazione e coordinazione nei SD: clock logico scalare e vettoriale, multicasting totalmente ordinato vedi lezione dell'11/12
16/12/2020 Sincronizzazione e coordinazione nei SD: multicasting causalmente ordinato, mutua esclusione nei SD vedi lezione dell'11/12  
18/12/2020 Kubernetes (lezione tenuta da Fabiana Rossi) kubernetes.pdf 30/12/2020
21/12/2020 Sincronizzazione e coordinazione nei SD: algoritmi di mutua esclusione distribuita vedi lezione dell'11/12  
8/1/2021 Sincronizzazione e coordinazione nei SD: algoritmo di Maekawa, algoritmi di elezione
Consistenza nei SD: introduzione, modelli di consistenza
vedi lezione dell'11/12
ConsistenzaSD.pdf
 
14/1/2021
11/1/2021 Consistenza nei SD: modelli di consistenza data-centrici vedi lezione precedente  
13/1/2021 Consistenza nei SD: teorema CAP, consistenza client-centrica, protocolli di consistenza
Esercizi su clock logico
vedi lezione dell'8/1
EserciziClockLogico.pdf
 
14/1/2021
15/1/2021 Consistenza nei SD: protocolli di consistenza
Tolleranza ai guasti: dependability, modelli di failure, TMR
vedi lezione del 13/1
TolleranzaSD.pdf
 
18/1/2021
18/1/2021 Tolleranza ai guasti nei SD: consenso distribuito, Paxos, Raft vedi lezione precedente
18/1/2021 Tolleranza ai guasti nei SD: algoritmo dei generali bizantini
Esercitazione su sincronizzazione e consistenza
vedi lezione del 15/1
EserciziConsistenza.pdf
 
22/1/2021
 

Corso integrativo Hands-on Cloud Computing Services

Giorno Argomento Slide Ultima modifica
21/10/2020 Introduzione ad AWS; EC2, Load Balancing Appunti (.pdf)
codice (.zip)
21/10/2020
27/10/2020 AWS CLI, boto3, Ansible, Amazon S3 Slide (.pdf)
codice (.zip)
27/10/2020
03/11/2020 Ansible Dynamic Inventory, DynamoDB, CloudFront, Elastic IP Appunti (.pdf)
codice (.zip)
03/11/2020
01/12/2020 AWS Lambda, IaC, Terraform slides (.pdf)
codice (.zip)
01/12/2020
12/01/2021 AWS Lambda con API Gateway, Step Functions slides (.pdf)
codice (.zip)
12/01/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)
  • S. Vinoski, "Rediscovering distributed systems", IEEE Internet Computing, Vol. 18, No. 2, Mar.-Apr. 2014. (pdf)
  • J. Hodges, "Notes on distributed systems for young bloods", 2013. (html)
  • P. Maddox, "Testing a distributed system", ACM Queue, 2015. (html)

Introduzione al Cloud Computing

  • M. Armbrust et al., "Above the clouds: A Berkeley view of cloud computing", EECS Department, University of California Berkeley Technical Report No. UCB/EECS-2009-28, Feb. 2009. (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)
  • M. Jelasity, "Gossip", In Self-Organising Software: From Natural to Artificial Adaptation, Springer, pp. 139-162, 2011. (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

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

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. LLoyd, M. Freedman, M. Kaminsky, D. Andersen, "A short primer on causal consistency", USENIX; login, 2013. (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)
  • The Paper Trail, "The CAP FAQ", 2015. (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: echo_rmi.zip
Compute engine: compute_rmi.zip (vedere anche Java RMI tutorial)

Esempi RPC in Go

Introduzione a Go: go_introduction.zip
Moltiplicazione e divisione tra interi: arith.zip, rpc_arith.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
Amazon Web Services

Esami

Modalità di esame

L'esame si compone di:

  • Prova scritta;
  • Progetto e relativa discussione;
  • Prova orale facoltativa.

Prove scritte di anni precedenti

Appelli

  • I prova intermedia
    A causa della situazione emergenziale determinata dalla pandemia Covid-19, la prima prova intermedia si svolgerà in forma orale su Teams a partire da giovedì 10 dicembre 2020, ore 9:00.
    Per la prenotazione (da effettuare entro sabato 5 dicembre), usare il servizio di prenotazione su Delphi.
    In caso di problemi con il servizio, inviare alla docente una e-mail entro il 5 dicembre, indicando nel subject [SDCC prenotazione I intermedia] e nel testo cognome, nome e numero di matricola.
  • II prova intermedia
    A causa del perdurare della situazione emergenziale determinata dalla pandemia Covid-19, la seconda prova intermedia si svolgerà in forma orale su Teams a partire da lunedì 25 gennaio 2021, ore 9:00.
    Per la prenotazione (da effettuare entro mercoledì 20 gennaio), usare il servizio di prenotazione su Delphi.
  • I appello sessione invernale
    Mercoledì 3 febbraio 2021, ore 9:00.
    Per la prenotazione (da effettuare entro venerdì 29 gennaio), usare il servizio di prenotazione su Delphi.
  • II appello sessione invernale
    Martedì 23 febbraio 2021, ore 9:00.
    Per la prenotazione (da effettuare entro venerdì 19 febbraio), usare il servizio di prenotazione su Delphi.
  • I appello sessione estiva
  • II appello sessione estiva
  • I appello sessione autunnale
  • II appello sessione autunnale