如何在设备之间同步数据,以避免消息丢失和重复?


9

我有一个IoT网络,其中的设备互相发送数据,并将数据存储在数据库中。

如果我的设备按顺序发送10个数据包/ API请求,则有时只有少数几个到达其目的地。例如,数据包1、3和9可能到达其目的地,而其他数据包则未到达。

如何跟踪这些数据包并确保所有数据包都到达目的地而不会重复或泄漏?我预计现实生活中将有成千上万的设备,而不仅仅是丢包的设备。

Answers:


6

通常,您将需要选择一个具有强烈保证的协议,以确保客户端是否将接收任何数据包/消息,以什么顺序接收以及是否允许重复。

对于相互发送中小型消息的IoT设备网络,将MQTT服务质量2结合使用似乎很适合您的用例。如HiveMQ链接中所述:

最高的QoS为2,它确保每个消息仅由对方接收一次。这是最安全的,也是最慢的服务质量。保证是由那里的两个流以及在发送者和接收者之间返回的两个流提供的。

请注意,QoS 2 确实保留了消息的顺序,并且如上所述,可以防止消息重复。

与标准QoS 0(类似于即发即弃消息)相比,使用MQTT QoS 2 会产生大量开销(如果消息未到达代理,则消息不会重新发送并且永远消失了) )-QoS 2需要4条消息(PUBLISH来自发送者,PUBREC来自代理,PUBREL来自客户端,PUBCOMP来自代理),因此通常需要更长的时间来处理,占用更多的资源(因此更长的无线电传输和任何受约束的端点上的功耗都将增加)。

MQTT QoS 2消息将反复从发送方重新发送,直到收到来自代理的确认为止,因此即使您的连接不完善,最终您的消息也应该能够通过。

基于主题的发布-订阅协议是否适合您的用例,取决于您自己确定;维基百科的文章可能会帮助您获得一个想法。


1
感谢@ Aurora0001的工作和回复。任何基于HTTP协议的消息通信/异步机制,或基于IP数据包的机制,还是可以说是一招又忘了?假设一个场景-系统A向系统B发送消息。在系统A中,创建/准备按5、1、2、3、4、5之类的顺序发送5条消息。在系统B中收到类似-1,4,5的消息。在此系统B错过了记录/包/数据为2 3。因此,这可能是机制,使不丢失,不重复使用记录最小跳闸/带宽/网络系统AB之间的同步
user1467280-萨蒂亚吉特真相
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.