SISTEMI DISTRIBUITI 1 E LABORATORIO
Anno accademico 2017/2018 - 1° anno - Curriculum Sistemi di Rete e Sicurezza- SISTEMI DISTRIBUITI 1: Emiliano Alessio TRAMONTANA
- LABORATORIO: Christian Napoli
Organizzazione didattica: 225 ore d'impegno totale, 153 di studio individuale, 36 di lezione frontale, 24 di esercitazione, 12 di laboratorio
Semestre: 2°
Obiettivi formativi
- SISTEMI DISTRIBUITI 1
Obiettivi formativi generali in termini di risultati di apprendimento attesi.
1. Conoscenza e capacità di comprensione (knowledge and understanding): lo studente conoscerà meccanismi di programmazione avanzata, inclusi programmazione ad aspetti, parallela, asincrona, distribuita.
2. Capacità di applicare conoscenza e comprensione (applying knowledge and understanding): lo studente avrà la capacità di progettare sistemi software distribuiti e complessi.
3. Autonomia di giudizio (making judgements): lo studente acquisirà la capacità di analizzare sistemi distribuiti e complessi.
4. Abilità comunicative (communication skills): lo studente imparerà a descrivere in linguaggio tecnico le caratteristiche fondamentali dei sistemi distribuiti e paralleli.
5. Capacità di apprendimento (learning skills): lo studente potrà affrontare e risolvere problemi di progettazione e implementazione in ambiti realistici, studiando, valutando e utilizzando, nuove tecnologie per i sistemi distribuiti.
- LABORATORIO
1. Conoscenza e capacità di comprensione (knowledge and understanding): l'obiettivo del corso è quello di far acquisire conoscenze avanzate che consentano allo studente di comprendere le tecnologie alla base dell'utilizzo di sistemi distribuiti per il calcolo ad alte prestazioni. In particolare lo studente acquisirà conoscenze relative ai principali paradigmi di programmazione ad alte prestazioni quali MPI, OpenMP, ed Hadoop mapreduce.
2. Capacità di applicare conoscenza e comprensione (applying knowledge and understanding): lo studente acquisirà le conoscenze necessarie per la progettazione di sistemi software ad alte prestazioni per il calcolo distribuito con particolare attenzione allo scheduling di processi e la gestione di risorse computazionali.
3. Autonomia di giudizio (making judgments): lo studente sarà messo in grado di elaborare autonomamente la propria soluzione software attraverso l'analisi di esempi concreti di codici funzionanti o di errori progettuali classicamente noti.
4. Abilità Comunicative (communication skills): lo studente acquisirà le proprietà di linguaggio ed espressione chieste ad uno specialista nel campo della progettazione di sistemi distribuiti per il calcolo ad alte prestazioni.
5. Capacità di apprendimento (learning skills): il corso si propone di offrire contenuti e metodi affinché lo studente possa completare il percorso di crescita personale e professionale che culmina con il conseguimento del titolo di Laurea Magistrale.
Prerequisiti richiesti
- SISTEMI DISTRIBUITI 1
Capacità di progettare ed implementare sistemi ad oggetti in C++ o Java.
- LABORATORIO
Architettura degli Elaboratori;
Elementi di programmazione;
Conoscenze di base di C o C++.
Frequenza lezioni
- SISTEMI DISTRIBUITI 1
La frequenza delle lezioni è fortemente consigliata.
- LABORATORIO
Fortemente consigliata.
Contenuti del corso
- SISTEMI DISTRIBUITI 1
Design pattern per sistemi distribuiti: Proxy, Broker, Forward-Receiver, Remote Facade, Data Transfer Object, Session State, Serialized Large Object. Progettazione ed implementazione del software orientato agli aspetti. Design pattern ad aspetti e Refactoring ad aspetti. Java 8 e Map Reduce. Reactive programming con design pattern Circuit Breaker, Bulkheads. Design pattern per la sicurezza e i sistemi distribuiti. Middleware orientato ai messaggi RabbitMQ.
- LABORATORIO
I. Introduzione al calcolo distribuito
II. Tassonomia di Flynn, paradigmi di memoria, threads, scheduling, messaggi
III. Paradigmi di passaggio di messaggi e Message Passing Interface
IV. Paradigmi di Shared Memory e Open MultiProcessing
V. Programmazione ad alte prestazioni per architetture ibride di calcolo
VI. Distributed Big Data Analysis e paradigmi di calcolo shared nothing
VII. MapReduce, file system distribuito, gestione dei task
VIII. Hadoop e MrJob (python)
Testi di riferimento
- SISTEMI DISTRIBUITI 1
1. Buschmann, Meunier, Rohnert, Sommerlad, Stal. Pattern-Oriented Software Architecture A System of Patterns. John Wiley and Sons, 1996
2. Martin Fowler. Patterns of Enterprise Application Architecture. Addison-Wesley, 2003
3. Schumacher, Fernandez-Buglioni, Hybertson, Buschmann, Sommerlad. Security Patterns: Integrating Security and Systems Engineering. John Wiley and Sons, 2006.
4. R. Laddad. AspectJ in Action: Enterpriese AOP with Spring Applications. Manning Publications. 2010.
5. R. Warburton. Java 8 Lambdas. O'Reilly. 2014.
- LABORATORIO
Testi di riferimento:
1. G. Hager, G. Wellein: Introduction to High Performance Computing for Scientists and Engineers, CRC Press (2010)
2. G. Coulouris et al.: Distributed Systems, Pearson (2013)
3. Gropp et al.: Using MPI, MIT press (2014)
4. B. Chapman, G. Jost: Using OpenMP, MIT press (2007)
5. T. White: Hadoop: the definitive guide, O’Reilly (2015)Altri testi utili per approfondimento:
- D. Culler et al.: Parallel Computer Architecture, Kaufmann (1998)
- M.J. Quinn: Parallel Programming in C with Mpi and Openmp, McGrawHill (2008)
- G. Barlas: Multicore and GPU Programming, Kaufmann (2014)
- E. Sammer: Hadoop Operations, O’Reilly (2012)
- M. GRoover, T. Malaska: Hadoop Applications Architectures, O’Reilly (2015)
Programmazione del corso
SISTEMI DISTRIBUITI 1 | |||
* | Argomenti | Riferimenti testi | |
---|---|---|---|
1 | * | Design pattern Proxy e Broker | 1 |
2 | * | Design pattern Remote Facade, Data Transfer Object, Session State, Serialized LOB | 2 |
3 | * | Design pattern per la sicurezza dei sistemi distribuiti | 3 |
4 | * | Progettazione del software orientato agli aspetti: identificazione di aspetti, costrutti del linguaggio AspectJ | 4 |
5 | * | Refactoring ad aspetti. Crosscutting statico e dinamico | 4 |
6 | * | Design pattern ad aspetti: Adapter, Participant e Sincronizzazione | 4 |
7 | * | Progettazione con Map Reduce in Java | 5 |
8 | * | Parallelismo con Java 8: espressioni lambda, Stream | 5 |
9 | * | Progettazione con callback, Java chiamate asincrone | 5 |
10 | * | Reactive programming: design pattern Circuit Breaker, Bulkheads | |
11 | * | Middleware orientato ai messaggi: RabbitMQ | |
12 | * | Test con JUnit | |
LABORATORIO | |||
* | Argomenti | Riferimenti testi | |
1 | * | Sistemi distribuiti in ambito HPC | G. Coulouris et al.: Distributed Systems, Pearson (2013) |
2 | * | Message Passing Interface | Gropp et al.: Using MPI, MIT press (2014) |
3 | * | OpenMP | B. Chapman, G. Jost: Using OpenMP, MIT press (2007) |
4 | * | Paradigmi ibridi per l'HPC | G. Hager, G. Wellein: Introduction to High Performance Computing for Scientists and Engineers, CRC Press (2010) |
5 | * | Hadoop mapreduce | T. White: Hadoop: the definitive guide, O’Reilly (2015) |
N.B. La conoscenza degli argomenti contrassegnati con l'asterisco è condizione necessaria ma non sufficiente per il superamento dell'esame. Rispondere in maniera sufficiente o anche più che sufficiente alle domande su tali argomenti non assicura, pertanto, il superamento dell'esame.
Verifica dell'apprendimento
Modalità di verifica dell'apprendimento
- SISTEMI DISTRIBUITI 1
L'esame consiste di un elaborato ed una prova orale.
- LABORATORIO
Progetto.
Esempi di domande e/o esercizi frequenti
- SISTEMI DISTRIBUITI 1
Implementare un aspetto software per il caching dei dati
Implementare in modo parallelo la selezione e la somma di importi da un insieme di dati riguardanti prodotti venduti.
Implementare in modo asincrono una chiamata ad un metodo.
- LABORATORIO
ESEMPI DI PROGETTI:
- Sistema distribuito di estrazione di frames caratteristici da flussi video.
- Algoritmo mapreduce per la ricerca di eventi da log di dispositivi mobili.
- Implementazione di un protocollo distribuito per il network coding mediante passaggio di messaggi.
- Gestione di una access list distribuita mediante passaggio di messaggi.
- Implementazione di un integratore Runge-Kutta multigrid parallelo.
- Porting di codice ad alte prestazione per la risoluzione di equazioni differenziali con il metodo di Eulero.
- Implementazione di sandpile distribuita.
- Implementazione di un simulatore di scambio files mediante protocollo bit-torrent.
- Implementazione di un simulatore distribuito di transizioni finaziare basate su bit-coin.
- Analisi di corpus letterari per la generazione di statistiche bibliometriche mediante il paradigma mapreduce.
- Analisi di log di sistema con map reduce per l'individuazione di evidenze di attacchi.
- Simulatori di attacchi bot-net distribuiti.
- Analisi distribuita automatica di log di sicurezza per la generazione di penetration reports.
- Analizzatore distribuito del carico elettrico di un complesso di abitazioni ad uso civile.