XXL-JOB分布式任务调度平台
概述
XXL-JOB是一个轻量级分布式任务调度框架,开箱即用。
特性
- 简单:通过Web页面操作简单易用。
- 任务实时监控,可查看任务执行日志。
- 动态:可以动态修改任务状态,暂停或恢复任务,也可以终止进行中的任务。
- 路由策略:第一个,最后一个,轮询,随机,分片广播,故障转移等。
- 邮件报警:任务失败时支持邮件报警,可配置多邮件地址群发报警。
- 运行报表:实时查看任务数量、调度次数、执行器数量。
- ……
后台界面:
任务管理:
新建任务:
根据自己的需求选择路由策略。
查看日志:
架构设计
设计思想:
将调度行为抽象成“调度中心”公共平台,调度中心负责发起调度请求。
将任务抽象成分散的jobHandler,交由执行器管理,执行器接收调度请求,执行对应的业务逻辑。
这样调度和任务解耦,提高系统整体稳定性和扩展性。
系统组成:
调度模块:负责管理调度信息。发调度请求,支持任务新建、更新和删除,支持监控任务调度结果及执行日志。
执行模块:接收调度模块发来的调度请求,执行具体的业务逻辑。开发维护更加简单高效。
架构图:
任务路由策略
FIRST(第一个):固定选择第一个机器;
LAST(最后一个):固定选择最后一个机器;
ROUND(轮询):;
RANDOM(随机):随机选择在线的机器;
CONSISTENT_HASH(一致性HASH):每个任务按照Hash算法固定选择某一台机器,且所有任务均匀散列在不同机器上。
LEAST_FREQUENTLY_USED(最不经常使用):使用频率最低的机器优先被选举;
LEAST_RECENTLY_USED(最近最久未使用):最久为使用的机器优先被选举;
FAILOVER(故障转移):按照顺序依次进行心跳检测,第一个心跳检测成功的机器选定为目标执行器并发起调度;
BUSYOVER(忙碌转移):按照顺序依次进行空闲检测,第一个空闲检测成功的机器选定为目标执行器并发起调度;
SHARDING_BROADCAST(分片广播):广播触发对应集群中所有机器执行一次任务,同时传递分片参数;可根据分片参数开发分片任务;
XXL-JOB、Quartz比较
XXL-JOB
比Quartz好,弥补了Quartz的不足:后台界面化,操作性强,有几种路由策略,可分片广播,可以实时监控日志。
Quartz
- 没有可视化界面
- 调用API的方式操作任务,不人性化
- 需要持久化数据到底层数据库,系统侵入性严重
- 调度逻辑与任务逻辑耦合在一起,如果任务数量较多时,同时调度任务逻辑较重时,调度系统的性能会大大受限于业务
- quartz底层以“抢占式”获取DB锁并由抢占成功节点负责运行任务,会导致节点负载悬殊非常大;而XXL-JOB通过执行器实现“协同分配式”运行任务,充分发挥集群优势,负载各节点均衡。
还有一种做定时任务的Elastic-JOB,它是一种基于Zookeeper、Quartz开发并开源的Java分布式定时任务,解决了Quartz不支持分布式的弊端,支持弹性扩容,通过zookeeper集中管理和监控Job,支持失效转移等,这是Quartz等其他定时任务无法比拟的。
参考链接:
http://www.xuxueli.com/xxl-job/#/?id=%e4%b8%80%e3%80%81%e7%ae%80%e4%bb%8b