了解 Azure IoT Edge 运行时及其体系结构

适用于:IoT Edge 1.4 checkmark IoT Edge 1.4

IoT Edge 运行时是将某个设备转换为 IoT Edge 设备的程序集合。 在 IoT Edge 运行时组件的共同作用下,IoT Edge 设备可以接收要在边缘上运行的代码并传递结果。

IoT Edge 运行时负责 IoT Edge 设备上的以下功能:

  • 在设备上安装和更新工作负荷。

  • 维护设备上的 Azure IoT Edge 安全标准。

  • 确保 IoT Edge 模块始终处于运行状态。

  • 将模块运行状况报告给云以进行远程监视。

  • 管理以下对象之间的通信:

    • 下游设备和 IoT Edge 设备
    • IoT Edge 设备上的模块
    • IoT Edge 设备和云
    • IoT Edge 设备

Screenshot of how runtime communicates insights and module health to I o T Hub.

IoT Edge 运行时的职责分为两类:通信和模块管理。 这两个角色由作为 IoT Edge 运行时一部分的两个组件执行。 IoT Edge 代理部署并监视模块,而 IoT Edge 中心则负责通信。

IoT Edge 代理和 IoT Edge 中心都是模块,就像 IoT Edge 设备上运行的其他任何模块一样。 有时将它们称为“运行时模块”。

IoT Edge 代理

IoT Edge 代理是构成 Azure IoT Edge 运行时的两个模块之一。 它负责实例化模块、确保它们继续运行以及报告返回到 IoT 中心的模块的状态。 此配置数据作为 IoT Edge 代理模块孪生的属性写入。

IoT Edge 安全守护程序在设备启动时启动 IoT Edge 代理。 该代理从 IoT 中心检索其模块孪生并检查部署清单。 部署清单是一个 JSON 文件,它声明了需要启动的模块。

部署清单中的每项都包含有关模块的特定信息,并由 IoT Edge 代理用于控制模块的生命周期。 有关 IoT Edge 代理用来控制模块的所有属性的详细信息,请阅读 IoT Edge 代理和 IoT Edge 中心模块孪生的属性

IoT Edge 代理会将运行时响应发送到 IoT 中心。 下面是可能的响应的列表:

  • 200 - 正常
  • 400 - 部署配置格式不正确或无效。
  • 417 - 没有为设备设置部署配置。
  • 412 - 部署配置中的架构版本无效。
  • 406 - IoT Edge 设备脱机或不发送状态报告。
  • 500 - IoT Edge 运行时中出现了一个错误。

若要详细了解如何创建部署清单,请参阅了解如何在 IoT Edge 中部署模块和建立路由

安全性

IoT Edge 代理在 IoT Edge 设备的安全性中起着关键作用。 例如,它会执行某些操作,如启动之前验证模块的映像。

有关 Azure IoT Edge 安全框架的详细信息,请阅读有关 IoT Edge 安全管理器的内容。

IoT Edge 中心

IoT Edge 中心是构成 Azure IoT Edge 运行时的另一个模块。 它通过公开与 IoT 中心相同的协议终结点,充当 IoT 中心的本地代理。 这种一致性意味着客户端可以连接到 IoT Edge 运行时,就像连接到 IoT 中心一样。

IoT Edge 中心不是在本地运行的完整版本的 IoT 中心。 IoT Edge 中心将一些任务以无提示方式委托给 IoT 中心。 例如,IoT Edge 中心会在第一次连接时自动从 IoT 中心下载授权信息,使设备能够进行连接。 建立第一个连接之后,IoT Edge 中心会在本地缓存授权信息。 该设备将来的连接已经过授权,无需再次从云中下载授权信息。

云通信

为减少 IoT Edge 解决方案使用的带宽,IoT Edge 中心优化了对云的实际连接数量。 IoT Edge 中心采用来自模块或下游设备的逻辑连接,并将它们组合为连接到云的单个物理连接。 此过程的详细信息对解决方案的其他部分透明。 即使客户端都通过相同连接进行发送,它们也会认为具有自己的云连接。 IoT Edge 中心可以使用 AMQP 或 MQTT 协议与云进行上游通信,该协议独立于下游设备使用的协议。 不过,IoT Edge 中心目前仅支持通过以下方式将多个逻辑连接组合成单个物理连接:使用 AMQP 作为上游协议并使用其多路复用功能。 AMQP 是默认的上游协议。

Screenshot showing relationships to I o T Edge hub as a gateway between physical devices and I o T Hub.

IoT Edge 中心可以确定其是否连接到了 IoT 中心。 如果连接丢失,IoT Edge 中心将在本地保存消息或孪生更新。 一旦重新建立连接,将同步所有数据。 用于此临时缓存的位置由 IoT Edge 中心的模块孪生的属性决定。 只要设备具有存储容量,缓存的大小就没有限制并且会增加。 有关详细信息,请参阅脱机功能

本地通信

IoT Edge 中心为本地通信提供了便利。 它通过对消息进行中转来实现设备到模块和模块到模块的通信,使设备和模块彼此独立。 IoT 中心支持的消息路由功能同样受 IoT Edge 中心的支持。

使用路由

中转机制使用与 IoT 中心相同的路由功能来指定如何在设备或模块之间传递消息。 首先,设备或模块指定它们接受消息的输入和写入消息的输出。 然后,解决方案开发人员可以使用潜在的筛选器在源(例如输出)和目标(例如输入)之间路由消息。

Screenshot showing how routes between modules go through I o T Edge hub.

通过 Azure IoT 设备 SDK 使用 AMQP 协议构建的设备或模块可以使用路由。 支持所有消息传送 IoT 中心基元(例如遥测、直接方法、C2D、孪生),但不支持通过用户定义的主题进行通信。

有关路由的详细信息,请参阅了解如何在 IoT Edge 中部署模块和建立路由

可用的中转机制功能:

功能 路由
D2C 遥测
本地遥测
DirectMethods
孪生体
用于设备的 C2D
中间件排序
Filtering
用户定义的主题
设备到设备
本地广播

连接到 IoT Edge 中心

IoT Edge 中心接受来自设备或模块客户端的连接(通过 MQTT 协议或 AMQP 协议)。

注意

IoT Edge 中心支持使用 MQTT 或 AMQP 进行连接的客户端, 它不支持使用 HTTP 的客户端。

当客户端连接到 IoT Edge 中心时,会发生以下情况:

  1. 如果根据建议使用传输层安全性 (TLS),则会构建一个 TLS 通道,用于在客户端与 IoT Edge 中心之间建立加密通信。
  2. 用于标识自身的身份验证信息将从客户端发送到 IoT Edge 中心。
  3. IoT Edge 中心会根据其授权策略为连接授权或拒绝连接。

安全连接 (TLS)

默认情况下,IoT Edge 中心仅接受使用传输层安全性 (TLS) 进行保护的连接,例如第三方无法解密的加密连接。

如果客户端通过端口 8883 (MQTTS) 或 5671 (AMQPS) 连接到 IoT Edge 中心,则必须构建 TLS 通道。 在 TLS 握手期间,IoT Edge 中心会发送需要由客户端进行验证的证书链。 为了验证证书链,必须将 IoT Edge 中心的根证书作为受信任的证书安装在客户端上。 如果根证书不受信任,则 IoT Edge 中心会拒绝客户端库,此时会出现证书验证错误。

透明网关准备下游设备文档中介绍了在设备客户端上安装中转站的该根证书的步骤。 利用 IoT Edge 守护程序 API,模块可以使用与 IoT Edge 中心相同的根证书。

身份验证

IoT Edge 中心仅接受来自具有 IoT 中心标识的设备或模块的连接。 例如,那些已在 IoT 中心注册并使用 IoT 中心支持的下述三种客户端身份验证方法之一来证明其身份的设备或模块:对称密钥身份验证X.509 自签名身份验证X.509 CA 签名身份验证。 IoT Edge 中心可在本地验证这些 IoT 中心标识,因此脱机时仍可建立连接。

IoT Edge 模块目前仅支持对称密钥身份验证。

授权

验证客户端是否属于 IoT 中心内定义的一组受信任的客户端。 这组受信任的客户端是通过在 IoT 中心设置父/子关系或设备/模块关系指定的。 在 IoT Edge 中创建模块时,会自动在此模块与其 IoT Edge 设备之间建立信任关系。 这是路由中转机制支持的唯一授权模型。

远程配置

IoT Edge 中心完全由云控制。 它通过其模块孪生从 IoT 中心获取配置。 孪生包含一个被称为路由的必需属性,它声明在部署内传递消息的方式。 有关路由的详细信息,请参阅声明路由

此外,还可以通过在 IoT Edge 中心内设置环境变量来执行多个配置。

运行时质量遥测

IoT Edge 从主机运行时和系统模块收集匿名遥测以提高产品质量。 此信息称为运行时质量遥测。 收集的遥测数据作为设备到云的消息从 IoT Edge 代理定期发送到 IoT 中心。 这些消息不会显示在客户的常规遥测中,也不会消耗任何消息配额。

IoT Edge 代理和中心生成指标,你可以收集这些指标来了解设备性能。 IoT Edge 代理收集这些指标的子集,作为运行时质量遥测的一部分。 为运行时质量遥测收集的指标标有 ms_telemetry 标志。 有关所有可用指标的信息,请参阅 Access 内置指标

任何个人身份信息或组织识别信息(如设备和模块名称)都将在上传之前删除,以确保运行时质量遥测的匿名特性。

IoT Edge 代理每小时收集一次遥测数据,每 24 小时向 IoT 中心发送一条消息。

如果要选择不从设备发送运行时遥测数据,可通过以下两种方式实现此目的:

  • SendRuntimeQualityTelemetry 环境变量的 edgeAgent 设置为 false,或者
  • 在部署过程中取消选中 Azure 门户中的选项。

后续步骤