INFORMAZIONI SU

Sistemi Distribuiti

Programma dell'insegnamento - Corso di laurea in Informatica Magistrale

 

Docente

  • Prof. Marino Miculan

Indirizzo e-mail

marino.miculan@uniud.it

Indirizzo Pagina Web Personale

Si ricorda che l'Università di Udine mette a disposizione di tutti uno strumento per costruire la propria WebPage all'indirizzo http://people.uniud.it/.

http://www.dimi.uniud.it/miculan/

La pagina del corso è http://sole.dimi.uniud.it/~marino.miculan/wordpress/teaching/sistemi-distribuiti

Crediti

9 CFU

Finalità e obbiettivi formativi

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

  1. Introduzione ai sistemi distribuiti. Problematiche, motivazioni, esempi.
  2. Modelli di sistemi. Modelli fisici, architetturali, fondamentali. Architetture stratificate, client-server, peer-to-peer. Middleware
  3. Meccanismi per comunicazione diretta: socket, RPC, RMI.
  4. Meccanismi per comunicazione indiretta: comunicazione di gruppo, publish-subscribe, code di messaggi. AMQP.
  5. Linguaggi per la programmazione ad attori: Erlang
  6. Web Services. SOAP. Linguaggi per la programmazione service-oriented: Jolie.
  7. Sistemi di oggetti distribuiti. Oggetti persistenti e transitori. Componenti distribuiti. JavaBeans.
  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.
  9. File system distribuiti. Architetture. NFS.
  10. Naming. Semplice, strutturato, con attributi. X.500 e LDAP.
  11. Tempo e stato globale. Orologi fisici, algoritmi di sincronizzazione, NTP. Orologi logici. Stato globale, multicast totalmente ordinato. Comunicazione causale.
  12. Coordinamento. Mutua esclusione distribuita. Algoritmi di elezione. Coordinamento in comunicazioni di gruppo. Problema del consenso. Problema dei Generali Bizantini.
  13. Transazioni distribuite. Lock distribuiti. Sincronia virtuale. Ordinamento dei messaggi. Distributed Commit (2PC, 3PC). Deadlock distribuito: definizione, rilevamento, prevenzione.
  14. 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.

Attività di Laboratorio

Opzionale

Prerequisiti

Sistemi operativi; Reti di calcolatori

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. Appunti dalle lezioni

 

Modalità d'esame

Progetto, da svolgere in gruppi di al massimo 2 persone, su un argomento del corso, più esame orale.

Orario di ricevimento

Su appuntamento