O Mosquitto pode suportar vários corretores?

20

Estou pensando em Mosquitto para um broker de mensagens MQTT para uma rede IoT doméstica, mas estou preocupado que o broker possa ser um único ponto de falha que poderia derrubar toda a minha rede se falhasse, pois todas as mensagens precisam passar o intermediário e nenhuma mensagem poderá ser transmitida se o intermediário ficar offline por qualquer motivo (por exemplo, desconexão acidental, falha de hardware etc.)

Seria possível usar vários corretores com o Mosquitto instalado para melhorar a confiabilidade da rede? Se for possível, existem desvantagens / custos indiretos significativos no uso de vários corretores?

Aurora0001
fonte

Respostas:

12

Sim, o Mosquitto suporta vários corretores.

O Mosquitto usa MQTT Bridges para conectar vários intermediários, roteando mensagens entre esses intermediários. Dessa forma, uma ponte entre seu intermediário primário e um sistema de fallback pode ser estabelecida. Evite criar loops embora. Se ambos os intermediários executarem seus clientes, publique no intermediário primário, que publica o tópico para cada assinante, incluindo o intermediário secundário em ponte. Se o primário falhar, seus clientes notarão (Conexão recusada, servidor indisponível) e poderão usar o fallback para publicar diretamente no secundário. (Ainda não tenho certeza de como consertar o contrário.) Como você não espera que o cliente se desconecte sem graça, acho que "Last Will and Testament" não se aplica aqui (seria usado para que o corretor notificasse em nome de um cliente desconectado).

Esta publicação, no entanto, lista as desvantagens dessa abordagem, especialmente em relação à escalabilidade e disponibilidade:

  • Os mecanismos de roteamento da ponte não escalam bem se você encaminhar todas as mensagens para as outras pontes
  • A sobrecarga de comunicação entre pontes é significativa se você estiver usando QoS 2 entre pontes (o que você precisa fazer se quiser propagar mensagens entre clientes que estão conectados a pontes diferentes)
  • Não há failover e alta disponibilidade. Se uma ponte do broker travar, as mensagens poderão se perder
  • Os clientes MQTT não podem ser migrados para outros nós da ponte. As sessões do MQTT não são replicadas entre pontes, portanto, você perderá todas as mensagens e assinaturas em fila se estiver usando sessões persistentes do MQTT.
Ghanima
fonte
10

No .NET, a implementação permite conectar um cliente a um broker, então eu diria por que não ...

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

O problema é que você deve gerenciar duplicatas em caso de fallback quando o outro broker iniciar o envio de mensagens ou avisar os clientes.

Pode haver várias possibilidades, como cada corretor assina um ao outro e define uma Última Vontade e Testamento para alertar a si e a seus clientes que um fallback ocorrerá!

Goufalite
fonte
Como um corretor pode se inscrever ou mais como se conectar a outro corretor?
Bence Kaulics
1
Eu estava pensando em um cliente aninhado no servidor do corretor.
Goufalite
@ Goufalite, isso é realmente útil para o MQTT em geral, obrigado. Você saberia mais sobre Mosquitto , o corretor que discuti na pergunta?
Aurora0001
Essa é a coisa mais baixa que eu sei sobre o MQTT (não percebi que havia outro corretor como o HiveMQ antes de entrar no IoT SE). O que mais você gostaria de saber? Você quer dizer implementação?
Goufalite
A @Goufalite apenas se interessou se o Mosquitto possui uma maneira de administrar vários corretores em paralelo. Se você pudesse sugerir uma maneira de fazer isso com o Mosquitto ou vincular a documentação, seria ótimo.
Aurora0001