Alla base della IoT: Message Broker, Publish-Subscribe con MQTT e AMQP

Scopriamo quali sono le tecnologie alla base di IoT (Internet of Things), dal punto di vista dei developer, con tecnologie, software e pattern architetturali utilizzati.

Che cos’è un Message Broker?

Un message broker è un componente software che funge da intermediario tra applicazioni o dispositivi che desiderano inviare e ricevere messaggi. È responsabile dell’instradamento dei messaggi da un mittente a un destinatario, in base a regole o filtri definiti dal broker o dal mittente.

In un sistema di messaggistica publish-subscribe, come MQTT o AMQP, il broker di messaggi riceve i messaggi dai cliente li memorizza finché non sono pronti per essere consegnati ai client in ascolto (sottoscrittori). Il broker di messaggi è responsabile della gestione delle sottoscrizioni dei client, dell’instradamento dei messaggi ai sottoscrittori appropriati e della garanzia che i messaggi siano consegnati in modo affidabile e tempestivo.

Nell’architettura software, i message broker sono utilizzati per disaccoppiare sistemi o applicazioni anche molto differenti, consentendo loro di comunicare tra loro senza la necessità di connessioni dirette. Questo può essere utile in scenari in cui sistemi diversi devono scambiarsi dati o in cui la disponibilità o le prestazioni di un sistema possono essere incerte o le tecnologie di implementazioni siano molto diverse e/o incompatibili.

Esistono diversi tipi di message broker, tra cui quelli che supportano una varietà di protocolli di messaggistica (come MQTT, AMQP e STOMP) e quelli progettati per casi d’uso specifici (come lo streaming di dati in tempo reale o l’elaborazione di messaggi su larga scala). Alcuni esempi comuni di server message broker sono Apache Kafka, RabbitMQ e ActiveMQ. Azure e AWS, tra i loro servizi, offrono implementazioni SAAS di queste tipologie di servizi e sono considerati estremamente affidabili e veloci.

Che cos’è il pattern Publish-Subscribe?

Nell’architettura software, il pattern publish-subscribe è un design architetturale per lo scambio di messaggi in cui un mittente (un editore) invia un messaggio a un canale (topic o queue) senza sapere quali destinatari specifici (sottoscrittori) riceveranno il messaggio. Un ricevente, dopo essersi sottoscritto, riceverà i messaggi non appena pubblicati.

Questo modello architetturale, alla base delle architetture tipiche del mondo IoT, consente di disaccoppiare mittente e destinatario, in quanto il mittente non deve conoscere l’identità o la posizione dei destinatari. Inoltre, consente a più destinatari di ricevere lo stesso messaggio, in quanto lo stesso messaggio può essere consegnato a più sottoscrittori.

Nel modello publish-subscribe, il message broker svolge un ruolo centrale. Riceve i messaggi dagli editori e li archivia finché non sono pronti per essere consegnati ai sottoscrittori. Inoltre, gestisce le sottoscrizioni dei client e instrada i messaggi a chi è sottoscritto in base alle regole o ai filtri definiti.

Che cos’è MQTT?

MQTT (Message Queuing Telemetry Transport) è un protocollo di messaggistica publish-subscribe molto leggero utilizzato per la comunicazione in contesti machine-to-machine (M2M) e Internet of Things (IoT). Esso rappresenta lo standard più diffuso quendo si parla di IoT ed è considerato uno dei più affidabili. È stato progettato per essere semplice, efficiente e facile da usare su reti con larghezza di banda limitata e alta latenza, come quelle comunemente presenti nelle reti satellitari, cellulari e wireless.

In MQTT, i client (dispositivi o applicazioni) possono pubblicare messaggi a un broker (un server che riceve e archivia i messaggi finché non sono pronti per essere consegnati ai client iscritti). I client possono anche sottoscrivere argomenti e ricevere i messaggi pubblicati su tali argomenti. Ciò consente la comunicazione tra dispositivi e sistemi diversi in modo decentralizzato, senza la necessità di un server centrale che funga da mediatore.

MQTT è spesso utilizzato in applicazioni in cui i dati devono essere trasmessi su lunghe distanze o in situazioni in cui l’affidabilità della connessione di rete è incerta. È anche utile per le applicazioni in cui è importante il basso consumo energetico, poiché richiede risorse di rete minime e può essere implementato su dispositivi con potenza di elaborazione e memoria limitate. Queste caratteristiche lo rendono particolarmente adatto per i device embedded all’interno dei molti elettrodomestici presenti sul mercato.

Esistono diverse versioni del protocollo MQTT, la più recente delle quali è la versione 5.0, rilasciata nel 2019.

Che cos’è AMQP?

AMQP (Advanced Message Queuing Protocol) è un protocollo di messaggistica utilizzato per la comunicazione tra applicazioni o sistemi. È un protocollo standard aperto che definisce un protocollo a livello di filo per la messaggistica e il formato dei payload dei messaggi. AMQP è stato progettato per fornire un modo affidabile, sicuro ed efficiente alle applicazioni di scambiare messaggi in modo asincrono. Consente alle applicazioni di inviare e ricevere messaggi senza la necessità di connessioni dirette tra loro, utilizzando un broker di messaggi per instradare i messaggi.

In un sistema AMQP, un broker di messaggi riceve i messaggi dai client (applicazioni o dispositivi che inviano messaggi) e li memorizza finché non sono pronti per essere consegnati ai consumer (applicazioni o dispositivi che ricevono messaggi mediante una sottoscrizione). I consumer possono iscriversi per ricevere messaggi da argomenti o code specifiche e il broker di messaggi è responsabile dell’instradamento dei messaggi ai consumatori appropriati.

AMQP è utilizzato in una varietà di applicazioni, tra cui i sistemi finanziari, la logistica e il commercio elettronico, dove è richiesto lo scambio di grandi quantità di dati o l’integrazione di sistemi diversi in cui sia richiesta velocità e semplicità.

Che cos’è STOMP?

STOMP (Simple/Streaming Text Orientated Messaging Protocol) è un protocollo di messaggistica leggero utilizzato per la comunicazione tra applicazioni o sistemi. È un protocollo basato sul testo che utilizza semplici comandi e intestazioni per definire il formato dei messaggi e le azioni che devono essere eseguite con essi.

STOMP è stato progettato per essere facile da implementare e per funzionare su una varietà di sistemi di messaggistica e di trasporti, tra cui TCP, WebSockets e HTTP. Consente lo scambio di messaggi tra sistemi diversi in modo decentralizzato, utilizzando un broker di messaggi per instradare i messaggi.

STOMP è spesso utilizzato in applicazioni in cui è richiesta una messaggistica semplice, come nell’integrazione di sistemi diversi o nello sviluppo di applicazioni web in tempo reale.

Che cos’è RabbitMQ?

RabbitMQ (Apache) è un broker di messaggi open-source molto famoso nella comunità dei developer che implementa l’Advanced Message Queuing Protocol (AMQP) e altri protocolli di messaggistica. È un broker di messaggi flessibile e scalabile che può essere utilizzato per un’ampia gamma di casi d’uso, tra cui l’integrazione di sistemi diversi, lo sviluppo di applicazioni distribuite e l’elaborazione di grandi volumi di dati.

RabbitMQ è scritto nel linguaggio di programmazione Erlang ed è progettato per essere facile da usare, affidabile e scalabile. Supporta diversi modelli di messaggistica, tra cui point-to-point, publish-subscribe e request-response, e può essere utilizzato con diversi linguaggi di programmazione e piattaforme.

RabbitMQ è ampiamente utilizzato in una varietà di applicazioni, tra cui i sistemi finanziari, la logistica e il commercio elettronico, dove è richiesto lo scambio di grandi quantità di dati o l’integrazione di sistemi diversi. È supportato da una vasta comunità di sviluppatori ed è ampiamente utilizzato in ambienti di produzione.