Como posso sincronizar dados entre dispositivos, evitando perda de mensagens e duplicação?

9

Eu tenho uma rede IoT de dispositivos que enviam dados entre si, com os dados sendo armazenados em um banco de dados.

Se eu tiver um dispositivo enviando 10 pacotes / solicitações de API em sequência, algumas vezes apenas alguns chegam ao seu destino. Por exemplo, os pacotes 1, 3 e 9 podem chegar ao seu destino, enquanto os outros não.

Como posso rastrear esses pacotes e garantir que todos cheguem ao seu destino sem duplicação ou vazamento? Espero que existam milhares de dispositivos em um cenário da vida real, em vez de apenas um dispositivo perder pacotes.

user1467280-Satyajit a verdade
fonte

Respostas:

6

Normalmente, você precisaria escolher um protocolo com fortes garantias sobre se o cliente receberá pacotes / mensagens, em que ordem e se a duplicação é permitida.

Para uma rede de dispositivos de IoT que enviam mensagens de tamanho pequeno a moderado , o uso do MQTT com Quality of Service 2 parece adequado ao seu caso de uso. Conforme declarado no link HiveMQ:

A QoS mais alta é 2, garante que cada mensagem seja recebida apenas uma vez pela contraparte. É o nível de qualidade de serviço mais seguro e também mais lento. A garantia é fornecida por dois fluxos lá e entre o remetente e o destinatário.

Observe que a QoS 2 preserva a ordem das mensagens e, como indicado, evita mensagens duplicadas.

Existe uma sobrecarga substancial no uso do MQTT QoS 2 em comparação com o QoS 0 padrão (que é semelhante a uma mensagem de ignorar; se não chegar ao intermediário, a mensagem não será reenviada e desaparecerá para sempre ) - QoS 2 requer 4 mensagens ( PUBLISHdo remetente, PUBRECdo broker, PUBRELdo cliente, PUBCOMPdo broker); portanto, geralmente leva mais tempo para processar, consome mais recursos (portanto, transmissões de rádio mais longas e mais uso de energia em quaisquer pontos de extremidade restritos).

Uma mensagem MQTT QoS 2 será reenviada apenas pelo remetente repetidamente até receber confirmação do broker, portanto, eventualmente, sua mensagem será transmitida, mesmo que sua conexão seja imperfeita.

A decisão de determinar se um protocolo de publicação-assinatura com base em tópico é apropriado para o seu caso de uso; o artigo da Wikipedia pode ajudar você a ter uma ideia.

Aurora0001
fonte
11
Obrigado @ Aurora0001 pelo seu trabalho e resposta. Qualquer mecanismo baseado em protocolo HTTP baseado em comunicação de comunicação / assíncrono ou em pacote IP ou pode dizer tipo de disparar e esquecer? Digamos que um cenário - O sistema A envie uma mensagem para o sistema B. No sistema A 5 mensagem criada / preparada para enviar em sequência como - 1,2,3,4,5. No sistema B, mensagem recebida como - 1,4,5. Aqui sistema B perdeu os recordes / pacote / dados para 2 3. Então, o que poderia ser mecanismo para fazer sincronização entre o sistema AB, sem falta, sem duplicação-registro utilizando viagem mínima / largura de banda / network
user1467280-Satyajit a verdade