基于XXL-JOB的分布式定时任务研究和应用
2022-06-21郑祥,顾丹鹏,陈肖勇
郑祥,顾丹鹏,陈肖勇
摘 要: 随着微服务架构成为主流,单体定时任务由于单点故障等问题渐渐无法满足平时的业务需求。分布式定时任务通过集群的方式进行管理调度,大大降低了开发和维护成本。通过分布式部署,保证了系统的高可用,伸缩性,提高了容错率。XXL-JOB拥有优秀的可视化界面,使用方便灵活高效。对比市场上的主流定时任务框架,基于XXL-JOB给出了一种分布式定时任务的解决方案,并在石坞实验室项目进行了部署和使用。
关键词: 微服务; 分布式; 定时任务; XXL-JOB
中图分类号:TP399 文献标识码:A 文章编号:1006-8228(2022)06-80-03
Distributed timing task deployment based on XXL-JOB
Zheng Xiang1,2, Gu Danpeng1,2, Chen Xiaoyong1,2
(1. PowerchinaHuadong Engineering Corporation Limited, Hangzhou, Zhejiang 311122,China;
2. Zhejiang Huadong Engineering Digital Technology Co.Ltd)
Abstract: As the microservice architecture becoming the mainstream, the single timing task can not meet the usual business needs due to single point of failure and other problems. Distributed timing tasks are managed and scheduled by cluster, which greatly reduces the development and maintenance cost. Through distributed deployment, the high availability, scalability and fault tolerance of the system are ensured. XXL-JOB has an excellent visual interface, which can deploy and manage timing tasks through the console, and is convenient, flexible and efficient. Compared with the mainstream timing task framework in the market, a distributed timing task solution is given based on XXL-JOB, which is deployed and used in Shiwu laboratory project.
Key words: microservices; distributed; timing task; XXL-JOB
0 引言
隨着业务场景变得越来越复杂,定时任务在程序设计中存在广泛应用。刚开始企业发展规模较小,业务范围有限,所以定时任务的需求也很少,这时定时任务可以直接在单台服务器节点上进行部署,而且基本不需要对这些任务进行控制和管理,任务也能顺利执行[1]。当然,这种方式会导致单点故障的问题,所以企业一般就会采用多台服务器节点进行备份来保证任务的成功执行。而随着企业的发展规模越来越大,业务逻辑愈加复杂,导致定时任务的需求量也在不断攀升。此时单个服务器节点已经无法承载众多定时任务同时执行,需要部署多台服务器节点来执行这些定时任务。而定时任务的调度问题也随之而来,首先是定时任务的路由分配问题,即:应该由哪台服务器执行这个任务。其次是在分布式部署的情况下,定时任务的调度信息,执行状态的监控如何获取。由于同时部署在多台集群机器上,因此到达指定的定时时间时,多台机器上的定时器可能会同时启动,造成重复数据或者程序异常等问题。为了解决上述问题,市面上也诞生出了多种分布式事务解决方案,其中XXL-JOB便是其中之一。
1 分布式定时任务对比
1.1 XXL-JOB简介
XXL-JOB将调度行为抽象形成“调度中心”公共平台,而平台自身并不承担业务逻辑,“调度中心”负责发起调度请求[2]。将任务抽象成分散的Job Handler,交由“执行器”统一管理,“执行器”负责接收调度请求并执行对应的Job Handler中业务逻辑。因此,“调度”和“任务”两部分可以相互解耦,提高系统整体稳定性和扩展性。
1.2 Elastic-JOB简介
Elastic-JOB是面向互联网生态和海量任务的分布式调度解决方案,由两个相互独立的子项目ElasticJob-Lite和ElasticJob-Cloud组成。它通过弹性调度、资源管控,以及作业治理的功能,打造一个适用于互联网场景的分布式调度解决方案,并通过开放的架构设计,提供多元化的作业生态[3]。
1.3 Quartz简介
Quartz是一个功能丰富的开源作业调度库,可以用于创建简单或复杂的调度,以执行数十个、数百个甚至数万个作业;其任务被定义为标准Java组件的作业,可以执行几乎任何可以对其进行编程的操作。Quartz调度器包括许多企业级特性,例如对JTA事务和集群的支持[4]。
上述三种定时任务框架的整体比较如表1所示。
2 XXL-JOB部署方案研究
2.1 部署方案的选择
随着微服务架构逐渐成为主流架构风格。同时,伴随着Docker容器技术的发展,特别是各种Kubernetes系列开源产品的成熟化,使得微服务落地成为现实。工程数据管理平台基于Rancher容器平臺给出了一种部署微服务系统的解决方案,并在石坞实验室项目开发环境实现了微服务的整体部署[5]。
基于Rancher的Docker镜像部署方式由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级,甚至毫秒级的启动时间,大大的节约了开发测试部署的时间。而且Docker对系统资源的利用率较高,无论是应用执行速度,内存损耗或文件存储速度,都要比传统虚拟机技术更高效。因此此次部署也采用基于Rancher的Docker镜像部署方式。
2.2 部署流程
XXL-JOB将调度和任务剥离解耦,分为调度中心和执行器,因此需要部署调度中心和执行器服务。
⑴ 调度中心端部署
将调度中心代码编译后,依据docker-maven-plugin依赖配置,打包成Docker镜像后上传到Harbor镜像中心。在Rancher中新建服务配置该镜像即可启动调度中心,部署成功后访问http://xxxx:8080/xxl-job-admin进入客户端。
⑵ 执行项目端部署
每个任务只需要开发一个方法,并添加@XxlJob注解即可。同调度中心部署一致,将代码编译后打包成Docker镜像,在Rancher中启动之后,通过扫描@XxlJob将任务注入到容器中。
执行器部署成功之后,登录调度中心客户端,选择对应服务的执行器并新建任务,任务的JobHandler名称即为@XxlJob注解中的value所填的名称。配置好之后,即可开始定时任务的使用。
3 XXL-JOB技术组件的应用
3.1 项目描述
工程数据管理平台致力于统一各行业BIM模型标准与工程数据标准,系统地提升多类型、多格式数据管理能力,实现数据多方位管控,改善数据质量,使企业真正获得工程数据管理能力。平台系统提供了一站式数据服务。
⑴ 主数据管理:包括主数据标准管理、主数据管理、主数据校验管理等。为工程项目提供约束定义,记录工程数据的全生命周期。
⑵ 服务管理:对石坞实验室发布的所有工程数据服务进行管理和分发,以服务的形式收集、校验、分发和管理工程数据
⑶ 数据集成:提供快速灵活的数据集成方案,通过批量同步和在线同步两种方式,把不同性质的数据有机地集成到数据管理平台。
⑷ BIM标准:建立各行业BIM标准,提供BIM标准阶段、构件分类、构件属性及属性校验的管理功能,解决BIM模型的属性缺失和错误问题。
⑸ 编码管理:提供基于场景、元码和元码组编码理论的通用编码工具,可创建用于不同编码规则、属性管理及应用的编码功能。
3.2 组件应用
XXL-JOB定时任务在工程数据管理平台应用广泛,为石坞实验室提供了灵活的任务管理方式。依据微服务模块可分为五大类,分别为系统管理模块,云服务模块,数据服务模块,审计服务模块,主数据校验模块。
各模块定时任务功能应用如下。
⑴ 系统管理模块:包括License证书临过期提醒;判断用户密码是否过期,并在过期前发送短信通知,并在密码到期后禁止用户登录;判断用户账号是否到期,并在到期前发送短信通知,并在账户到期后休眠用户;将一年未登录的用户休眠;统计上一天的系统访问量。
⑵ 云服务模块:统计每天的接口调用总数;统计每五分钟的接口调用总数。
⑶ 数据服务模块:执行任务失效已过期的应用;统计每天所有服务的调用总次数;每天统计一次一个服务在所有应用下的访问次数、正确率、平均响应时间;每5分钟统计一次一个服务在所有应用下的累加访问次数、正确率、平均响应时间;每小时统计一次接口并发峰值。
⑷ 审计服务模块:审计日志达到设定预警值通知审计员;审计日志达到设定最高值通知审计员;根据设置备份周期自动备份用户查看日志;根据设置备份周期自动删除日志备份;根据设置周期删除过期日志;审计日志按功能统计每小时折线图数据统计;审计日志按等级统计每小时折线图数据统计;审计日志按类型统计每小时折线图数据统计;删除三种统计图昨天的记录数据。
⑸ 主数据校验模块:主数据校验每天校验次数统计。
4 结束语
本文重点介绍了基于XXL-JOB的分布式定时任务的部署和应用的研究,并概述了在石坞实验室项目上的实践。通过使用了XXL-JOB定时任务,解决了单体定时任务的单点故障等问题,同时保证了系统的高可用性、伸缩性、负载均衡,并提高了容错性。基于以上概述,可以看到XXL-JOB对任务的定时执行的稳定性,执行状态的跟进追踪有很大的提升,在很大程度上减少了开发人员的时间和精力,同时也为项目履约提供了进一步的技术保障。但同时由于所有的定时任务都需要在界面进行维护,对需要动态生成的定时任务则显得无能为力,比如某采集功能,需要根据设定的执行周期动态生成定时任务,这些是接下来要解决的问题。
参考文献(References):
[1] 孙岩.基于分布式架构的高可用定时任务调度系统的设计与实现[D]. 哈尔滨工业大学硕士论文,2018
[2] 分布式任务调度平台XXL-JOB(xuxueli.com)
[3] ElasticJob-Distributed scheduled job solution (apache.org)
[4] http://www.quartz-scheduler.org/documentation/
[5] 蔡永健.基于Rancher的微服务部署[J].计算机时代,2021.6:1-4,8