可用性

IoT Connectivity Engineの可用性の考え方について説明します。


プロセス

  • ICE Core
    ICE外部のプロセス監視やウォッチドッグタイマで再起動されることを想定しています。

  • Privileged Application、Edge Application、Device Adapter
    これらはICE Coreによってプロセス監視され、停止を検出すれば速やかに再起動されます。


End To End のメッセージング

  • 非同期処理
    ICEを流れる全てのデータは非同期で通信が行われます。

  • 送達保証
    ICEによるメッセージの送達保証は、データの流れる方向により異なります。

    • MQTTによる ICE Core から バックエンドへのデータ送信
      ICE Coreでデバイスから収集したセンサデータは、既定値QoS=1でバックエンドに送信しバックエンドのMQTTブローカーへの送達確認ができるまで ICE Coreプロセス内の有限の送信バッファに保存され、送達確認できるまで再送されます。
      ICE Coreとバックエンド間のネットワーク障害などにより、 このバッファが溢れた場合は溢れた分のデータ(デフォルトでは古いデータ)が破棄されます。
      通信の障害が発生したタイミングによっては、再送処理により バックエンドに同じデータが複数送信されることがあります。 (再送の制御は、ICE CoreからMQTT/MQTTSプロトコルによる通信を選択した場合に有効です)
      バックプレッシャー通知機能により、データの送信成功/失敗をアプリケーションに通知することができます。それにより、バッファが溢れてデータ削除されたことを検知できるようになります。

    • バックエンド から ICE Core へのメッセージ送信
      バックエンドから ICE Coreに対するメッセージの送信に対する送達保証はありません。 ICE Core停止時や、ネットワーク障害などの影響でバックエンドからの指示がICE Coreに届かないケースがあり得ます。

  • 順序保証
    ICEはメッセージに対する順序制御はありません。
    障害が発生していないほとんどのケースでは、送信された順序で通信が行われますが、 再送処理中には再送データと新規データの送信が並行で実行されるため、新旧のデータが混在してバックエンドに到着することがあります。
    MQTTメッセージ送信の順序保障機能を有効化することで、再送処理時にもデータ送信順序が保証されるようになり、通信障害が発生した場合でもデータ投入順通りにデータを送信します。

  • 優先度制御
    ICEはメッセージに対する優先度制御はありません。