XXL-Job

XXL-Job #

官网地址: http://www.xuxueli.com/xxl-job/

基本概念 #

2.1.0版本前核心调度模块都是基于quartz框架,2.1.0版本开始自研调度组件,移除quartz依赖 ,使用时间轮调度。

  • 调度中心:
    • 管理各配置信息,使用线程池发起调度。
    • 不同任务并行调度,同一任务不同执行器可并行执行,同一执行器串行执行。
    • 集群配置:
      • 使用Nginx做负载均衡,分配域名;访问调度中心Portal、执行器回调等都通过域名实现。
      • 调度中心会自动进行任务平均分配,不会所有任务都集中在一个调度中心上。
      • 通过数据库锁保证单个任务的单次触发。
  • 执行器:
    • 以AppName作为唯一标示,接收调度中心的调度,执行任务,执行后将结果告知调度中心;
    • 实质是个内嵌的Server,默认端口为9999。
    • 集群部署时可通过分片广播提高并行度。
  • 任务:即JobHandler,包含实际需执行的业务逻辑。。
  • 注册中心: 基于DB实现,默认心跳周期为30s,执行器会周期性自动注册任务, 同时也支持手动录入执行器地址。

arch

主要功能 #

  • 任务依赖:基于任务ID,每个任务执行成功后,如果存在子任务,则会继续执行子任务。
  • 任务HA:执行器集群部署时,当执行器调用失败或任务失败次数超过阀值,调度中心可以自动切换到下一台正常的执行器重新执行。
  • 任务阻塞:耗时任务可能第一次还没执行完,第二次任务又来了。此时需配置阻塞策略:
    • 单机串行(默认):同一任务进行排队;
    • 丢弃后续调度:已有任务正在执行时,丢弃新任务并标记为失败;
    • 覆盖之前调度:已有任务正在执行时,终止该任务并清空队列,然后运行新任务;
  • 重复执行:调度中心集群部署时密集调度或耗时任务可能导致任务重复触发。需通过“单机路由策略(如:第一台、一致性哈希)” + “阻塞策略(如:单机串行、丢弃后续调度)” 来规避,最终避免任务重复执行。
  • 分片广播任务:执行器集群部署,任务路由策略选择"分片广播"情况下,一次任务调度会调用所有执行器,并传入分片参数(总分片数+当前序号),可以通过执行器扩容实现横向扩展。
沪ICP备17055033号-2