Comment puis-je synchroniser les données entre les appareils, en évitant la perte de messages et la duplication?

9

J'ai un réseau IoT d'appareils qui s'envoient des données, les données étant stockées dans une base de données.

Si j'ai un appareil qui envoie 10 paquets / demandes d'API en séquence, parfois seulement quelques-uns atteignent leur destination. Par exemple, les paquets 1, 3 et 9 peuvent atteindre leur destination, contrairement aux autres.

Comment puis-je suivre ces paquets et m'assurer que tous atteignent leur destination sans duplication ni fuite? Je m'attends à ce qu'il y ait des milliers d'appareils dans un scénario réel, plutôt qu'un seul appareil perdant des paquets.

user1467280-Satyajit la vérité
la source

Réponses:

6

En règle générale, vous devez choisir un protocole avec de fortes garanties sur la réception par le client de paquets / messages, dans quel ordre et si la duplication est autorisée.

Pour un réseau d'appareils IoT qui s'envoient des messages de taille petite à modérée , l'utilisation de MQTT avec Quality of Service 2 semble bien correspondre à votre cas d'utilisation. Comme indiqué dans le lien HiveMQ:

La QoS la plus élevée est de 2, elle garantit que chaque message n'est reçu qu'une seule fois par la contrepartie. C'est le niveau de service le plus sûr et le plus lent. La garantie est fournie par deux flux aller-retour entre l'expéditeur et le destinataire.

Notez que QoS 2 conserve l'ordre des messages et, comme indiqué, empêche les messages en double.

L' utilisation de MQTT QoS 2 représente un surcoût substantiel par rapport à la QoS 0 standard (qui s'apparente à un message de type `` tirer et oublier ''; s'il n'atteint pas le courtier, le message n'est pas renvoyé et il disparaît pour toujours ) - QoS 2 nécessite 4 messages ( PUBLISHde l'expéditeur, PUBRECdu courtier, PUBRELdu client, PUBCOMPdu courtier), donc cela prendra généralement plus de temps à traiter, consommera plus de ressources (d'où des transmissions radio plus longues et une plus grande consommation d'énergie sur tous les points de terminaison contraints).

Un message MQTT QoS 2 sera simplement renvoyé de l'expéditeur à plusieurs reprises jusqu'à ce qu'il reçoive un accusé de réception du courtier.Par conséquent, votre message devrait finalement passer, même si votre connexion est imparfaite.

Il vous appartient de déterminer si un protocole de publication-abonnement basé sur un sujet est approprié pour votre cas d'utilisation; l'article Wikipedia pourrait vous aider à vous faire une idée.

Aurora0001
la source
1
Merci @ Aurora0001 pour votre travail et votre réponse. Tout mécanisme sur la communication / async de message basé sur le protocole HTTP, ou basé sur les paquets IP ou peut-il dire une sorte d'incendie et oublier? Disons un scénario - le système A envoie un message au système B. Dans le système A, 5 messages créés / préparés pour être envoyés en séquence comme - 1,2,3,4,5. Dans le système B a reçu un message comme - 1,4,5. Ici, le système B a raté l'enregistrement / le paquet / les données pour 2 3. Alors, quel pourrait être le mécanisme pour faire la synchronisation entre le système AB sans manque, sans enregistrement de duplication en utilisant un minimum de voyage / bande passante / réseau
user1467280-Satyajit la vérité