(For the original version, also in English, see the official page on the Faculty website)
Docenti
Prof. Marino Miculan
Crediti
9 CFU
Finalità
Scopo del corso è fornire allo studente i fondamenti e gli strumenti per la progettazione e implementazione dei sistemi distribuiti. A questo scopo, il corso è diviso in tre parti. Nella prima parte, si studiano gli aspetti sistemistico-architetturali dei sistemi distribuiti, analizzando vari modelli (client-server, multi-tier, peer-to-peer…). Nella seconda parte si studiano i modelli di comunicazione adottabili su questi sistemi distribuiti, e i corrispondenti middleware. In questa parte vengono anche introdotti alcuni linguaggi specifici per la programmazione dei sistemi distribuiti, come Erlang e Jolie. Infine nella terza parte si affrontano le principali problematiche che si presentano comunemente nella programmazione distribuita, come il rilevamento dei fallimenti, del deadlock, il raggiungimento del consenso; per ognuna di queste, si studieranno adeguate soluzioni algoritmiche e tecniche.
Programma
- Introduzione ai sistemi distribuiti. Problematiche, motivazioni, esempi. [1, Cap. 1]
- Modelli di sistemi. Modelli fisici, architetturali, fondamentali. Architetture stratificate, client-server, peer-to-peer. Middleware. [1, Cap. 2]
- Meccanismi per comunicazione diretta: socket, RPC, RMI. [1, Cap. 4, 5]
- Meccanismi per comunicazione indiretta: comunicazione di gruppo, publish-subscribe, code di messaggi. AMQP. [1, Cap. 6]
- Linguaggi per la programmazione ad attori: Erlang [3, 4]
- Web Services. SOAP [1, Cap. 9]. Linguaggi per la programmazione service-oriented: Jolie. [5]
- Sistemi di oggetti distribuiti. Oggetti persistenti e transitori. Componenti distribuiti. JavaBeans. [1, Cap. 8]
- Sistemi peer-to-peer. Replicazione negli overlay non strutturati con random walk: analisi del caso uniforme, proporzionale e square-root. Overlay di instradamento. Tabelle hash distribuite. Lookup semplice e scalabile. Pastry, Tapestry, Kademlia. Peer e ultrapeer: Gnutella, Skype. [1, Cap. 10]
- File system distribuiti. Architetture. NFS. [1, Cap. 12]
- Naming. Semplice, strutturato, con attributi. X.500 e LDAP. [1, Cap. 13]
- Tempo e stato globale. Orologi fisici, algoritmi di sincronizzazione, NTP. Orologi logici. Stato globale, multicast totalmente ordinato. Comunicazione causale. [1, Cap. 14]
- Coordinamento. Mutua esclusione distribuita. Algoritmi di elezione. Coordinamento in comunicazioni di gruppo. Problema del consenso. Problema dei Generali Bizantini. Blockchain e il consenso Satoshi. [1, Cap. 15]
- Transazioni distribuite. Lock distribuiti. Sincronia virtuale. Ordinamento dei messaggi. Distributed Commit (2PC, 3PC). Deadlock distribuito. [1, Cap. 16, 17]
- Replicazione. Modelli di consistenza dei dati. Servizi fault tolerant. Consistenza causale, per eventi. Gestione delle replica: replicazione passiva vs. attiva. Sistemi ad alta disponibilità. Architettura gossip. Transazioni con dati replicati. Algoritmo di Gifford. [1, Cap. 18]
Bibliografia
- G. Coulouris, J. Dollimore, T. Kindberg, G. Blair, “Distributed systems: concepts and design”, 5 ed., International edition, Pearson, 2012.
- J. Armstrong, “Programming Erlang: Software for a Concurrent World”, The Pragmatic Programmers, 2007. ISBN: 978-1934356005
- Wan Fokkink, “Distributed Algorithms: An Intuitive Approach”, 2nd edition, the MIT Press, 2018, ISBN: 978-0262037662
- Carlos A. Varela, “Programming Distributed Computing Systems: A Foundational Approach”, the MIT Press, 2013, ISBN: 978-0262018982
- Minicorso di Erlang/OTP
- Documentazione su Jolie
- Appunti dalle lezioni
Modalità d’esame
Progetto, da svolgere in gruppi di al massimo 2 persone, su un argomento del corso, più esame orale.
In generale l’argomento dell’esame può evolvere in un argomento di tesi magistrale.