Linguaggi e 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, sia client-server sia peer-to-peer. A questo scopo, nel corso verranno discusse le principali problematiche dei sistemi distribuiti, come il rilevamento dei fallimenti, del deadlock, il raggiungimento del consenso; per ognuna di queste, si studieranno adeguate soluzioni algoritmiche e tecniche. Verranno anche descritte le principali primitive di comunicazione di rete (come socket, RPC, scambio messaggi), e vengono presentati ed utilizzati linguaggi specificatamente sviluppati per l’implementazione dei sistemi distribuiti (come Erlang, Scala e Globe).

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, MPI, RPC, RMI. [1, Cap. 4, 5]
  • Meccanismi per comunicazione indiretta: comunicazione di gruppo, publish-subscribe, code di messaggi. AMQP. [1, Cap. 6]
  • Web Services. SOAP. Linguaggi per coreografie. [1, Cap. 9]
  • Sistemi di oggetti distribuiti. Oggetti persistenti e transitori. Componenti distribuiti. JavaBeans. [1, Cap. 8]
  • Linguaggi specifici per i sistemi distribuiti: Erlang, Scala
  • 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. Minicorso di Erlang/OTP
  5. Appunti dalle lezioni

Modalità d’esame

Progetto, da svolgere in gruppi di al massimo 2 persone, su un argomento del corso.
In generale l’argomento dell’esame può evolvere in un argomento di tesi magistrale.

2 Responses to Linguaggi e Sistemi Distribuiti

  1. Attenzione: la lezione del 27 febbraio 2013 ore 10:30 è sospesa causa partecipazione al Collegio Docenti del Dottorato in Informatica. Mi scuso per lo scarsissimo preavviso!

  2. Marino says:

    La lezione del 22 aprile 2013 ore 13:30 è sospesa causa partecipazione al Consiglio Direttivo del CINI a Roma.

Leave a Reply

Your email address will not be published. Required fields are marked *

Connect with Facebook

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>