Sistemi Distribuiti

(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. [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

  1. G. Coulouris, J. Dollimore, T. Kindberg, G. Blair, “Distributed systems: concepts and design”, 5 ed., International edition, Pearson, 2012.
  2. In alternativa al precedente: A. Tanenbaum, M. Van Steen, “Sistemi distribuiti. Principi e paradigmi”, Pearson, 2007.
  3. J. Armstrong, “Programming Erlang: Software for a Concurrent World”, The Pragmatic Programmers, 2007. ISBN: 978-1-93435-600-5
  4. Sunil Kumar, “Distributed Systems: Design Concepts”, Alpha Science, 2015. ISBN: 978-1842659335
  5. Minicorso di Erlang/OTP
  6. Documentazione su Jolie
  7. 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.