メッセージの損失や重複を回避して、デバイス間でデータを同期するにはどうすればよいですか?


9

私は相互にデータを送信するデバイスのIoTネットワークを使用しており、データはデータベースに保存されています。

デバイスが10パケット/ APIリクエストを順番に送信している場合、宛先に到達するのがごく少数の場合があります。たとえば、パケット1、3、9は宛先に到達し、他のパケットは到達しない場合があります。

これらのパケットを追跡して、すべてが重複や漏洩なしに宛先に到達するようにするにはどうすればよいですか?実際のシナリオでは、1つのデバイスがパケットを失うだけでなく、何千ものデバイスが存在すると予想しています。

回答:


6

通常、クライアントがパケット/メッセージをその順序で受信するかどうか、および複製が許可されるかどうかについて、強力な保証があるプロトコルを選択する必要があります。

小規模から中規模のメッセージを相互に送信するIoTデバイスのネットワークの場合、Quality of Service 2でMQTTを使用することは、ユースケースによく適合しているようです。HiveMQリンクで述べたように:

最高のQoSは2で、各メッセージが相手側で1回だけ受信されることを保証します。これは最も安全であり、サービス品質レベルが最も遅いです。保証は、送信側と受信側の間の2つのフローによって提供されます。

QoS 2 メッセージの順序保持し、前述のとおり、メッセージの重複を防止することに注意してください。

MQTT QoS 2を使用すると、標準のQoS 0(ファイアアンドフォーゲットメッセージに似ています)と比べてかなりのオーバーヘッドがあります。ブローカーに到達しない場合、メッセージは再送信されず、永久に失われます。 )— QoS 2には4つのメッセージ(PUBLISH送信者、PUBRECブローカー、PUBRELクライアント、PUBCOMPブローカーから)が必要であるため、通常は処理に時間がかかり、リソースが多くなります(そのため、制約されたエンドポイントでの無線送信と電力使用量が長くなります)。

MQTT QoS 2メッセージは、ブローカーから確認応答を受信するまで送信者から繰り返し再送信されるだけなので、接続が不完全であっても、メッセージは最終的に通過するはずです。

トピックベースのパブリッシュ/サブスクライブプロトコルがユースケースに適しているかどうかは、あなた次第です。ウィキペディアの記事を参考にするとよいでしょう。


1
@ Aurora0001に感謝します。HTTPプロトコルベースのメッセージ通信/非同期、またはIPパケットベースのメカニズム、または一種の火を放って忘れることができますか?たとえば、システムAがメッセージをシステムBに送信するとします。システムAでは、1、2、3、4、5のように順番に送信するように作成/準備された5つのメッセージを考えてみましょう。システムBでは、1,4,5のようなメッセージを受信しました。ここでは、システムBは、最小の旅/帯域幅/ネットワークを使用してノーミス、ノー重複レコードとシステムAB間の同期を行うためのメカニズム何ができるかだから、2 3のレコード/パケット/データを逃した
user1467280-サタジットに真実を
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.