Lo scopo del corso è fornire le principali nozioni di programmazione distribuita, considerando come caso di studio i sistemi IoT. Il corso è diviso in tre parti. La prima parte descrive l'organizzazione dei sistemi distribuiti e i principali meccanismi di comunicazione. La seconda parte presenta i principali algoritmi distribuiti per il broadcast, elezione del leader, il consenso e il coordinamento. La terza parte introduce i principali protocolli per applicazioni IoT (MQTT e COAP).
Libri di testo:
- Distributed Systems (3th ed.) - Maarten van Steen, Andrew S. Tanenbaum - freely available from authors website (2017).
- Design and Analysis of Distributed Algorithms - Nicola Santoro - Wiley (2006).
Materiale aggiuntivo fornito dal docente.
Obiettivi Formativi
Dopo aver completato il corso lo studente sarà in grado di capire e descrivere le principali scelte architetturali usate nell'organizzazione di un generico sistema distribuito e di un sistema IoT. Gli studenti saranno in grado di spiegare il funzionamento di base e di usare i principali meccanismi di comunicazione di alto livello (per esempio chiamate a procedura remote, API RESTful e RESTful APIs and message-oriented middle-ware) e di implementare algoritmi distribuiti e di valutarne la loro complessità. Inoltre, gli studenti saranno in grado di usare i principali protocolli di livello applicazione per sistemi IoT.
Prerequisiti
Corsi sull'organizzazione degli elaboratori, sistemi operativi e su reti di calcolatori. Inoltre, è altamente consigliato avere una buona esperienza di programmazione in Java.
Metodi Didattici
Lezioni frontali e sessioni di esercitazione: 48 ore.
Altre Informazioni
Si raccomanda la frequenza delle lezioni.
Pagina web del corso: https://e-l.unifi.it
Ricevimento: per appuntamento, contattare il docente per email a letterio.galletta(AT)unifi.it
Modalità di verifica apprendimento
La prova finale consiste in un esame ora che verte si tutto gli argomenti presentati durante le lezioni. Inoltre, ad ogni studente verrà assegnato un articolo di ricerca su uno degli argomenti del corso. Lo studente dovrà scrivere una relazione che descriva il problema affrontato dall'articolo e discuta la soluzione proposta evidenziandone i vantaggi e le possibili debolezze.
Programma del corso
Il corso affronterà i seguenti argomenti:
- Principali obiettivi di design di un sistema distribuito
- Organizzazione di un sistema distribuito (architetture software e di sistema)
- Meccanismi di comunicazione ad alto livello (Remote Procedure Call and Message-oriented Middle-ware)
- Linguaggi di programmazione per sistemi distribuiti (KLAIM e modello ad attori)
- Algoritmi distribuiti per broadcast, elezione, consenso, sincronizzazione degli orologi, orologi logici, mutua esclusione
- Organizzazione di un sistema IoT
- Protocolli MQTT e COAP