MQTT sempre conectado e carregamento de dados 4G


10

Estou trabalhando em um projeto de IoT que envolve milhares de clientes MQTT conectados a um broker (mosquitto) via modem / roteador 4G / WiFi. Menos de 10 clientes estão conectados ao mesmo roteador e os roteadores vêm de lugares diferentes (cidades diferentes).

No momento, temos muito poucos clientes e eles estão sempre conectados ao corretor. Sei dessa discussão que não haverá problemas, mesmo quando eles crescerem para mais de 1000 unidades.

Minha pergunta é sobre a carga de tráfego na conexão 4G. O usuário final tem medo do consumo de dados com todos esses "canais" abertos e não utilizados. Pelo que entendi, quando não há atividade, apenas os pacotes keep-alive são enviados , embora não seja possível encontrar essas informações com certeza na documentação do MQTT.

Posso assumir que o tráfego quando nenhum pacote é publicado é insignificante?

Respostas:


6

O MQTT especificação lista os detalhes do PINGREQ e PINGRESP pacotes que compõem a transação keep-alive.

Cada um tem apenas 2 bytes de tamanho, portanto, um evento completo de manutenção ativa usa 4 bytes no total. Como você pode controlar com que frequência os pacotes keep-alive são enviados para cada cliente com base na rapidez com que você precisa saber que a conexão caiu, você tem controle total da quantidade de dados que é usada quando nenhuma mensagem está realmente sendo publicada.

Se você quiser reduzir ainda mais a carga de dados, poderá ter um broker separado em execução antes do roteador 4G ao qual os 10 dispositivos se conectam e, em seguida, fazer uma ponte para o broker central. Isso reduziria o número de pacotes keep-alive para 1 por roteador 4G em vez de 1 por cliente. Isso tem a vantagem de que os 10 dispositivos locais podem continuar transmitindo mensagens entre si se o link ficar inativo e você poderá usar as mensagens retidas / Últimas Vontade e Testamento para rastrear quando clientes individuais ficam inativos.


Usar um intermediário intermediário é um bom conselho, mesmo eu receio que não se encaixe nesse caso específico. Útil saber, no entanto!
Mark

De qualquer forma, eu conhecia o comportamento do PINGREQ / RESP, mas o que não encontrei é que eles são os únicos pacotes trocados quando não há atividade real (ou seja, iniciada pelos aplicativos do usuário). Eu poderia deduzir isso com sua resposta, mas os documentos não parecem explicitamente declarar isso.
Mark

O temporizador keep-alive é redefinir cada vez que um pacote é recebido, eu não me lembro onde na especificação isto é dito em cima da minha cabeça
hardillb

2
Só queria ressaltar que a sugestão de introduzir um broker local faz ainda mais sentido se não estamos falando de 2 bytes por mensagem, mas, devido ao TCP / IP, é mais como 42 bytes por mensagem, então é 84 para um ciclo de ping.
Xwoker 5/06

11
@ Mark O fato de que apenas os pacotes Ping são a única coisa enviada se nenhuma mensagem estiver sendo enviada está implícita nas frases após esta tabela: docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/…
hardillb
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.