任务管理轻松实现大规模设备管理控制——设备管理类

设备管理

在IoT领域核心的场景之一就是云和设备交互。如图1是一个典型的业务场景,
1.设备上报数据到阿里云物联网(IoT)平台,
2.然后阿里云物联网(IoT)平台,将上报的数据存储到DB中,
3.当然设备上报的数据也可以通过AMQP服务同步到用户的服务器。
4.当用户管理设备时,调用开放API将控制指令通过给用户。
图1是个很简单的业务场景,只有一个设备。当设备规模成倍增加时该如何有效的管理控制这些设备呢,阿里云物联网(IoT)平台提供了面向大规模设备管理的任务管理服务解决这些问题。              
图片
                                                                                     图1

为什么需要任务管理

可能我们还有些疑惑,设备数量增加管理控制设备会有什么问题,以下已是两个比较典型的场景。
场景一,批量控制一批设备。如图2所示,需要不断的轮询查询设备信息,然后批量的调用阿里云物联网平台提供的开放API,物联网(IoT)平台服务将消息发送给设备。 第一步轮询可能中断,第二步服务调用可能失败、限流等需要重试,第四步设备可能不在线消息不能正常触发设备。                
图片
                                                                                 图2    
场景二,定时批量控制一批设备。如图3所示,对于定时的触发的场景,需要增加定时器。当时间到时触发server轮询查询设备信息,然后调用阿里云物联网平台提供的服务将消息推送给设备。场景2需要自己实现定时回调的能力,增加业务的复杂度。
图片
                                                                                 图3    
场景一和场景二,都是比较典型的批量管理控制设备的场景。实现稳定的批量管理控制设备场景有一定的成本。阿里云物联网提供的任务管理服务,提供简单易用的批量控制设备的服务,简化批量管理控制设备流程,降低批量控制设备的成本。

任务管理提供能力

便捷精准的设备选择服务:无需批量的循环查询设备,不需要考虑机器重启循环中的问题。同时提供多样的设备选择策略,便捷精准的选择一批目标设备,从而管理控制这批设备。    
快速批量的任务调度服务:无需循环调用IoT开放API,不需要考虑容错、限流的问题。    
方便的自定义任务服务:无需修改产品功能定义,可以自由扩展下发给设备的信息内容,避免批量服务调用和属性设置需要修改产品的功能定义。    
任务管理提供以上3种能力,助力构建大规模运维设备的场景。解决循环查询设备、服务调用容错、方便搭建业务场景。如下是任务管理整体的架构。                    
图片
                                                                                             图4
设备选择服务      
图片
                                                                                图5      
创建任务时,阿里云物联网平台同步初始化一个关联的设备选择服务。按照创建任务的策略,选择目标设备然后将设备持久化到DB中。      
阿里云物联网平台提供按照产品、分组选择设备能力,同时也支持指定的设备。后续将提供sql方式支持更多的场景方便选择需要控制的设备。

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

自定义任务服务
图片
                                                                                 图7    
服务调用和属性设置没有设备执行的任务状态信息,满足不了业务场景,任务管理还提供了自定义任务的能力,可以方便快速的拓展业务场景,如配置下发、软件升级。    
创建任务时选择自定义任务,然后上传设备执行需要文件,文件通过阿里云安全扫描后存储到OSS中,任务调度后,通过自定义任务的通信协议将消息发送给设备。设备可以直接从OSS中获取,任务执行所需要的文件。    
当设备不在线时,机器重启时可以请求当前可以执行的任务信息,避免任务的丢失。设备资源不够时,也可以拒绝执行任务。任务执行完成后,上报任务的状态。    
阿里云物联网平台接收设备上报的任务状态,实时统计任务的执行状态。通过加锁避免设备并发更新状态,保证状态准确性。

任务管理技术挑战

任务管理的业务模型上并不是很复杂,但是需要保证任务快速稳定的仅执行一次问题就不简单了。 同时任务执行过程中时间、环境并不可控如集群中机器可能重启,任务特性不同这些都给任务管理带了挑战。例如:
·机器宕机集群发布,任务执行中断
·任务执行时间长短不一样,可能会出现饥饿
·任务执行优先级不一样,优先级低的任务不能阻塞优先级高的任务
·任务只需要执行一次
·任务调度和任务执行的时间性能有差异                                
图片
                                                                               图8
任务调度策略    
不同的任务关联的设备数量不一致,导致任务的执行时间不一样。对于每个用户来说任务的执行机会都是相等的,需要避免执行时间长的任务一直被调度,新创建的时间短的任务得不到处理。
·任务量较少时按照调度时间升序排列,选择待执行的任务
·当任务持续增多时,任务开始有一定量的积压,采用任务的响应比排序,选择待执行的任务。响应比计算方式(任务等待时间+任务执行时间)/(任务执行时间)
·采用当任务量一定时采用响应比其实是一个优化,响应比的计算需要时间较久。

任务隔离&异步化    
每种类型的任务自己的特性执行时间不一样,同时任务种类多了后的任务的重要程度会有所差异。  如图8所示:
·针对不同类型的任务,任务管理集群master节点获取需要执行任务时,分为不同的线程池
·任务执行时不同类型的任务,采用不同线程池相互隔离避免任务执行时间不一样相互影响
·任务的整个过程如分发、执行采用异步化避免任务执行时间过长,阻塞上游系统

任务检测&重试    
集群的机器业务迭代必不可免的有发布的需求,同时机器也可能由于某种原因宕机,因此针对任务需要检测其状态并采用不同的策略进行充实。如图8所示:
·任务执行时,节点上定时上报其上任务的心跳信息
·任务管理集群的master节点定义检测有问题的任务,并针对有问题任务的任务重试
·不同类型的任务采用不同的重试策略,有些任务直接出发执行,有些任务采用退避重试的策略,并控住重试的最大次数。对于超出重试次数的任务,增加监控告警,及时发现问题并处理
·任务的执行需要加锁,避免任务重复执行

任务并发度控制    
任务调度的成本和时间其实很低,任务调度也很快,但是任务执行确需要一定的时间,两者一般相差角度。如何避免任务压垮业务系统也是需要考虑的。
·采用任务类型维度、单机维度、用户维度3个维度进行任务的并发度限制

如何使用任务管理

图片
                                                                              图9
如图9所示,为整个任务管理使用的流程信息
1.前置准备
2.创建产品和设备,详见创建产品。 已有产品和设备,可以忽略此步骤。
3.对于属性设置和服务调用类型任务,相关的属性和服务需提前在产品功能定义中编辑并发布。
4.设备开发
5.服务定义或者属性设置类型服务,设备采用服务调用和属性设置的topic和阿里云物联网平台通信。
6.自定义类型服务,设备采用自定义任务的topic和阿里云物联网平台通信。
7.设备和相关的功能开发完成后,可以使用任务管理控制设备
8.按照业务类型选择不同类型的任务,并设置相应的参数,具体参考任务管理说明文档。
9.任务创建后阿里云物联网平台,会进行调度执行,可以在控制台上查看任务执行的详情。
10.任务执行完成后,可以通过任务重试,重新执行任务中失败的作业。

物联网平台产品介绍详情:https://www.aliyun.com/produc...

              阿里云物联网平台客户交流群
1 声望
1 粉丝
0 条评论
推荐阅读
物联网数据应用开发最佳实践——数据价值类
本文以IoT Studio项目引用同一产品多个设备为例,设备主要属性为三个温度值(temperature_1,temperature_2,temperature_3),代表设备不同部件温度值,一个温度告警事件,查看设备单一属性一天内最高温度,最低温...

阿里云AIoT阅读 261

花了几个月时间把 MySQL 重新巩固了一遍,梳理了一篇几万字 “超硬核” 的保姆式学习教程!(持续更新中~)
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。

民工哥14阅读 2.1k

封面图
硬卷完了!MongoDB 打怪升级进阶成神之路( 2023 最新版 )!
前面我们学习:MySQL 打怪升级进阶成神之路、Redis 打怪升级进阶成神之路,然后我们还在继续 NoSQL 的卷王之路。从第一篇文章开始,我们逐步详细介绍了 MogoDB 基础概念、安装和最基本的CURD操作、索引和聚合、工...

民工哥7阅读 749

封面图
Win10 安装Docker以及Jenkins(超级详细篇)
安装Docker下载地址:[链接] ,按照它的指引教程,无脑下一步即可。安装成功后电脑会重启。打开docker桌面端,会显示进入链接,下载WSL 安装包进行无脑安装即可。安装 Linux 内核更新包 (重启电脑)重启 Docker ...

九旬3阅读 1.1k

蚂蚁安全科技 Nydus 镜像加速实践
蚂蚁安全科技 Nydus 镜像加速实践原创 曦栖 金融级分布式架构文|蚂蚁集团 ZOLOZ 团队使用全球领先安全科技,为用户和机构提供安全、便捷的安全风控解决方案。本文 6386 字 阅读 12 分钟背景简介ZOLOZ[1]是蚂蚁集...

SOFAStack1阅读 3.8k

封面图
优秀的在线画图工具分享,千万不要错过哦!
PDDON是一款支持低代码(lowcode)的免费在线画图工具。可用于绘制架构图、流程图、UML、网络拓扑图、韦恩图、鱼骨图、思维导图、BPMN等,并且支持对象建模、数据库建模、代码/脚本生成。

PDDON2阅读 653

confluence7.2.1的部署与迁移---呕心沥血版
Confluence是一个专业的企业知识管理与协同软件,也可以用于构建企业wiki。使用简单,但它强大的编辑和站点管理特征能够帮助团队成员之间共享信息、文档协作、集体讨论,信息推送。 到官网下载最新版本,截止目前...

暗涌阅读 7.9k

1 声望
1 粉丝
宣传栏