XXL-Job #
官网地址: http://www.xuxueli.com/xxl-job/
基本概念 #
2.1.0版本前核心调度模块都是基于quartz框架,2.1.0版本开始自研调度组件,移除quartz依赖 ,使用时间轮调度。
- 调度中心:
- 管理各配置信息,使用线程池发起调度。
- 不同任务并行调度,同一任务不同执行器可并行执行,同一执行器串行执行。
- 集群配置:
- 使用Nginx做负载均衡,分配域名;访问调度中心Portal、执行器回调等都通过域名实现。
- 调度中心会自动进行任务平均分配,不会所有任务都集中在一个调度中心上。
- 通过数据库锁保证单个任务的单次触发。
- 执行器:
- 以AppName作为唯一标示,接收调度中心的调度,执行任务,执行后将结果告知调度中心;
- 实质是个内嵌的Server,默认端口为9999。
- 集群部署时可通过分片广播提高并行度。
- 任务:即JobHandler,包含实际需执行的业务逻辑。。
- 注册中心: 基于DB实现,默认心跳周期为30s,执行器会周期性自动注册任务, 同时也支持手动录入执行器地址。
主要功能 #
- 任务依赖:基于任务ID,每个任务执行成功后,如果存在子任务,则会继续执行子任务。
- 任务HA:执行器集群部署时,当执行器调用失败或任务失败次数超过阀值,调度中心可以自动切换到下一台正常的执行器重新执行。
- 任务阻塞:耗时任务可能第一次还没执行完,第二次任务又来了。此时需配置阻塞策略:
- 单机串行(默认):同一任务进行排队;
- 丢弃后续调度:已有任务正在执行时,丢弃新任务并标记为失败;
- 覆盖之前调度:已有任务正在执行时,终止该任务并清空队列,然后运行新任务;
- 重复执行:调度中心集群部署时密集调度或耗时任务可能导致任务重复触发。需通过“单机路由策略(如:第一台、一致性哈希)” + “阻塞策略(如:单机串行、丢弃后续调度)” 来规避,最终避免任务重复执行。
- 分片广播任务:执行器集群部署,任务路由策略选择"分片广播"情况下,一次任务调度会调用所有执行器,并传入分片参数(总分片数+当前序号),可以通过执行器扩容实现横向扩展。