Architettura IoT e sistemi distribuiti
- Andrea Pollini
- Sistemi Distribuiti
- 24 Jun, 2023
un sistema IoT con Arduino e sensori collegati via rete a un server centrale può essere una componente di un sistema distribuito. Per strutturare tale sistema a livello di rete, si possono considerare alcune opzioni:
-
Architettura centralizzata: In questo caso, gli Arduino e i sensori inviano i dati direttamente al server centrale tramite un protocollo di comunicazione, come ad esempio HTTP o MQTT. Gli Arduino agiscono come client che inviano le letture dei sensori al server centrale, che funge da server che riceve e processa i dati.
-
Architettura peer-to-peer: In questa configurazione, gli Arduino e i sensori possono comunicare direttamente tra loro senza passare attraverso un server centrale. Possono utilizzare un protocollo di comunicazione P2P, come ad esempio CoAP (Constrained Application Protocol) o MQTT-SN (MQTT for Sensor Networks). In questo modo, i nodi possono scambiarsi informazioni tra loro senza dover dipendere da un’infrastruttura centralizzata.
Protocolli di comunicazione IoT
Per quanto riguarda i protocolli di comunicazione tra gli Arduino e i nodi del sistema, alcune opzioni comuni includono:
-
MQTT (Message Queuing Telemetry Transport): È un protocollo di messaggistica leggero basato su un modello di pubblicazione/sottoscrizione. È ampiamente utilizzato per la comunicazione M2M (machine-to-machine) nell’IoT.
-
CoAP (Constrained Application Protocol): È un protocollo di applicazione web leggero progettato per dispositivi con risorse limitate, come i microcontroller utilizzati negli Arduino. CoAP si basa sul modello di comunicazione client-server e utilizza i metodi HTTP per le operazioni di base.
-
HTTP (Hypertext Transfer Protocol): È il protocollo di comunicazione web standard che può essere utilizzato per inviare richieste e ricevere risposte tra gli Arduino e il server centrale.
La scelta del protocollo dipende dalle esigenze specifiche del sistema, come la complessità dei dati da trasmettere, la dimensione dei pacchetti, la larghezza di banda disponibile e le risorse limitate degli Arduino.
In termini di architettura, sia l’architettura centralizzata che quella peer-to-peer possono essere utilizzate per consentire la comunicazione all’interno del sistema distribuito. L’architettura da adottare dipenderà dalle esigenze del sistema, dalla scalabilità richiesta e dalle specifiche caratteristiche dell’infrastruttura di rete disponibile.
Esempio di architettura IoT in un sistema distribuito
Ecco un esempio di architettura IoT che utilizza protocolli peer-to-peer per consentire la comunicazione tra gli Arduino e un server centrale:
Architettura
Gli Arduino e i sensori sono collegati in una rete peer-to-peer. Non c’è un server centrale fisico, ma piuttosto un’istanza software che funge da nodo centrale all’interno della rete P2P.
Protocolli utilizzati
- DHT (Distributed Hash Table): Viene utilizzato per la gestione della rete P2P. Un algoritmo DHT assegna in modo distribuito le responsabilità per la gestione delle informazioni, consentendo ai nodi di trovare e comunicare tra loro in modo efficiente.
- MQTT-SN (MQTT for Sensor Networks): È un protocollo MQTT ottimizzato per reti di sensori a bassa potenza e a larga scala. MQTT-SN facilita la comunicazione M2M in un’architettura P2P. UDP (User Datagram Protocol): È un protocollo di trasporto leggero e senza connessione, adatto per la trasmissione affidabile di dati in un’architettura P2P. Struttura di rete:
Ogni Arduino e sensore nella rete P2P ha un’identità univoca. Gli Arduino comunicano tra loro utilizzando l’algoritmo DHT per individuare e connettersi ad altri nodi nella rete. I dati raccolti dai sensori vengono pubblicati dagli Arduino tramite MQTT-SN. Gli altri nodi nella rete P2P possono sottoscriversi a specifici argomenti MQTT-SN per ricevere i dati dei sensori di interesse. Comunicazione:
Gli Arduino inviano i dati raccolti ai nodi adiacenti nella rete P2P utilizzando UDP come protocollo di trasporto. I dati vengono propagati attraverso la rete P2P fino a raggiungere il nodo centrale che agisce come uno dei destinatari finali. Il nodo centrale riceve i dati tramite UDP e li elabora o li memorizza per ulteriori analisi o azioni. Questa architettura utilizza una rete P2P per consentire la comunicazione tra gli Arduino senza un server centrale dedicato. Ogni nodo assume il ruolo di client e server contemporaneamente, partecipando all’architettura di rete distribuita. L’uso dell’algoritmo DHT e dei protocolli MQTT-SN e UDP facilita l’individuazione e lo scambio di dati tra gli Arduino nella rete P2P.