Sistemi distribuiti e pervasivi
A.A. 2020/2021
Obiettivi formativi
Obiettivo dell'insegnamento e' quello di illustrare i fondamenti dei sistemi distribuiti moderni e la loro estensione ai sistemi pervasivi includendo come nodi del sistema dispositivi smart, IOT, sensori ed attuatori. Oltre ad argomenti classici come trasparenza, sincronizzazione e consenso distribuito si illustrano tecniche per il trattamento di dati provenienti da sensori e per la gestione di dati di contesto. Obiettivo dell'insegnamento è anche fornire un contesto tecnologico illustrando sistemi distribuiti alla base dell'attuale offerta di Cloud computing e accompagnando gli studenti nella realizzazione di un progetto software.
Risultati apprendimento attesi
Lo studente sarà in grado di comprendere le problematiche relative alla progettazione e sviluppo di sistemi distribuiti complessi come Cloud, Edge e DLT. Lo studente avrà anche la capacità di progettare sistemi distribuiti che gestiscono flussi dinamici di informazioni provenienti per esempio da sensori. Lo studente avrà fatto una significativa esperienza di sviluppo software in questo ambito.
Periodo: Secondo semestre
Modalità di valutazione: Esame
Giudizio di valutazione: voto verbalizzato in trentesimi
Corso singolo
Questo insegnamento non può essere seguito come corso singolo. Puoi trovare gli insegnamenti disponibili consultando il catalogo corsi singoli.
Programma e organizzazione didattica
Edizione unica
Responsabile
Periodo
Secondo semestre
Metodi didattici:
Qualora la fase emergenziale si estendesse al secondo semestre 2020/21 le lezioni verranno svolte online in sincrono utilizzando la piattaforma Zoom.
Materiali di riferimento:
Il programma e il materiale di riferimento non subiranno variazioni.
Modalita' di verifica dell'apprendimento e criteri di valutazione:
Qualora anche gli esami non possano essere svolti in presenza, la parte prevista in forma scritta verrà svolta online con videoconferenza Zoom e piattaforma Moodle. Le prove orali inclusa la discussione dei progetti verranno svolte con piattaforma Zoom. Le prove saranno analoghe a quelle previste in presenza.
Consultare il sito per dettagli ed aggiornamenti.
Qualora la fase emergenziale si estendesse al secondo semestre 2020/21 le lezioni verranno svolte online in sincrono utilizzando la piattaforma Zoom.
Materiali di riferimento:
Il programma e il materiale di riferimento non subiranno variazioni.
Modalita' di verifica dell'apprendimento e criteri di valutazione:
Qualora anche gli esami non possano essere svolti in presenza, la parte prevista in forma scritta verrà svolta online con videoconferenza Zoom e piattaforma Moodle. Le prove orali inclusa la discussione dei progetti verranno svolte con piattaforma Zoom. Le prove saranno analoghe a quelle previste in presenza.
Consultare il sito per dettagli ed aggiornamenti.
Programma
A) Introduzione
Definizione di sistema distribuito e sistema pervasivo.
Concetti di trasparenza e scalabilità.
Tipi di sistemi distribuiti (Cluster, Grid, Cloud, Edge, ...)
B) le basi dei sistemi distribuiti
Architetture dei sistemi distribuiti e pervasivi. (Sistemi client-server multilivello. Sistemi peer-to-peer, Reti di sensori e smart objects)
Le basi della comunicazione in ambiente distribuito. (Modelli di comunicazione. Comunicazione orientata ai messaggi; RPC/RMI; Web Service Invocation)
Cooperazione e sincronizzazione (orologi fisici e logici; algoritmi di elezione e mutua esclusione)
Consenso distribuito e Distributed Ledger (blockchain e sue applicazioni)
Seminario o Case study su tecnologie di sistemi distribuiti (e.g., piattaforme Google, Amazon, Microsoft)
C) sistemi pervasivi e applicazioni
Tipologie e architetture di sistemi pervasivi
Rappresentazione e trattamento di dati provenienti da sensori
Context-awareness e adattività
D) Data Privacy nei sistemi distribuiti e pervasivi
ESERCITAZIONI
Sviluppo di sistemi distribuiti pervasivi (Java, grpc, Web service REST, microservizi e container, gestione di flussi di dati da sensori)
Guida al progetto.
Definizione di sistema distribuito e sistema pervasivo.
Concetti di trasparenza e scalabilità.
Tipi di sistemi distribuiti (Cluster, Grid, Cloud, Edge, ...)
B) le basi dei sistemi distribuiti
Architetture dei sistemi distribuiti e pervasivi. (Sistemi client-server multilivello. Sistemi peer-to-peer, Reti di sensori e smart objects)
Le basi della comunicazione in ambiente distribuito. (Modelli di comunicazione. Comunicazione orientata ai messaggi; RPC/RMI; Web Service Invocation)
Cooperazione e sincronizzazione (orologi fisici e logici; algoritmi di elezione e mutua esclusione)
Consenso distribuito e Distributed Ledger (blockchain e sue applicazioni)
Seminario o Case study su tecnologie di sistemi distribuiti (e.g., piattaforme Google, Amazon, Microsoft)
C) sistemi pervasivi e applicazioni
Tipologie e architetture di sistemi pervasivi
Rappresentazione e trattamento di dati provenienti da sensori
Context-awareness e adattività
D) Data Privacy nei sistemi distribuiti e pervasivi
ESERCITAZIONI
Sviluppo di sistemi distribuiti pervasivi (Java, grpc, Web service REST, microservizi e container, gestione di flussi di dati da sensori)
Guida al progetto.
Prerequisiti
I prerequisiti per seguire con profitto le lezioni di questo insegnamento includono esperienza di programmazione object-oriented e le nozioni normalmente acquisite nei corsi di architetture, reti e sistemi operativi.
Metodi didattici
Lezioni frontali, uno o più seminari di aziende leader di settore ed esercitazioni al computer per lo sviluppo guidato di un progetto.
Materiale di riferimento
Il sito dell'insegnamento offre copia delle slide utilizzate e vari riferimenti a risorse online.
Testo di riferimento: Distributed Systems: Concepts and Design, 5/e, Coulouris, Dollimore, Kindberg & Blair, Addison-Wesley, 2012, ISBN-10: 0132143011
Lo studio degli argomenti trattati a lezione, come per ogni corso universitario, non dovrebbe limitarsi al ripasso degli appunti, nè allo studio del solo testo di riferimento, ma dovrebbe includere la consultazione di altri testi suggeriti ed eventuali risorse online segnalate dal docente o individuate dallo studente.
Testo di riferimento: Distributed Systems: Concepts and Design, 5/e, Coulouris, Dollimore, Kindberg & Blair, Addison-Wesley, 2012, ISBN-10: 0132143011
Lo studio degli argomenti trattati a lezione, come per ogni corso universitario, non dovrebbe limitarsi al ripasso degli appunti, nè allo studio del solo testo di riferimento, ma dovrebbe includere la consultazione di altri testi suggeriti ed eventuali risorse online segnalate dal docente o individuate dallo studente.
Modalità di verifica dell’apprendimento e criteri di valutazione
Gli studenti possono acquisire i 6 crediti superando prima una prova di teoria e successivamente (anche nello stesso appello) una prova pratica:
- Parte teorica: verifica scritta all'appello coincidente con la fine del corso oppure esame orale per gli appelli successivi. La verifica e l'orale vertono su tutti gli argomenti trattati a lezione e verificabili tramite le slide pubblicate sul sito. Sono possibili domande anche sulla parte riguardante la programmazione in ambiente distribuito, ma non riguarderanno aspetti tecnici/sintattici ma piuttosto concettuali. La verifica scritta è composta di un insieme di domande a scelta multipla e di domande a risposta aperta delle quali una potrebbe consistere in un esercizio (solitamente di applicazione di uno degli algoritmi presentati a lezione).
- Parte pratica: sviluppo di un progetto software. Il progetto, che deve essere svolto individualmente, viene assegnato durante il corso e rimane valido per un anno. Può essere consegnato nello stesso appello in cui si è superata la parte teorica oppure in uno degli appelli successivi dello stesso anno accademico.
Il voto di ciascuna parte va da 0 a 32 con 18 il minimo per passare. Il voto finale in trentesimi è la media aritmetica dei due voti con i voti superiori al 30 verbalizzati come 30 e lode.
- Parte teorica: verifica scritta all'appello coincidente con la fine del corso oppure esame orale per gli appelli successivi. La verifica e l'orale vertono su tutti gli argomenti trattati a lezione e verificabili tramite le slide pubblicate sul sito. Sono possibili domande anche sulla parte riguardante la programmazione in ambiente distribuito, ma non riguarderanno aspetti tecnici/sintattici ma piuttosto concettuali. La verifica scritta è composta di un insieme di domande a scelta multipla e di domande a risposta aperta delle quali una potrebbe consistere in un esercizio (solitamente di applicazione di uno degli algoritmi presentati a lezione).
- Parte pratica: sviluppo di un progetto software. Il progetto, che deve essere svolto individualmente, viene assegnato durante il corso e rimane valido per un anno. Può essere consegnato nello stesso appello in cui si è superata la parte teorica oppure in uno degli appelli successivi dello stesso anno accademico.
Il voto di ciascuna parte va da 0 a 32 con 18 il minimo per passare. Il voto finale in trentesimi è la media aritmetica dei due voti con i voti superiori al 30 verbalizzati come 30 e lode.
Docente/i