推荐一个分布式任务调度平台–xxl-job
文章目录
一、背景
近期项目需要改革,找出之前项目的痛点,然后对症下药。其中就包括定时任务的管理,项目中定时任务众多,不方便管理,不支持分布式调度,此时发现了一个很好用的开源项目【分布式任务调度平台 XXL-JOB】。目前已经集成项目中并平稳运行一段时间了,因此推荐给大家。它是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
二、和Quartz的对比
Quartz的不足
- 问题一:调用API的的方式操作任务,不人性化;
- 问题二:需要持久化业务QuartzJobBean到底层数据表中,系统侵入性相当严重。
- 问题三:调度逻辑和QuartzJobBean耦合在同一个项目中,这将导致一个问题,在调度任务数量逐渐增多,同时调度任务逻辑逐渐加重的情况加,此时调度系统的性能将大大受限于业务;
- 问题四:quartz底层以“抢占式”获取DB锁并由抢占成功节点负责运行任务,会导致节点负载悬殊非常大;而XXL-JOB通过执行器实现“协同分配式”运行任务,充分发挥集群优势,负载各节点均衡。
XXL-JOB的特性
-
简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手
-
动态:支持动态修改任务状态、启动/停止任务,以及终止运行中任务,即时生效
-
调度中心HA(中心式):调度采用中心式设计,“调度中心”基于集群Quartz实现并支持集群部署,可保证调度中心HA
执行器HA(分布式):任务分布式执行,任务"执行器"支持集群部署,可保证任务执行HA -
注册中心: 执行器会周期性自动注册任务, 调度中心将会自动发现注册的任务并触发执行。同时,也支持手动录入执行器地址
-
弹性扩容缩容:一旦有新执行器机器上线或者下线,下次调度时将会重新分配任务
-
路由策略:执行器集群部署时提供丰富的路由策略,包括:第一个、最后一个、轮询、随机、一致性HASH、最不经常使用、最近最久未使用、故障转移、忙碌转移等
-
故障转移:任务路由策略选择"故障转移"情况下,如果执行器集群中某一台机器故障,将会自动Failover切换到一台正常的执行器发送调度请求。
-
阻塞处理策略:调度过于密集执行器来不及处理时的处理策略,策略包括:单机串行(默认)、丢弃后续调度、覆盖之前调度
-
任务超时控制:支持自定义任务超时时间,任务运行超时将会主动中断任务
-
任务失败重试:支持自定义任务失败重试次数,当任务失败时将会按照预设的失败重试次数主动进行重试;其中分片任务支持分片粒度的失败重试
-
任务失败告警;默认提供邮件方式失败告警,同时预留扩展接口,可方便的扩展短信、钉钉等告警方式
-
分片广播任务:执行器集群部署时,任务路由策略选择"分片广播"情况下,一次任务调度将会广播触发集群中所有执行器执行一次任务,可根据分片参数开发分片任务
…
三、快速入门
-
下载项目,源代码地址为:https://github.com/xuxueli/xxl-job.git,下载完成之后直接使用maven进行编译即可;
-
源代码结构如下:
-
初始化数据库,直接执行自带的数据库脚本即可
-
部署任务调度中心项目xxl-job-admin
该项目的作用是:统一管理任务调度平台上调度任务,负责触发调度执行,并且提供任务管理平台。
**修改配置文件:**xxl-job-admin/src/main/resources/application.properties,一般修改下数据库连接地址即可
部署启动项目:以上配置正确,直接编译启动项目即可
项目访问地址为:http://localhost:9080/xxl-job-admin (由于我这里8080端口被占用了,因此我换成了8090端口)
**登录系统:**用户名密码为:admin/123456
首页图如下:
至此,“任务调度中心管理系统”已部署成功
-
部署执行器项目
可以使用作者提供的实例项目:
也可以集成到现有的项目中。这里我要集成到自己已有的服务中。
步骤一:引入依赖
<dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-job-core</artifactId> <version>2.3.0</version> </dependency>
步骤二:添加执行器的配置信息
可以copy【xxl-job-executor-sample-springboot】项目中的配置文件,放到自己项目下,做一些相应的修改
步骤三:执行器组件配置
可以copy示例代码中的配置文件到自己项目中,配置位置为:
步骤四:执行执行器项目
上述配置完成之后,可以直接执行项目的主启动类,以启动执行器。
-
开发定时任务
步骤一:代码的编写
步骤二:在任务调度中心添加任务
保存后效果如下:
-
启动“调度中心”和“定时器”执行任务
至此,XXL-JOB的快速入门已经完成。
四、效果图展示
1.运行报表(首页)
在首页可以查看任务的总体情况,包括任务个数,总调度次数等等。
2.任务管理
对所有定时任务进行一个统一管理,定时任务是依赖于执行器的,一个执行器包含多个定时任务
3.调度日志
查看定时任务的执行情况,包含成功失败等情况,失败的可以查看失败原因
4.执行器管理
管理执行器,可以类比微服务中,服务注册中心对于注册到该中心的微服务的管理
5.用户管理
五、系统架构
- 该系统主要分为调度中心和执行器两部分,主要采用了微服务中的服务注册管理的思想
- 执行器包含了任务线程,任务信息等
- 调度中心则主要是对所有任务的统一调度管理,类似服务注册中心对于微服务的管理
该系统和微服务中的服务注册中心的思想非常类似,几个关键组件的关系如下图所示:
六、总结
目前已有多家公司接入xxl-job,包括比较知名的大众点评,京东,优信二手车,北京尚德,360金融 (360),联想集团 (联想),易信 (网易)等等…
而我们公司在最近也接入了该项目,确实解决了之前定时任务使用的一些痛点,而且效果也很乐观,所以如果你也在寻找分布式任务调度系统的话,这个框架可以是一个不错的选择,官网地址为:https://www.oschina.net/p/xxl-job,感兴趣的同学可以去了解下。
德,360金融 (360),联想集团 (联想),易信 (网易)等等…
而我们公司在最近也接入了该项目,确实解决了之前定时任务使用的一些痛点,而且效果也很乐观,所以如果你也在寻找分布式任务调度系统的话,这个框架可以是一个不错的选择,官网地址为:https://www.oschina.net/p/xxl-job,感兴趣的同学可以去了解下。