IoT物联网平台如何实现大规模设备的高效控制?

一、设备管理

在IoT领域核心的场景之一就是云和设备交互。如图1是一个典型的业务场景

  1. 设备上报数据到阿里云物联网(IoT)平台,

  2. 然后阿里云物联网(IoT)平台,将上报的数据存储到DB中,

  3. 当然设备上报的数据也可以通过AMQP服务同步到用户的服务器。

  4. 当用户管理设备时,调用开放API将控制指令通过给用户。

     图1是个很简单的业务场景,只有一个设备。当设备规模成倍增加时该如何有效的管理控制这些设备呢,阿里云物联网(IoT)平台提供了面向大规模设备管理的任务管理服务解决这些问题。

IoT物联网平台如何实现大规模设备的高效控制?

(图1)

二、为什么需要任务管理

      可能我们还有些疑惑,设备数量增加管理控制设备会有什么问题,以下已是两个比较典型的场景。

      场景一,批量控制一批设备。如图2所示,需要不断的轮询查询设备信息,然后批量的调用阿里云物联网平台提供的开放API,物联网(IoT)平台服务将消息发送给设备。第一步轮询可能中断,第二步服务调用可能失败、限流等需要重试,第四步设备可能不在线消息不能正常触发设备。

IoT物联网平台如何实现大规模设备的高效控制?

(图2)

场景二,定时批量控制一批设备。如图3所示,对于定时的触发的场景,需要增加定时器。当时间到时触发server轮询查询设备信息,然后调用阿里云物联网平台提供的服务将消息推送给设备。场景2需要自己实现定时回调的能力,增加业务的复杂度。

IoT物联网平台如何实现大规模设备的高效控制?

(图3)

场景一和场景二,都是比较典型的批量管理控制设备的场景。实现稳定的批量管理控制设备场景有一定的成本。阿里云物联网提供的任务管理服务,提供简单易用的批量控制设备的服务,简化批量管理控制设备流程,降低批量控制设备的成本。

三、任务管理提供能力

    便捷精准的设备选择服务:无需批量的循环查询设备,不需要考虑机器重启循环中的问题。同时提供多样的设备选择策略,便捷精准的选择一批目标设备,从而管理控制这批设备。

    快速批量的任务调度服务:无需循环调用IoT开放API,不需要考虑容错、限流的问题。

    方便的自定义任务服务:无需修改产品功能定义,可以自由扩展下发给设备的信息内容,避免批量服务调用和属性设置需要修改产品的功能定义。

    任务管理提供以上3种能力,助力构建大规模运维设备的场景。解决循环查询设备、服务调用容错、方便搭建业务场景。如下是任务管理整体的架构。

IoT物联网平台如何实现大规模设备的高效控制?

(图4)

四、设备选择服务

IoT物联网平台如何实现大规模设备的高效控制?

      

(图5)

    创建任务时,阿里云物联网平台同步初始化一个关联的设备选择服务。按照创建任务的策略,选择目标设备然后将设备持久化到DB中。

     阿里云物联网平台提供按照产品、分组选择设备能力,同时也支持指定的设备。后续将提供sql方式支持更多的场景方便选择需要控制的设备。

五、任务调度服务

IoT物联网平台如何实现大规模设备的高效控制?

(图6)

当任务到了需要执行的时间点, 阿里云物联网平台从DB中获取出需要执行的任务详情,并行分发到执行器进行批量执行,同时保障任务完整的执行。

六、自定义任务服务

IoT物联网平台如何实现大规模设备的高效控制?

    

   

(图7)

   服务调用和属性设置没有设备执行的任务状态信息,满足不了业务场景,任务管理还提供了自定义任务的能力,可以方便快速的拓展业务场景,如配置下发、软件升级。

    创建任务时选择自定义任务,然后上传设备执行需要文件,文件通过阿里云安全扫描后存储到OSS中,任务调度后,通过自定义任务的通信协议将消息发送给设备。设备可以直接从OSS中获取,任务执行所需要的文件。

    当设备不在线时,机器重启时可以请求当前可以执行的任务信息,避免任务的丢失。设备资源不够时,也可以拒绝执行任务。任务执行完成后,上报任务的状态。

    阿里云物联网平台接收设备上报的任务状态,实时统计任务的执行状态。通过加锁避免设备并发更新状态,保证状态准确性

七、任务管理技术挑战

    任务管理的业务模型上并不是很复杂,但是需要保证任务快速稳定的仅执行一次问题就不简单了。同时任务执行过程中时间、环境并不可控如集群中机器可能重启,任务特性不同这些都给任务管理带了挑战。例如:

  • 机器宕机集群发布,任务执行中断

  • 任务执行时间长短不一样,可能会出现饥饿

  • 任务执行优先级不一样,优先级低的任务不能阻塞优先级高的任务

  • 任务只需要执行一次

  • 任务调度和任务执行的时间性能有差异

IoT物联网平台如何实现大规模设备的高效控制?

(图8)

任务调度策略

    不同的任务关联的设备数量不一致,导致任务的执行时间不一样。对于每个用户来说任务的执行机会都是相等的,需要避免执行时间长的任务一直被调度,新创建的时间短的任务得不到处理。

  • 任务量较少时按照调度时间升序排列,选择待执行的任务

  • 当任务持续增多时,任务开始有一定量的积压,采用任务的响应比排序,选择待执行的任务。响应比计算方式(任务等待时间+任务执行时间)/(任务执行时间)

  • 采用当任务量一定时采用响应比其实是一个优化,响应比的计算需要时间较久。

任务隔离&异步化

   每种类型的任务自己的特性执行时间不一样,同时任务种类多了后的任务的重要程度会有所差异。 如图8所示:

  • 针对不同类型的任务,任务管理集群master节点获取需要执行任务时,分为不同的线程池

  • 任务执行时不同类型的任务,采用不同线程池相互隔离避免任务执行时间不一样相互影响

  • 任务的整个过程如分发、执行采用异步化避免任务执行时间过长,阻塞上游系统

     

任务检测&重试

    集群的机器业务迭代必不可免的有发布的需求,同时机器也可能由于某种原因宕机,因此针对任务需要检测其状态并采用不同的策略进行充实。如图8所示:

  • 任务执行时,节点上定时上报其上任务的心跳信息

  • 任务管理集群的master节点定义检测有问题的任务,并针对有问题任务的任务重试

  • 不同类型的任务采用不同的重试策略,有些任务直接出发执行,有些任务采用退避重试的策略,并控住重试的最大次数。对于超出重试次数的任务,增加监控告警,及时发现问题并处理

  • 任务的执行需要加锁,避免任务重复执行

任务并发度控制

    任务调度的成本和时间其实很低,任务调度也很快,但是任务执行确需要一定的时间,两者一般相差角度。如何避免任务压垮业务系统也是需要考虑的。

  • 采用任务类型维度、单机维度、用户维度3个维度进行任务的并发度限制

八、如何使用任务管理

IoT物联网平台如何实现大规模设备的高效控制?

(图9)

如图9所示,为整个任务管理使用的流程信息

  1. 前置准备

  1. 创建产品和设备,详见创建产品。已有产品和设备,可以忽略此步骤。

  2. 对于属性设置和服务调用类型任务,相关的属性和服务需提前在产品功能定义中编辑并发布。

  1. 设备开发

  1. 服务定义或者属性设置类型服务,设备采用服务调用和属性设置的topic和阿里云物联网平台通信。

  2. 自定义类型服务,设备采用自定义任务的topic和阿里云物联网平台通信。

  1. 设备和相关的功能开发完成后,可以使用任务管理控制设备

  1. 按照业务类型选择不同类型的任务,并设置相应的参数,具体参考任务管理说明文档

  2. 任务创建后阿里云物联网平台,会进行调度执行,可以在控制台上查看任务执行的详情。

  3. 任务执行完成后,可以通过任务重试,重新执行任务中失败的作业。

IoT物联网平台如何实现大规模设备的高效控制?

扫码免费参加AIoT训练营

往期推荐

1、HarmonyOS 到底是不是Android套壳?

2、5G将是一个彻底失败的通信技术吗?

3、AWS IoT 物联网平台 MQTT 通讯模式

4、IoT平台如何实现 100万/秒消息广播?

5、无GPS模块,IoT设备如何定位?

6、 IoT物联网 4 本好书推荐

IoT物联网平台如何实现大规模设备的高效控制?

本文章来源于互联网,如有侵权,请联系删除!原文地址:IoT物联网平台如何实现大规模设备的高效控制?

相关推荐: 物联网平台搭建的全过程介绍(六)——物联网TSDB之基本知识及读写代码介绍

目录 一、TSDB基本知识 二、物联网平台数据流通架构 三、TSDB数据结构 1、TSDB数据包的组成 2、TSDB的另外两个相关概念 四、阿里云物联网平台实例内TSDB功能介绍 1、数据写入 (1)需要添加的依赖 (2)写入数据代码 2、数据查询 (1)需要…