Mosquitto può supportare più broker?


20

Ho preso in considerazione Mosquitto per un broker di messaggi MQTT per una rete IoT domestica, ma temo che il broker potrebbe essere un singolo punto di errore che potrebbe far cadere l'intera rete se fallisse, poiché tutti i messaggi devono passare il broker e nessun messaggio può essere trasmesso affatto se il broker si disconnette per qualsiasi motivo (ad es. scollegamento accidentale, guasto hardware, ecc.)

Sarebbe possibile utilizzare più broker con Mosquitto installato per migliorare l'affidabilità della rete? Se è possibile, ci sono svantaggi / spese generali significative nell'uso di più broker?

Risposte:


12

Sì, Mosquitto supporta più broker.

Mosquitto utilizza i ponti MQTT per connettere più broker in modo da instradare i messaggi tra questi broker mosquitto. In questo modo è possibile stabilire un ponte tra il broker primario e un sistema di fallback. Evita però di creare loop. Se entrambi i broker eseguono i tuoi clienti, pubblicali sul broker principale che pubblica l'argomento su ciascuno e tutti gli abbonati incluso il broker secondario con bridge. In caso di errore del primario, i client noteranno (Connessione rifiutata, Server non disponibile) e possono eseguire il fallback per pubblicare direttamente sul secondario. (Non sono ancora sicuro di come risolverlo al contrario.) Dato che non ti aspetti che il client si disconnetta in modo sfortunato, penso che "Last Will and Testament" non si applichi qui (sarebbe usato per fare in modo che il broker lo notifichi per conto di un client disconnesso).

Questo post elenca tuttavia gli svantaggi di questo approccio, soprattutto per quanto riguarda la scalabilità e la disponibilità:

  • I meccanismi di routing dei bridge non si adattano bene se si inoltrano tutti i messaggi agli altri bridge
  • Il sovraccarico di comunicazione tra i bridge è significativo se si utilizza QoS 2 tra i bridge (cosa che è necessario fare se si desidera propagare i messaggi tra client collegati a bridge diversi)
  • Non c'è failover e alta disponibilità. Se un bridge broker si blocca, i messaggi potrebbero andare persi
  • I client MQTT non possono essere migrati su altri nodi bridge. Le sessioni MQTT non vengono replicate su bridge, quindi perderai tutti i messaggi e gli abbonamenti in coda se utilizzi sessioni persistenti MQTT.

10

In .NET l'implementazione consente di connettere un client a un broker, quindi direi perché no ...

MqttClient mqtt;
string broker = ini.getData("MQTT", "hostname");
mqtt = new MqttClient(broker);
mqtt.MqttMsgPublishReceived += mqtt_received;
mqtt.Connect(Guid.NewGuid().ToString());

Il fatto è che è necessario gestire i duplicati in caso di fallback quando l'altro broker inizierà a inviare messaggi o avvisare i client.

Ci possono essere diverse possibilità come ogni broker si abboni l'un l'altro e impostano un Last Will and Testament per avvisare se stessi e i loro clienti che si verificherà un fallback!


Come può un broker iscriversi o più come connettersi a un altro broker?
Bence Kaulics,

1
Stavo pensando a un client nidificato sul server del broker.
Goufalite,

@Goufalite, questo è davvero utile per MQTT in generale, grazie. Vuoi sapere di più su Mosquitto , il broker di cui ho parlato nella domanda?
Aurora0001

Questa è la cosa più bassa che conosco su MQTT (non avevo capito che c'erano altri broker come HiveMQ prima di entrare in IoT SE). Cos'altro ti piacerebbe sapere? Intendi l'implementazione?
Goufalite,

@Goufalite è solo interessato al fatto che Mosquitto stesso abbia un modo di gestire più broker in parallelo. Se potessi suggerire un modo per farlo con Mosquitto o collegare la documentazione sarebbe fantastico.
Aurora0001
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.