Elastic-Job 和 XXL-Job是目前国内应用最为广泛的任务调度解决方案,前文《云原生:微服务架构的任务调度解决方案elastic-job》介绍了前者,本文讲重点介绍后者。相比之下,XXL-Job的使用厂商要比Elastic-Job更多。
XXL-JOBXXL-Job是大众点评员工徐雪里于2015年发布的分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
XXL-Job架构
XXL-Job将调度行为抽象为调度中心这个公共平台,平台自身不承担业务逻辑,调度中心负责发起调度请求。任务被抽象成分散的 JobHandler,交由执行器管理,执行器负责接收调度请求并执行对应的 JobHandler 中的业务逻辑。“调度”和“任务”两部分相互解耦,提高系统整体稳定性和扩展性。
部署和安装(1)下载源码
XXL-Job的代码在Github和Gitee上均有开源。
git clone https://github.com/xuxueli/xxl-job.git
(2)IDEA以Maven项目导入代码
目录结构
- /doc 文档资料 包括"调度数据库" 建表脚本
- /xxl-job-core 公共jar依赖
- /xxl-job-admin 调度中心的源代码 是SpringBoot项目 可以直接启动
- /xxl-job-executor-samples 执行器示例代码 包含了基于spring、springboot、jfinal等环境的示例代码。可以直接基于示例代码开发
(3)初始化数据库
数据库脚本在doc/db目录下。执行以上脚本即可在本地环境创建一个基于xxl-job数据库。
- xxl_job_info 调度扩展信息表,用于保存xxl-job调度任务的扩展信息,如任务分组、任务名、机器地址、执行器、执行入参和报警邮件等
- xxl_job_log 调度日志表:用于保存xxl-job任务调度的历史信息,如调度结果、执行结果、调度入参、执行器等
- xxl_job_log_report 调度日志报表,用户存储xxl-job任务调度日志的报表,调度中心报表功能页面会用到
- xxl_job_logglue 任务GLUE日志,用于保存GLUE更新历史,用于支持GLUE的版本回溯功能
- xxl_job_registry 执行器注册表,维护在线的执行器和调度中心机器地址信息
- xxl_job_group 执行器信息表,维护任务执行器信息
- xxl_job_user 系统用户表
- xxl_job_lock 任务调度锁表
(4)调度器项目xxl-job-admin配置
修改数据源配置文件、将xxl-job默认用户名、密码添加上。
### web
server.port=28080
server.servlet.context-path=/xxl-job-admin
### xxl-job, datasource
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
xxl.job.login.username=admin
xxl.job.login.password=123456
(5)Maven构建启动
启动工程 ,在浏览器上输入http://localhost:28080/xxl-job-admin
XXL-Job登录首页
特色功能XXL-JOB 的功能丰富,可运维能力比较强,不但支持控制台动态创建任务,还有调度日志、运行报表等功能。
运行报表
调度日志
XXL-Job 的历史记录、运行报表和调度日志,都是基于数据库实现的。
XXL-JOB数据库
由此可以看出,XXL-JOB 所有功能都依赖数据库,且调度中心不支持分布式架构,在任务量和调度量比较大的情况下,会有性能瓶颈。不过如果对任务量级、高可用、监控报警、可视化等没有过高要求的话,XXL-JOB 基本可以满足定时任务的需求。
总结最后我们总结一下XXL-Job的优点,尤其是与Elastic-Job的对比。
- 轻量级,支持通过Web页面对任务进行动态CRUD操作,操作简单;
- 只依赖数据库作为集群注册中心,接入开发简单,不需要ZooKeeper;
- 高可用、解耦、高性能、监控报警、分片、重试、故障转移;
- 团队持续开发,社区活跃;
- 支持后台直接查看每个任务执行实时日志。