Syllabus di Sistemi Distribuiti (10 CFU) – A.A. 2009/2010 Docente: Valeria Cardellini Corso di Laurea Magistrale in Ingegneria Informatica, Università di Roma “Tor Vergata” Nota: con * sono indicati gli argomenti coperti parzialmente (25-50%) dal testo di Tanenbaum e van Steen e con ** gli argomenti coperti in buona parte dal testo (>= 50%). Introduzione ai sistemi distribuiti (**): definizione di SD; definizioni di accessibilità, trasparenza, apertura, scalabilità; tipi di sistemi distribuiti: cluster computing, Grid computing, sistemi informativi distribuiti, sistemi pervasivi distribuiti. Architetture per sistemi distribuiti (**): stili architetturali: a livelli, basati su oggetti, basati su eventi, orientati ai dati; sistemi publish/subscribe e disaccoppiamento; architetture di sistema: centralizzate, decentralizzate, ibride; middleware adattativi; sistemi distribuiti autonomici: definizione, proprietà self-*, architettura. Processi e thread nei sistemi distribuiti (**): processori, processi e thread; cambio di contesto; vantaggi del multithreading; implementazione di thread: schema N:1, schema 1:1, thread Solaris; thread e sistemi distribuiti: lato client e lato server; virtualizzazione: macchina virtuale, tipi di virtualizzazione, macchina virtuale di processo, monitor della macchina virtuale, virtualizzazione completa e paravirtualizzazione, esempio: Planetlab; problematiche relative ai processi lato client e lato server; migrazione del codice (cenni). Programmazione multithreaded con thread POSIX: richiami su processi e thread in Unix; modelli per programmazione multithreaded; thread safeness; classi di fuznioni di pthread; funzioni per la gestione dei thread; costrutti e funzioni di mutua esclusione: mutex, lock lettore/scrittore; variabili condition; esempi di server TCP multithreaded. Comunicazione nei sistemi distribuiti (**): tipi di comunicazione; persistenza, sincronizzazione e dipendenza dal tempo; semantica della comunicazione in presenza di errori: maybe, at-least-one, at-most-once, exactly-once; programmazione di rete esplicita ed implicita; chiamate a procedura remota (RPC): concetti di base, requisiti per RPC, architettura RPC, passi di una RPC, richiami su passaggio dei parametri, passaggio dei parametri in RPC, Interface Definition Language, binding del server, RPC asincrona; SUN RPC: definizione del programma RPC, definizione della procedura remota, implementazione e sviluppo della procedura remota e del client, esempio square, interazione RPC e socket, livelli di SUN RPC, XDR, port mapper, esempi; Java RMI: concetti di base, stub e skeleton, RMI registry, interazione tra componenti, architettura, passi per l'utilizzo, esempi; confronto tra SUN RPC e Java RMI; Message Passing Interface: primitive di comunicazione; sistemi a code di messaggi: primitive dell'API, architettura di sistema, message broker, IBM WebSphere MQ; comunicazione orientata agli stream: definizione di stream, stream e QoS, sincronizzazione degli stream. comunicazione multicast,: tipi di multicast, multicast applicativo; protocolli di gossiping: principi, anti-entropia, schema generale di protocollo di gossiping, applicazioni. Naming nei sistemi distribuiti (**): introduzione e definizioni: nome, punto d'accesso, indirizzo, identificatore; tipologie di naming; naming flat: broadcasting, multicasting, puntatori forwarding, approcci basati sull'assegnamento di una home, hash table distribuite, approcci gerarchici; naming strutturato: definizioni, esempi, risoluzione dei nomi, implementazione, requisiti dei name server, risoluzione iterativa e ricorsiva, caching, aspetti di scalabilità; naming basato su attributi; LDAP: applicazioni, organizzazione dell'informazione. Sincronizzazione nei sistemi distribuiti (**): sincronizzazione fisica: clock fisico, UTC, sincronizzazione interna ed esterna, correttezza, algoritmo di Cristian e sua accuratezza, algoritmo di Berkeley, Network Time Protocol; sincronizzazione logica: tempo logico, relazione happened-before, clock logico scalare e sua implementazione, multicasting totalmente ordinato, clock logico vettoriale e sua implementazione, clock logico matriciale; mutua esclusione nei sistemi concorrenti: definizioni, algoritmo di Dijkstra e relativo esempio; algoritmo del panificio di Lamport e relativo esempio; mutua esclusione distribuita: adattamento dell'algoritmo del panificio di Lamport ai sistemi distribuiti e sue prestazioni, classificazione delle algoritmi di mutua esclusione distribuita, algoritmo basato su autorizzazioni centralizzato, algoritmo di Lamport distribuito, algoritmo di Ricart e Agrawala con esempio, algoritmo basato su token centralizzato, algoritmo basato su token decentralizzato, algoritmi basati su quorum, algoritmo di Maekawa; algoritmi di elezione: algoritmo bully, algoritmo ad anello, algoritmi di elezione di superpeer. Consistenza e replicazione nei sistemi distribuiti (**): modello di sistema; modelli di consistenza; consistenza data-centrica e client-centrica; consistenza stretta, sequenziale, causale, continua, debole, entry: definizioni ed esempi; modelli di consistenza client-centrici; consistenza monotonic-read, monotonic write, read-your-wirte, writes-follow-reads: definizioni, esempi ed applicazioni; algoritmi per il posizionamento dei server replica; tipi di replica; approcci per la distribuzione dei contenuti: push, pull, lease, lease adattativo; protocolli di consistenza: protocolli di consistenza continua, protocolli primari based di tipo remote-write e local write, protocolli basati su quorum. Tolleranza ai guasti nei sistemi distribuiti (**): definizione di dependability, richiami su failure, error e fault; modelli di failure; panoramica sulle tecniche per la tolleranza ai guasti; ridondanza e schema Triple Modular Redundancy; modelli di replicazione: replicazione passiva ed attiva; organizzazione di gruppi di processi e mascheramento dei guasti; problema del consenso bizantino: definizione e algoritmo di Lamport; condizione necessarie per il consenso distribuito; multicasting affidabile: multicast affidabile semplice, multicast atomico, ordinamento dei messaggi di multicast; commit distribuite: commit a due fasi, commit a tre fasi; ripristino: definizioni, creazione indipendente dei checkpoint, creazione coordinata dei checkpoint, logging dei messaggi. Sistemi Web distribuiti (*): generazioni del Web; motivazioni per sistemi Web distribuiti; definizioni e classificazione dei sistemi Web distribuiti; sistemi Web distribuiti localmente: Web cluster, Web switch e livelli di replicazione, classificazione delle architetture, meccanismi di routing per architetture di 4 e 7 livello one-way e two-way, algoritmi di distribuzione content-blind e content-aware ed esempi, Linux Virtual Server, replicazione del middle tier, replicazione del back end tier; sistemi Web distribuiti geograficamente: problemi, prossimità, meccanismi di re-routing delle richieste; algoritmi di distribuzione; Google: infrastruttura, software di gestione dell'infrastruttura di Google. Sistemi Web geografici per network caching e delivery (*): problemi del network delivery; Web caching cooperativo: cooperazione gerarchica e flat; schemi query-based e informed-based, ICP, Cache Digest; caching di contenuti dinamici; Sistemi per Web content delivery: definizioni e motivazioni, contenuti e servizi, meccanismi di routing delle richieste, mapping del sistema Web sulla CDN, content peering nelle CDN; caso di studio di CDN: Akamai. Sistemi peer-to-peer (*): caratteristiche; applicazioni; overlay network; reti strutturate e non; classificazione architetture P2P; sistemi P2P decentralizzati ibridi, puri, parzialmente centralizzati. routing in reti strutturate: distributed hash table; caso di studio di reti non strutturate: Gnutella, Napster, Skype (cenni); casi di studio di reti strutturate: Chord, Pastry, CAN; caso di studio: BitTorrent. Architetture orientate ai servizi e Web service (*) definizioni; pila protocollare e tecnologica; protocollo SOAP ed esempi; linguaggio WSDL; UDDI; composizione di servizi: orchestrazione e coreografia; processi BPEL: principali costrutti del linguaggio BPEL, esempio di creazione di un processo BPEL. Cloud computing: paradigmi di computing e loro evoluzione temporale; utility computing: definizione e motivazioni; Grid computing: definizione di grid, caratteristiche ed applicazioni, architettura a livelli, cenni su OGSA; cloud computing: definizioni, aspetti caratterizzanti, livelli (SaaS, PaaS, IaaS), tipi di cloud; esempi di piattaforme ed applicazioni cloud. Architetture parallele: parallelismo a livello di istruzioni e suoi limiti; multithreading: a grana fine, a grana grossa, simultaneo; multiprocessori: classificazione; SMP: architettura, reti di interconnessione: crossbar, rete omega, problema della coerenza della cache, protocolli di snooping: esempio di protocollo a 3 stati; UMA: architetture, introduzione ai protocolli di directory; architetture multicore e manycore: problemi, architettura di base, esempi di processori.