1

背景/動機

Microsoft Azure IoT Hub のドキュメントをよく読み、サンプルを試してみましたが、このテクノロジが、断続的/信頼性が低く高価なネットワーク (GSM など) を介して接続するデバイスに適しているかどうか、およびコストを最小限に抑えることが非常に重要である場所については、まだよくわかっていません。レイテンシを最小限に抑えることよりも重要です。

特に、すべてのサンプルで、メッセージのプロトコル オーバーヘッドに注意が向けられていないことに気付きました。テレメトリデータは常に小さくて単純なメッセージとして送信されます。

{
    "time": "2016-01-26T20:47:53.0000000",
    "dspl": "sensorE",
    "temp": 123,
    "hmdt": 34
}

おそらく、リアルタイム配信の優先度が非常に高いため、コストは実際には考慮されていないという前提があります。また、IoT Hub で使用されるトピック/エンドポイント名が非常に冗長であることにも気付きました。これにより、オーバーヘッドが増加する必要があります。

C SDKのドキュメントには、「通信効率を向上させるためにメッセージをバッチ処理する」という言及がありますが、それ以上の詳細はなく、これが HTTP のみに適用されるのか、AMQP にも適用されるのかは明らかではありません。ライブラリがどのメッセージをまとめてバッチ処理するかを決定する方法についても言及されていません。

IoTHubClient_LL_SetOption への "SetBatching" オプション(既定ではオフ) についても言及されていますが、これが HTTP のみに適用されるのか、AMQP にも適用されるのかについては言及されていません。ソース コードを見たところ、このオプションは存在しないように見えたので、リンクされたドキュメントが古くなっている可能性があります。

更新:IoTHubClient についての詳細」にも が記載されていますSetBatchingが、これが HTTP のみであるかどうかはまだ明確ではありません。(おそらく、バッチ処理は AMQP に利点をもたらさないでしょう。これをよりよく理解したいと思っています。これが私の質問の核心です。)

実際の質問

具体的には、Azure IoT C SDK に関して、次のことを知りたいです。

  1. AMQP を使用した、Azure IoT Hub デバイスからクラウドへのメッセージの一般的なプロトコル オーバーヘッドはどれくらいですか?

  2. AMQP の使用時にメッセージをバッチ処理するために、C SDK には何が含まれていますか? たとえば、アプリケーションが (接続がアップしている間に) 3 つのメッセージを立て続けに送信する場合、SDK はそれらをネットワーク経由で 1 つのパケットに結合しますか? アプリケーションがメッセージを SDK に送信するまでに、SDK がメッセージの送信を決定する前に、さらにメッセージがあるかどうかを確認するのを待つのではなく、どれくらいの時間が経過する必要がありますか?

  3. シャットダウン中のデバイスは、SDK によってまだバッファリングされている (まだ送信されていない) メッセージをどのように判断して、これらのメッセージを保存し、次回の起動時に再送信を試みることができますか? (これは簡単です。メッセージが実際にいつ送信されたかを知らせるコールバック パラメータがあります。)IoTHubClient_LL_SendEventAsync()

4

1 に答える 1

0

AMQP のプロトコル オーバーヘッドは非常に低く、これを考慮して設計されています。リンクがネゴシエートされた後、すべてのデータ メッセージでエンド ポイント文字列が送信されるわけではないため、Azure IoT Hub でこれらが非常に冗長であっても問題ありません。

Chuck Rolke は、一般的な AMQP トラフィック (具体的には IoT Hub ではない) のパケット キャプチャを示す例AMQP Illustratedを作成しました。例では、「Hello World!」を含む転送フレーム。メッセージの合計サイズは 47 バイトであるため、少なくともこの場合、プロトコルのオーバーヘッドは 35 バイトです。(これには、TCP、IP、およびイーサネット ヘッダーは含まれません。)

Microsoft の Olivier Bloch はSetBatching、Microsoft Azure IoT Hub C SDK のオプションが HTTP トランスポート専用であることを確認しました。このオプションが設定されている場合、SDK は 1 つの HTTP 要求でできるだけ多くのバッファリングされたメッセージを送信します。HTTP トランスポートを使用する場合、リクエストがあまり頻繁に行われないように意図されているため、HTTP リクエスト間でいくつかの発信メッセージがバッファリングされる可能性があります。

最終的な結論は、バッチ処理は AMPQ ではサポートされていませんが、実際には必要ないということです。

于 2016-06-10T08:04:30.023 に答える