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

了解有关 IoT Edge 设备、模块和子设备的扩展脱机功能

适用于:IoT Edge 1.5 复选标记IoT Edge 1.5

重要

IoT Edge 1.5 LTS 是受支持的版本。 IoT Edge 1.4 LTS 的生命周期结束日期为 2024 年 11 月 12 日。 如果你使用的是早期版本,请参阅更新 IoT Edge

Azure IoT Edge 允许 IoT Edge 设备长时间脱机工作,并允许下游设备脱机工作。 在 IoT Edge 设备首次连接到 IoT 中心后,该设备和任何下游设备可以在间歇性或没有互联网连接的情况下继续运行。

工作原理

当 IoT Edge 设备进入脱机模式,IoT Edge 中心将扮演三个角色:

  • 存储上游的任何消息,并保存它们,直到设备重新连接。
  • 代表 IoT 中心对模块和下游设备进行身份验证,以便它们能够继续运行。
  • 在下游设备之间启用通常通过 IoT 中心的通信。

下面的示例展示了 IoT Edge 方案如何在脱机模式下运行:

  1. 配置设备

    默认情况下,IoT Edge 设备已启用脱机功能。 若要将此功能扩展到其他设备,请将下游设备配置为信任其分配的父设备,并通过父级作为网关路由设备到云通信。

  2. 与 IoT 中心同步

    安装 IoT Edge 运行时后,请确保 IoT Edge 设备至少联机一次,以便与 IoT 中心同步。 在此同步期间,IoT Edge 设备获取有关分配给它的任何下游设备的详细信息。 IoT Edge 设备还会安全地更新其本地缓存,以支持脱机操作,并获取用于存储遥测消息的本地设置。

  3. 脱机

    与 IoT 中心断开连接时,IoT Edge 设备、其部署的模块和任何下游设备都可以无限期地运行。 模块和下游设备可以在脱机状态下通过在 IoT Edge 中心进行身份验证来启动和重启。 上游传至 IoT 中心的设备遥测数据会被本地存储。 模块之间或下游设备之间的通信通过直接方法或消息来维护。

  4. 与 IoT 中心重新连接和重新同步

    还原与 IoT 中心的连接后,IoT Edge 设备会再次同步。 本地存储的消息立即传递到 IoT 中心,但传递取决于连接速度、IoT 中心延迟和相关因素。 消息的传递顺序与消息的存储顺序相同。

    模块和设备的所需属性和报告属性之间的差异已得到协调。 IoT Edge 设备更新对其分配的下游设备集所做的任何更改。

约束和限制

IoT Edge 设备及其分配的下游设备可以在初始的一次性同步后无限期脱机运行。但是,消息存储取决于 生存时间(TTL)设置 和可用磁盘空间。

每当部署状态发生更改(例如新的或失败的部署)时,设备的 EdgeAgent 会更新其报告的属性。 当设备脱机时,EdgeAgent 无法将状态报告到 Azure 门户。 因此,当 IoT Edge 设备没有 Internet 连接时,Azure 门户中的设备状态可以保持 200 正常

设置父设备和子设备

默认情况下,一个父设备最多只能有 100 个子设备。 通过在 edgeHub 模块中设置 MaxConnectedClients 环境变量来更改此限制。 一个子设备只有一个父设备。

注意

下游设备将数据直接发送到互联网或网关设备(支持 IoT Edge 或不支持)。 子设备可以是下游设备,也可以是嵌套拓扑中的网关设备。

下游设备可以是注册到同一 IoT 中心的任何设备、IoT Edge 或非 IoT Edge。

有关在 IoT Edge 设备与 IoT 设备之间创建父子关系的详细信息,请参阅在 Azure IoT 中心对下游设备进行身份验证。 对称密钥、自签名 X.509 和 CA 签名的 X.509 部分提供了示例来演示了在创建设备时如何使用 Azure 门户和 Azure CLI 来定义父子关系。 对于现有设备,请从父设备或子设备的 Azure 门户中的设备详细信息页声明关系。

有关在两台 IoT Edge 设备之间创建父子关系的详细信息,请参阅将下游 IoT Edge 设备连接到 Azure IoT Edge 网关

将父设备设为网关

可以将父/子关系视为透明网关,其中,子设备在 IoT 中心具有自己的标识,但通过其父设备使用云进行通信。 为了安全通信,子设备需要验证父设备是否来自受信任的源。 否则,第三方可能会设置恶意设备来模拟父设备并截获通信。

以下文章详细介绍了建立这种信任关系的一种方法:

指定 DNS 服务器

若要提高可靠性,请指定环境中使用的 DNS 服务器地址。 若要为 IoT Edge 设置 DNS 服务器,请参阅故障排除文章中 Edge 代理模块报告“空配置文件”且设备上未启动模块的解决方法。

可选脱机设置

如果设备已脱机,IoT Edge 父设备将一直存储所有设备到云的消息,直到重新建立连接为止。 IoT Edge 中心模块管理存储和转发脱机消息。

对于可以长时间脱机的设备,通过设置两个 IoT Edge 中心配置选项来优化其性能。

  • 增大生存时间设置,让 IoT Edge 中心将消息保留到设备重新连接为止
  • 为消息存储添加更多磁盘空间。

生存时间

生存时间设置是消息在过期前等待传递的时间(以秒为单位)。 默认值为 7,200 秒(两小时)。 最大值受整数变量的最大值限制,该值约为 20 亿。

此设置是 IoT Edge 中心的一个期望属性,存储在模块孪生体中。 在 Azure 门户中或直接在部署清单中对其进行配置。

"$edgeHub": {
    "properties.desired": {
        "schemaVersion": "1.1",
        "routes": {},
        "storeAndForwardConfiguration": {
            "timeToLiveSecs": 7200
        }
    }
}

系统模块的主机存储

默认情况下,IoT Edge 中心在其本地容器文件系统中存储消息和模块状态。 为了提高可靠性,尤其是在脱机时,应在主机 IoT Edge 设备上划分专用存储空间。 有关详细信息,请参阅向模块授予对设备本地存储的访问权限

后续步骤

详细了解如何为父/子设备连接设置透明网关: