XXL-JOB#【轻量级分布式任务调度平台】

(1) 基本介绍#

XXL-JOB是一个轻量级分布式任务调度平台,主打特点是平台化,易部署,开发迅速、学习简单、轻量级、易扩展,代码仍在持续更新中。

  • 调度中心任务调度控制台,平台自身并不承担业务逻辑,只是负责任务的统一管理和调度执行,并且提供任务管理平台
  • 执行器负责接收“调度中心”的调度并执行,可直接部署执行器,也可以将执行器集成到现有业务项目中。 通过将任务的调度控制和任务的执行解耦,业务使用只需要关注业务逻辑的开发。
  • XXL-JOB主要提供了任务的动态配置管理、任务监控和统计报表以及调度日志几大功能模块,支持多种运行模式和路由策略,可基于对应执行器机器集群数量进行简单分片数据处理

(3)XXL-JOB的特性#

  • 1、简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手;
  • 2、动态:支持_动态修改任务状态、启动/停止任务,以及终止运行中任务,即时生效_;
  • 3、调度中心HA(中心式):调度采用中心式设计,调度中心自研调度组件并支持集群部署,可保证调度中心HA;
  • 4、执行器HA(分布式):任务分布式执行,任务"执行器"支持集群部署,可保证任务执行HA;
  • 5、注册中心: 执行器会周期性自动注册任务, 调度中心将会自动发现注册的任务并触发执行。也支持手动录入执行器地址;
  • 6、弹性扩容缩容:一旦有新执行器机器上线或者下线,下次调度时将会重新分配任务;
  • 7、路由策略:执行器集群部署时提供丰富的路由策略,包括:_第一个、最后一个、轮询、随机、一致性HASH、最不经常使用、最近最久未使用、故障转移、忙碌转移_等;
  • 8、故障转移:任务路由策略选择_故障转移_情况下,如果执行器集群中某一台机器故障,将会自动Failover切换到一台正常的执行器发送调度请求。
  • 9、阻塞处理策略:调度过于密集执行器来不及处理时的处理策略,策略包括:单机串行(默认)、丢弃后续调度、覆盖之前调度
  • 10、任务超时控制:支持_自定义任务超时时间_,任务运行超时将会主动中断任务;
  • 11、任务失败重试:支持_自定义任务失败重试次数_,当任务失败时将会按照预设的失败重试次数主动进行重试;其中分片任务支持分片粒度的失败重试;
  • 12、任务失败警告:默认提供邮件方式失败告警,同时预留扩展接口,可方便的扩展短信、钉钉等告警方式;
  • 13、分片广播任务:执行器集群部署时,任务路由策略选择分片广播情况下,一次任务调度将会广播触发集群中所有执行器执行一次任务,可根据分片参数开发分片任务;
  • 14、动态分片:分片广播任务以执行器为维度进行分片,支持动态扩容执行器集群从而动态增加分片数量,协同进行业务处理;在进行大数据量业务操作时可显著提升任务处理能力和速度。

XXL-J

OB架构图

管理后台页面:
 

如何避免集群中的多个服务器同时调度任务?#

当xxl-job应用本身集群部署(实现高可用HA)时,如何避免集群中的多个服务器同时调度任务?
通过mysql悲观锁实现分布式锁(for update语句)

 任务执行器注册中心是如何实现的?#

使用db表xxl_job_group记录下执行器的信息:

执行器AppName、执行器名称title、执行器地址列表address_list(多地址逗号分隔)

 如何实现任务执行器的路由?#

第一个、最后一个、轮询、随机、一致性HASH、最不经常使用、最近最久未使用、故障转移、忙碌转移等;

 如何实现任务分片、并行执行?#

  • XXL-JOB原理解析#

    2.1.0版本前核心调度模块都是基于quartz框架,2.1.0版本开始自研调度组件,移除quartz依赖 ,使用时间轮调度。
    (RPC的底层变化, 2.0.1 使用的是Jetty服务的RPC, 2.0.2 使用的Nettty服务的RPC)

     定时触发任务是如何实现的?:使用时间轮实现#

  • xxl_job_info表是记录定时任务的db表,里面有个trigger_next_time(Long)字段,表示下一次触发的时间点任务时间被修改 / 每一次任务触发后,可以根据cronb表达式计算下一次触发时间戳:
    Date nextValidTime = new CronExpression(jobInfo.getJobCron()).getNextValidTimeAfter(new Date()))
    更新trigger_next_time字段
  • 定时执行任务逻辑:
    1. 定时任务scheduleThread:不断从db5秒内要执行的任务读出,立即触发 / 放到时间轮等待触发,并更新trigger_next_time
    2. 获取当前时间now
    3. 轮询db,找出trigger_next_time在距now 5秒内的任务
      3.1 对到达now时间后的任务(超出now 5秒外)
      ​ (1) 直接跳过不执行;
      ​ (2) 重置trigger_next_time
      3.2 对到达now时间后的任务(超出now 5秒内)
      ​ (1) 开线程执行触发逻辑;
      ​ (2) 若任务下一次触发时间是在5秒内,则放到时间轮内(Map<Integer, List>秒数(1-60) => 任务id列表);
      ​ (3) 重置trigger_next_time
      3.3 对未到达now时间的任务
      ​ (1)直接放到时间轮内;
      ​ (2)重置trigger_next_time
    4. 定时任务ringThread:时间轮实现到点触发任务
      4.1 时间轮数据结构:Map<Integer, List<Integer>> key是秒数(1-60) ,value是任务id列表

    5. 获取当前时间秒数
    6. 从时间轮内移出当前秒数前2个秒数(避免处理耗时太长,跨过刻度,向前校验一个刻度)的任务列表id,一一触发任务;
  • setAutoCommit(false)关闭隐式自动提交事务,启动事务
  • select lock for update(显式排他锁,其他事务无法进入&无法实现for update
  • db任务信息 -> 拉任务到内存时间轮 -> 更新db任务信息
  • commit提交事务,同时会释放for update的排他锁(悲观锁)
  • 执行器集群部署时提供丰富的路由策略,包括:
  • 第一个、最后一个、轮询、随机:都是简单读address_list即可
  • 一致性HASHTreeSet实现一致性hash算法
  • 最不经常使用、最近最久未使用HashMap、LinkedHashMap
  • 故障转移:遍历address_list获取address时,逐个检查该address的心跳(请求返回状态);只有心跳正常的address才返回使用
  • 忙碌转移:遍历address_list获取address时,逐个检查该address是否忙碌(请求返回状态);只有状态为idleaddress才返回使用
  • 拉出任务的执行机器列表,逐个设置index / total,把index / total分发到任务执行器
  • 任务执行器可根据index / total参数开发分片任务
  • 15、事件触发:除了Cron方式任务依赖方式触发任务执行之外,支持基于事件的触发任务方式。调度中心提供触发任务单次执行的API服务,可根据业务事件灵活触发
  • * **高性能**任务调度流程全异步化设计实现,如异步调度、异步运行、异步回调等,有效对密集调度进行流量削峰;
  • * **高可用**任务调度中心、任务执行节点均 集群部署,支持动态扩展、故障转移支持任务配置路由故障转移策略,执行器节点不可用是自动转移到其他节点执行支持任务超时控制、失败重试配置支持任务处理阻塞策略:调度当任务执行节点忙碌时来不及执行任务的处理策略,包括:串行、抛弃、覆盖策略
  • * **易于监控运维**支持设置任务失败邮件告警,预留接口支持短信、钉钉告警;支持实时查看任务执行运行数据统计图表、任务进度监控数据、任务完整执行日志;
  • 其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
  • 工作流程概述
  • Xxl-job是一个轻量级的分布式任务调度平台,它主要由两部分组成:调度中心和执行器。调度中心负责对任务进行统一管理和调度,而执行器则负责接收调度中心的指令并执行任务。
  • 调度中心的工作流程
  • 1. **任务注册**:首先,你需要在调度中心注册你的任务。这通常是通过Web页面完成的,你可以在这里输入任务的名称、时间表等信息。
  • 2. **任务调度**:调度中心根据你设定的时间表和条件,决定何时何地触发哪个任务。
  • 3. **任务下发**:调度中心会将需要执行的命令发送到相应的执行器。
  • 执行器的工作流程
  • 1. **任务接收**:执行器接收到调度中心下发的任务后,会开始准备执行任务。
  • 2. **任务执行**:执行器按照任务的要求执行任务,这可能包括读取数据、处理数据等步骤。
  • 3. **任务返回结果**:执行器完成任务后,会将结果返回给调度中心,以便于后续的处理和监控。
  • 总结
  • 总的来说,Xxl-job的工作流程主要包括任务的注册、调度和执行三个步骤。在这个过程中,调度中心和执行器协同工作,共同完成任务的调度和执行。
  • XXL-JOB任务调度流程

  • 28
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值