Sistemi distribuiti - Distributed Systems
Docente
- Prof. Marino Miculan
Indirizzo e-mail
Indirizzo Pagina Web Personale
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
- Introduzione ai sistemi distribuiti. Problematiche, motivazioni, esempi.
- Modelli di sistemi. Modelli fisici, architetturali, fondamentali. Architetture stratificate, client-server, peer-to-peer. Middleware
- Meccanismi per comunicazione diretta: socket, RPC, RMI.
- Meccanismi per comunicazione indiretta: comunicazione di gruppo, publish-subscribe, code di messaggi. AMQP.
- Linguaggi per la programmazione ad attori: Erlang
- Web Services. SOAP. Linguaggi per la programmazione service-oriented: Jolie.
- Sistemi di oggetti distribuiti. Oggetti persistenti e transitori. Componenti distribuiti. JavaBeans.
- 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.
- File system distribuiti. Architetture. NFS.
- Naming. Semplice, strutturato, con attributi. X.500 e LDAP.
- Tempo e stato globale. Orologi fisici, algoritmi di sincronizzazione, NTP. Orologi logici. Stato globale, multicast totalmente ordinato. Comunicazione causale.
- Coordinamento. Mutua esclusione distribuita. Algoritmi di elezione. Coordinamento in comunicazioni di gruppo. Problema del consenso. Problema dei Generali Bizantini.
- Transazioni distribuite. Lock distribuiti. Sincronia virtuale. Ordinamento dei messaggi. Distributed Commit (2PC, 3PC). Deadlock distribuito: definizione, rilevamento, prevenzione.
- 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
- G. Coulouris, J. Dollimore, T. Kindberg, G. Blair, “Distributed systems: concepts and design”, 5 ed., International edition, Pearson, 2012.
- In alternativa al precedente: A. Tanenbaum, M. Van Steen, “Sistemi distribuiti. Principi e paradigmi”, Pearson, 2007.
- J. Armstrong, “Programming Erlang: Software for a Concurrent World”, The Pragmatic Programmers, 2007. ISBN: 978-1-93435-600-5
- 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