物联网边缘计算提供断网续传服务。当本地断网或数据上传云端后超过15秒未接收到回复,上传云端的数据将在本地进行持久化。网络恢复后,历史数据将重新上传。使用断网续传功能,需要在物联网平台上配置消息路由,同时您也可以自定义边缘端持久化设置。

物联网平台配置消息路由

边缘端的消息可以有多个来源, 例如设备、函数计算、流数据分析等。物联网边缘计算支持为每个消息来源配置独立的消息路由。若希望某个来源的消息被本地持久化、支持断网续传,则您需要为该消息配置消息路由,且必须将消息目标设置为IoT Hub服务级别设置为1(即QoS =1)。

本文以操作示例驱动文档内容为例,说明如何配置断网续传。

  1. 操作示例驱动内容。
  2. 为上一步中的边缘实例分配消息路由,具体操作请参见设置消息路由
    说明 设置分配消息路由的参数时,必须将消息目标设置为IoT Hub,将服务级别设置为1
    设置消息路由
  3. 实例详情页面,右上角单击部署,重新部署边缘实例。

边缘端持久化配置项

边缘端持久化涉及文件存储目录、节点个数和节点存储空间三个配置项。

说明 整个持久化文件最大存储空间 = 持久化节点个数 x 持久化节点大小。

当整个持久化文件占用存储空间 > 阈值,最久的数据持久化节点将会被删除。

默认配置:

配置项 默认配置
文件存储目录

gw_history_record_storage_path

/linkedge/run/history_record
节点最大个数

gw_history_record_node_num

10个
节点最大存储空间

gw_history_record_node_size

104857600 (100 MB)

自定义配置:

配置项 操作
获取文件存储目录
  • 命令: /linkedge/gateway/build/bin/tool_config -g gw_history_record_storage_path
  • 返回值:
    • Set config success. /linkedge/storage表示获取配置项成功,存储路径为/linkedge/storage
    • Get config fail, code:100100表示持久化存储路径未配置,将使用默认路径/linkedge/run/history_record
设置文件存储目录
  • 命令: /linkedge/gateway/build/bin/tool_config -s gw_history_record_storage_path $存储路径
  • 返回值:
    • Set config success表示设置成功。
    • Get config fail, code:100100表示设置失败,请检查Link IoT Edge服务状态。

      边缘计算服务未对实际的存储路径进行限制,如果该路径下当前用户无读写权限,会造成message-router服务异常。

获取节点个数
  • 命令: /linkedge/gateway/build/bin/tool_config -g gw_history_record_node_num
  • 返回值:
    • Set config success. 20表示获取配置项成功,节点个数20。
    • Get config fail, code:100100表示节点个数未配置,将使用默认值10。
设置节点个数
  • 命令: /linkedge/gateway/build/bin/tool_config -s gw_history_record_node_num $节点个数
  • 返回值:
    • Set config success表示设置成功。
    • Get config fail, code:100100表示设置失败,请检查Link IoT Edge服务状态。

      节点个数可配范围[1-INT_MAX],如果配置越界,日志将会打印the node num must be between 1 and INT32_MAX错误。

获取节点最大存储空间
  • 命令: /linkedge/gateway/build/bin/tool_config -g gw_history_record_node_size
  • 返回值:
    • Set config success. 10485760表示获取配置项成功,节点最大存储空间10485760(10 MB)。
    • Get config fail, code:100100表示节点最大存储空间未配置,将使用默认值104857600(100 MB)。
设置节点最大存储空间
  • 命令: /linkedge/gateway/build/bin/tool_config -s gw_history_record_node_size $节点最大存储空间
  • 返回值:
    • Set config success表示设置成功。
    • Get config fail, code:100100表示设置失败,请检查Link IoT Edge服务状态。

      存储空间可配范围[1-LONGLONG_MAX],如果配置越界,日志将会打印the node size must be between 1 and INT64_MAX错误。

功能验证

以下将使用示例驱动中的光照传感器为例,验证断网续传功能。

该实例的消息路由目标已设置为IoT Hub,服务级别已设置为1;边缘端持久化配置项使用默认配置。

  1. 查看历史数据空间占用。
    查看当前持久化文件占用空间,数据结构会占用一部分磁盘空间。
    说明 持久化文件目录空间!=0并不意味着有历史数据存在。
    #du /linkedge/run/history_record/ -d 0 -h
    28.0K /linkedge/run/history_record/
  2. 仿真网络异常状态。
    拔掉网线,间隔几秒时间执行命令,可以看到持久化文件目录空间占用持续递增。
    #du /linkedge/run/history_record/ -d 0 -h
    28.0K /linkedge/run/history_record/
    
    #du /linkedge/run/history_record/ -d 0 -h
    56.0K /linkedge/run/history_record/
    
    #du /linkedge/run/history_record/ -d 0 -h
    92.0K /linkedge/run/history_record/
  3. 恢复网络。
    重新插上网线,网络恢复后,登录控制台查看光照传感器运行状态页面, 检查断网期间是否有数据丢失。
    1. 登录物联网平台控制台
    2. 在左侧导航栏中,单击边缘计算 > 边缘实例
    3. 在之前创建的实例右侧单击查看。本示例中,查看LinkIoTEdge_Node实例。
    4. 选择设备与驱动页面,单击目标驱动,查看该驱动下之前创建的子设备。本示例中,查看LightSensor设备。查看设备
    5. 设备详情页,选择物模型数据 > 运行状态,打开实时刷新,查看设备上报的最新属性数据。实时刷新
    6. 单击查看数据,可以看到该属性的历史数据。您可以根据时间戳判断断网期间是否有数据。
      本示例中,断网期间的数据,也上传到了云端。查看数据

常见问题

  • 断网续传会对磁盘IO有影响吗?

    答:有影响。断网期间Link IoT Edge会对上云数据进行本地持久化操作,对磁盘IO的具体影响,视消息量大小而定。

  • 网络恢复后,在控制台查看发现断网期间有数据未上报?

    答:目前对历史数据上报限流为10条数据/秒。如果边缘端有大量的历史数据等待上报,完成这一动作将会花费较长的时间。

  • 如何自定义持久化文件存储路径及最大存储空间?

    答:可参考本文上方边缘端持久化配置项内容。

  • 断网期间,数据持久化文件占用空间达到设定的阈值,新的数据会保存吗?

    答:会的。当历史数据持久化文件占用空间达到阈值,最久的历史数据将会被删除。

  • 如何查看断网续传模块日志?
    答: 执行如下命令,查看断网续传模块日志。
    • cd /linkedge/run/logger/message-router/
    • tail -f log.INFO