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

物联网 联网 沟通
2021-05-29 01:48:28

我有一个相互发送数据的设备物联网网络,数据存储在数据库中。

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

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

1个回答

通常,您需要选择一个协议,该协议对客户端是否会收到任何数据包/消息、接收顺序以及是否允许重复有很强的保证。

对于相互发送中小型消息的 IoT 设备网络,使用MQTTQuality of Service 2似乎很适合您的用例。如 HiveMQ 链接所述:

最高的 QoS 为 2,它保证每个消息只被对方接收一次。它是最安全的,也是最慢的服务质量水平。保证由发送方和接收方之间的两个流来回提供。

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

与标准 QoS 0 相比,使用 MQTT QoS 2存在大量开销(类似于即发即弃的消息;如果它没有到达代理,则该消息不会被重新发送并且永远消失了) — QoS 2 需要 4 条消息(PUBLISH来自发送方、PUBREC来自代理、PUBREL来自客户端、PUBCOMP来自代理),因此通常需要更长的时间来处理,占用更多资源(因此在任何受限端点上需要更长的无线电传输和更多的电力使用)。

MQTT QoS 2 消息只会从发送方重复发送,直到收到代理的确认,因此最终您的消息应该通过,即使您的连接不完美。

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