Il corso fornisce una panoramica sulle principali nozioni di programmazione distribuita, considerando come caso di studio principale i sistemi IoT. Il corso è diviso in tre parti. La prima parte presenta l'organizzazione dei sistemi distribuiti e i principali meccanismi di comunicazione. La seconda discute i principali algoritmi distribuiti. La terza parte introduce i principali protocolli di livello applicazione usati nei sistemi IoT, come 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
Conoscenze di base 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: su appuntamento, contattare il docente per email a letterio.galletta(AT)unifi.it
Modalità di verifica apprendimento
La prova finale consiste di due parti:
1 - una relazione su un articolo di ricerca che sarà assegnato agli studenti alla fine del corso;
2- un esame orale che verte su tutti gli argomenti del corso.
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