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: 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