IoT ワークロードでの Azure Cosmos DB

Azure Cosmos DB
Azure Databricks
Azure Functions
Azure IoT Hub
Power BI

この記事では、Azure Cosmos DB データベース サービスのいくつかの機能に依存するモノのインターネット (IoT) ワークロードについて説明します。 Azure Cosmos DB は、グローバル分散と水平方向のスケーリング用に構築されたマルチモデル データベースです。

グローバル分散では、Azure リージョン間でデータが透過的にスケーリングおよびレプリケートされます。 スループットとストレージを世界全域にスケーリングし、必要な金額だけを支払うことができます。 弾力性のある瞬時のスケーリングにより、取り込みやクエリのパフォーマンスを損なうことなく、多様で予測不可能な IoT ワークロードに対応できます。

Azure Cosmos DB は、次のことができるため、IoT ワークロードに最適です。

  • デバイスのテレメトリ データを高速で取り込み、インデックス付けされたクエリを低待機時間と高可用性で返すことができます。
  • さまざまなデバイス ベンダーから JSON 形式を格納します。これにより、ペイロード スキーマの柔軟性が実現されます。
  • Cassandra、MongoDB、SQL、Gremlin、Etcd、およびテーブル データベースへのワイヤ プロトコル互換 API エンドポイントと、Jupyter Notebook ファイルの組み込みサポートを使用します。

考えられるユース ケース

  • 組み込みのグローバル分散 Azure Cosmos DB 機能を使って、応答性の高い IoT アプリケーションに対する待機時間の短い読み取り/書き込みを可能にします。
  • さまざまなデバイス ベンダーおよびデータ型のデータを処理します。

アーキテクチャ

Azure IoT ソリューション アーキテクチャにおける Azure Cosmos DB の役割を示す図。このアーキテクチャの Visio ファイルをダウンロードします。

データフロー

  1. IoT センサーとエッジ デバイスにより、イベントが Azure IoT Hub を介してメッセージ ストリームとして分析および変換レイヤーに送信されます。 IoT Hub では、指定された期間中、データ ストリームをパーティションに格納できます。

  2. Apache Spark Streaming を実行する Azure Databricks により、IoT Hub からリアルタイムでメッセージがピックアップされ、ビジネス ロジックに基づいてデータが処理されて、ストレージにデータが送信されます。 Structured Streaming では、ある期間の移動の平均値、最小値、最大値の計算など、リアルタイムの分析を提供できます。

  3. Azure Cosmos DB により、デバイス メッセージが JSON ドキュメントとして "ホット データ ストア" に格納されます。 Azure Cosmos DB では、さまざまなデバイス ベンダーの JSON スキーマに対して検証を行うことができます。

    ストレージ レイヤーは以下で構成されます。

    • Azure Blob Storage です。 IoT Hub メッセージ ルーティングでは、生のデバイス メッセージが Blob ストレージに保存され、安価な長期的 "コールド データ ストア" が提供されます。
    • 課金データやユーザー ロールなどのトランザクション データとリレーショナル データを格納する Azure SQL Database。
    • Azure Data Factory によって設定される Azure Synapse Analytics データ ウェアハウス。これにより、Azure Cosmos DB と Azure SQL DB のデータが集計されます。
  4. Microsoft Power BI によってデータ ウェアハウスが分析されます。

  5. プレゼンテーション レイヤーでは、ストレージ レイヤーのデータを使用して、Web、モバイル、および API アプリが構築されます。

  6. 新しいまたは更新されたデバイス メッセージが到着するたびに、Azure Cosmos DB 変更フィードによって Azure Functions 関数がトリガーされます。

  7. この関数により、メッセージに再起動などのデバイス アクションが必要かどうかが判断されます。 必要な場合、この関数によって IoT Hub サービス API を使用して IoT Hub に接続され、デバイス アクションが開始されます。 この関数では、デバイス ツイン、クラウドからデバイスへのメッセージ、またはダイレクト メソッドを使用してアクションを開始できます。

コンポーネント

このワークロードでは、次の Azure コンポーネントが使用されます。

Azure Cosmos DB

この IoT ワークロードでは、グローバルに分散したマルチモデル データベースである Azure Cosmos DB が利用されます。 このワークロードで使用される Azure Cosmos DB の機能は次のとおりです。

  • 整合性レベル。 Azure Cosmos DB では、厳密、有界整合性制約、セッション、一貫性のあるプレフィックス、および最終的 (最強から最弱の順) の 5 つの読み取り整合性レベルがサポートされています。 一般的には、整合性が強化されると、可用性が低下し、待機時間が長くなり、スループットが低下します。 ワークロードの要件に基づいて、整合性レベルを選択できます。

  • Time to live (TTL)。 Azure Cosmos DB では、一定期間後にコンテナーから自動的に項目を削除できます。 この機能により、Azure Cosmos DB は最近のデータのホット データ ストアとして機能し、長期のデータを Azure Blob コールド ストレージに保存することができます。

  • 変更フィード。 変更フィード機能を使用すると、変更されたドキュメントを、修正された順に並べ替えた一覧が出力されます。 Azure Cosmos DB コンテナーの変更フィードの新しい各イベントにより、小規模な再有効化 Azure Functions 関数が自動的にトリガーされます。 JSON ドキュメントのコンテンツによっては、この関数によって Azure IoT Hub Service API に接続し、デバイス上でアクションを実行することができます。

  • 要求ユニット数 (RU)。 RU は Azure Cosmos DB スループットを測定するコンピューティング ユニットです。 RU を使用すると、コストとパフォーマンスの可用性と最適化を維持しながら、Azure Cosmos DB を動的にスケールアップおよびスケールダウンできます。

  • パーティション分割。 パーティション キーにより、Azure Cosmos DB でパーティション内のデータをルーティングする方法が決定されます。 IoT デバイス ID は、IoT アプリケーションの通常のパーティション キーです。

その他の Azure コンポーネント

このソリューションでは、次の Azure コンポーネントも使用されます。

  • Azure IoT Edge により、エッジで機械学習モデルなどのアプリケーションが実行されます。

  • Azure IoT Hub はクラウド ゲートウェイとして機能し、デバイス テレメトリが規模に応じて取り込まれます。 IoT Hub ではデバイスへの通信がサポートされているため、クラウドから IoT Edge、そしてデバイスにアクションを送信できます。

  • Apache Spark Streaming を実行する Azure Databricks は、スケーラブルなフォールト トレラント ストリーミング処理システムであり、バッチ ワークロードとストリーミング ワークロードがネイティブにサポートされています。 Azure Databricks は変換および分析レイヤーであり、azure-eventhubs-spark_2.11:2.3.6 Maven ライブラリを使用して IoT Hub イベント ハブ互換エンドポイントに接続されます。

  • Azure Blob Storage では、非構造化データ用のスケーラブルで安価な長期的コール ドデータ ストレージが提供されます。

  • Azure SQL Database はトランザクションと他の IoT 以外のデータのためのリレーショナル データベースです。

  • Azure Synapse Analytics は、エンタープライズ データ ウェアハウスとビッグ データ分析用のデータ ウェアハウスおよびレポート プラットフォームです。 Synapse Analytics には Azure SQL Database および Azure Cosmos DB からの集計データが含まれています。

    Azure Synapse Link for Azure Cosmos DB を使用すると、トランザクション ワークロードにパフォーマンスやコスト上の影響を及ぼすことなく、Azure Cosmos DB オペレーショナル データに対してほぼリアルタイムの分析を行うことができます。 Synapse Link では、Azure Synapse ワークスペースの 2 つの分析エンジン (SQL サーバーレスSpark プール) が使用されます。

  • Power BI は、データを分析し、分析情報を共有する一連のビジネス分析ツールです。 Power BI を使用して、Azure Analysis Services に格納されているセマンティック モデルに対してクエリを実行することも、Synapse Analytics に対して直接クエリを実行することもできます。

  • Azure App Service では、Web アプリケーションとモバイル アプリケーションをビルドします。 Azure API アプリを使用すると、サードパーティ アプリでサービス レイヤーからのデータに基づいて API を使用できます。

  • Azure Functions は、クラウドで大規模に運用でき、トリガーとバインドを使用してサービスを統合できる、イベント ドリブン型のサーバーレス コンピューティング プラットフォームです。 Azure Functions では、IoT メッセージ形式を変換したり、Azure Cosmos DB 変更フィードへの接続時にアクションをトリガーしたりできます。

代替

  • Azure Databricks の代わりに、変換および分析レイヤーでは HDInsight StormHDInsight Spark または Azure Stream Analytics を使用してストリーミング分析を実行でき、Azure Functions を使用してメッセージ ペイロードを変換できます。

  • サービス ストレージ レイヤーでは、Azure Data Explorer を使用して IoT メッセージを格納できます。 このサービスには、優れた分析機能も備わっています。

考慮事項

Azure Cosmos DB には、単一の論理パーティションに対して 20 GB の制限があります。 ほとんどの IoT ソリューションでは、このサイズで十分です。 そうでない場合は、次の処理を実行できます。

  • 作成したフィールドにパーティション キーを設定し、このフィールドに複合値を割り当てます (デバイス ID + 現在の月と年など)。 この方法では、適切なパーティション設計を実現するために高いカーディナリティが保証されます。 詳細については、パーティション キーの選択方法に関する記事を参照してください。

  • データのライフサイクルに基づいて、古い Azure Cosmos DB データを Azure Blob Storage などのコールド ストレージに移動できます。 変更フィードを組み合わせて使用して、コールド ストレージにデータをレプリケートし、TTL を使用して、一定期間後にコンテナーからデータを自動的に削除することができます。

次の手順