你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

IoT 工作负荷中的 Azure Cosmos DB

Azure Cosmos DB
Azure Databricks
Azure Functions
Azure IoT 中心
Power BI

本文介绍依赖于多项 Azure Cosmos DB 数据库服务功能的物联网 (IoT) 工作负荷。 Azure Cosmos DB 是一个多模型数据库,专为全球分发和水平缩放而构建。

全球分发在不同 Azure 区域间透明地缩放和复制数据。 可以根据自己的需求在全球范围内缩放吞吐量和存储,仅针对所需量付费。 即时弹性缩放可适应多种不可预测的 IoT 工作负荷,同时不会影响数据引入或查询性能。

Azure Cosmos DB 非常适合 IoT 工作负荷,因为它能:

  • 以高速率引入设备遥测数据,并返回低延迟且具有高可用性的索引查询。
  • 存储来自不同设备供应商的 JSON 格式,从而在有效负载架构中实现灵活性。
  • 通过使用 Cassandra 的线路协议兼容 API 终结点、MongoDB、SQL、Gremlin 等和表数据库,以及对 Jupyter Notebook 文件的内置支持。

可能的用例

  • 使用内置的全局分布式 Azure Cosmos DB 功能为高响应型 IoT 应用程序实现低延迟读写功能。
  • 处理多种设备供应商和数据类型各不相同的数据。

体系结构

此图显示了 Azure IoT 解决方案体系结构中 Azure Cosmos DB 的角色。下载此体系结构的 Visio 文件

数据流

  1. IoT 传感器和 Edge 设备通过 Azure IoT 中心将事件作为消息流发送到分析和转换层。 IoT 中心可在分区中将数据流存储一段特定时间。

  2. 具有 Apache Spark 结构化流式处理的 Azure Databricks 实时从 IoT 中心选取消息、根据业务逻辑处理数据并将数据发送到存储。 结构化流式处理可以提供实时分析,例如计算移动平均值或某些时间段内的最小值和最大值。

  3. Azure Cosmos DB 将设备消息以 JSON 文档的格式存储在热数据存储中。 Azure Cosmos DB 可以针对来自不同设备供应商的 JSON 架构进行验证。

    存储层还包括:

    • Azure Blob 存储。 IoT 中心消息路由会将原始设备消息保存到 Blob 存储,从而提供实惠的长期冷数据存储。
    • Azure SQL 数据库,用于存储事务数据和关系数据,例如计费数据和用户角色。
    • Azure Synapse Analytics 数据仓库由 Azure 数据工厂填充,可聚合 Azure Cosmos DB 和 Azure SQL DB 中的数据。
  4. Microsoft Power BI 分析数据仓库。

  5. 表示层使用存储层中的数据来生成 Web 应用、移动应用和 API 应用。

  6. 每当新的或更新的设备消息到达时,Azure Cosmos DB 更改源将触发 Azure Functions 函数。

  7. 该函数确定消息是否需要设备操作,如重新启动。 如果需要,该函数会使用 IoT 中心服务 API 连接到 IoT 中心,并启动相应的设备操作。 该函数可以使用设备孪生、云到设备消息或直接方法启动操作。

组件

此工作负荷使用以下 Azure 组件:

Azure Cosmos DB

此 IoT 工作负荷聚焦于 Azure Cosmos DB,这是一个全球分布式多模型数据库。 该工作负荷使用以下 Azure Cosmos DB 功能:

  • 一致性级别。 Azure Cosmos DB 支持五个读取一致性级别,从最强到最弱依次为:“强”、“有限过期”、“会话”、“一致前缀”和“最终”。 一般情况下,较高的一致性级别会导致可用性降低、延迟增加以及吞吐量降低。 可以根据工作负荷要求选择一致性级别。

  • 生存时间 (TTL)。 Azure Cosmos DB 可在一段时间以后从容器自动删除项。 此功能让 Azure Cosmos DB 充当最近数据的热数据存储,长期数据存储在 Azure Blob 冷存储中。

  • 更改源。 更改源功能按照所更改文档的修改顺序输出这些文档的排序列表。 Azure Cosmos DB 容器的更改源中的每个新事件都会自动触发一个小型反应 Azure Functions 函数。 根据 JSON 文档的内容,该函数可以连接到 Azure IoT 中心服务 API 并在设备上执行操作。

  • 请求单位 (RU)。 RU 是用于度量 Azure Cosmos DB 吞吐量的计算单位。 可以使用 RU 来动态缩放 Azure Cosmos DB,同时保持可用性并优化成本和性能。

  • 分区。 分区键确定 Azure Cosmos DB 在分区中路由数据的方式。 IoT 设备 ID 是 IoT 应用程序的常用分区键。

其他 Azure 组件

此解决方案还使用以下 Azure 组件:

  • Azure IoT Edge 在边缘运行应用程序,例如机器学习模型。

  • Azure IoT 中心充当云网关,大规模引入设备遥测数据。 IoT 中心支持与设备进行返回通信,从而允许将操作从云或 IoT Edge 发送到设备。

  • 具有 Spark 结构化流式处理的 Azure Databricks 是一种可缩放且可容错的流处理系统,对批处理和流式处理工作负荷提供本机支持。 Azure Databricks 是转换和分析层,使用 azure-eventhubs-spark_2.11:2.3.6 Maven 库连接到与 IoT 中心事件中心兼容的终结点。

  • Azure Blob 存储为非结构化数据提供可缩放且实惠的长期冷数据存储。

  • Azure SQL 数据库是适用于事务数据和其他非 IoT 数据的关系数据库。

  • Azure Synapse Analytics 是适用于企业数据仓库和大数据分析的数据仓库和报告平台。 Synapse Analytics 包含来自 Azure SQL 数据库和 Azure Cosmos DB 的聚合数据。

    Azure Synapse Link for Azure Cosmos DB 可对 Azure Cosmos DB 操作数据进行准实时的分析,且对事务性工作负荷没有任何性能或成本影响。 Synapse Link 使用 Azure Synapse 工作区中的两个分析引擎:SQL 无服务器Spark 池

  • Power BI 是一套业务分析工具,可以分析数据并分享见解。 Power BI 可以查询 Azure Analysis Services 中存储的语义模型,或者直接查询 Synapse Analytics。

  • Azure 应用服务生成 Web 和移动应用程序。 Azure API 应用允许第三方应用基于服务层中的数据使用 API。

  • Azure Functions 是事件驱动的无服务器计算平台,可在云中大规模运行,并通过使用触发器和绑定集成服务。 Azure Functions 可以转换 IoT 消息格式,或者在连接到 Azure Cosmos DB 更改源时触发操作。

备选方法

注意事项

Azure Cosmos DB 对单个逻辑分区的限制为 20 GB。 对于大多数 IoT 解决方案而言,此大小就足够了。 如果不够,可以:

  • 将分区键设置为人工字段,并为字段分配复合值,例如“设备 ID + 当前月份和年份”。 对于良好的分区设计,此策略可确保较高的基数值。 若要了解详细信息,请参阅选择分区键

  • 根据数据生命周期,可以将较旧的 Azure Cosmos DB 数据移至冷存储,例如Azure Blob 存储。 可以结合使用更改源,将数据复制到冷存储,TTL 可以在某个时间段后自动从容器中删除数据。

后续步骤