XXL-JOB(分布式任务调度平台)

文章详细介绍了XXL-JOB,一个分布式任务调度平台,强调其轻量级、易扩展和可视化管理的特点。对比了XXL-JOB与quartz和elastic-job的优缺点。
摘要由CSDN通过智能技术生成

目录

1.什么是XXL-JOB?

2.总结

XXL-JOB的原理

类似于xxl-job的有哪些框架?xxl-job有哪些优势?


1.什么是XXL-JOB?

 xxl-job是一个分布式的任务调度平台,其核心设计目标是:学习简单、开发迅速、轻量级、易扩展,现在已经开放源代码并接入多家公司的线上产品线,开箱即用。xxl是xxl-job的开发者大众点评的许雪里名称的拼音开头。

xxl-job框架主要用于处理分布式的定时任务,其主要由调度中心和执行器组成。

  1. 调度模块(调度中心):

    负责管理调度信息,按照调度配置发出调度请求,自身不承担业务代码。调度系统与任务解耦,提高了系统可用性和稳定性,同时调度系统性能不再受限于任务模块;

    支持可视化、简单且动态的管理调度信息,包括任务新建,更新,删除,GLUE开发和任务报警等,所有上述操作都会实时生效,同时支持监控调度结果以及执行日志,支持执行器Failover。

  2. 执行模块(执行器):

    负责接收调度请求并执行任务逻辑。任务模块专注于任务的执行等操作,开发和维护更加简单和高效;

    接收“调度中心”的执行请求、终止请求和日志请求等。

2.总结

  1. 调度中心:统一管理任务调度平台上的调度任务,负责触发调度执行,并且提供任务管理平台。

  2. 执行器:接收调度中心的调度并且执行,可以直接执行也可以集成到项目中。

  3. 调度中心和执行器两个模块分开部署,相互分离,两者之间通过RPC进行通信,其中调度中心主要是提供一个平台,管理调度信息,发送调度请求,自己不承担业务代码,而执行器接受调度中心的调度执行业务逻辑。

XXL-JOB的原理

1.执行器的注册和发现

执行器的注册和发现主要是关系两张表:

xxl_job_registry:执行器的实例表,保存实例信息和心跳信息,xxl_job_group:每个服务注册的实例列表。

执行器启动线程每隔30秒向注册表xxl_job_registry请求一次,更新执行器的心跳信息,调度中心启动线程每隔30秒检测一次xxl_job_registry,将超过90秒还没有收到心跳的实例信息从xxl_job_registry删除,并更新xxl_job_group服务的实例列表信息。

2.调度中心调用执行器

调度中心的操作:

调度中心通过循环不停的:

1.关闭自动提交事务

2.利用mysql的悲观锁,其他事务无法进入

      select * from xxl_job_lock where lock_name = 'schedule_lock' for update

3.读取数据库中的xxl_job_info:记录定时任务的相关信息,该表中有trigger_next_time字段表示下一次任务的触发时间。拿到距离当前时间5s内的任务列表,分为三种情况处理:

  1. 对于当前时间-任务的下一次触发时间>5,直接调过不执行,重置trigger_next_time的时间。(超过5s)

  2. 对于任务的下一次触发时间<当前时间<任务的下一次触发时间+5的任务(不超过5s的):

    1.开线程处理执行触发逻辑,根据当前时间更新下一次任务触发时间

    2.如果新的任务下一次触发时间-当前时间<5,放到时间轮中,时间轮是一个map:

private volatile static Map<Integer, List<Integer>> ringData = new ConcurrentHashMap<>();
  1. 3.根据新的任务下一次触发时间更新下下一次任务触发时间

  2. 对于任务的下一次触发时间>当前时间,将其放入时间轮中,根据任务下一次触发时间更新下下一次任务触发时间

4.commit提交事务,同时释放排他锁

执行器的操作:

  1. 执行器接收到调度中心的调度信息,将调度信息放到对应的任务的等待队列中

  2. 执行器的任务处理线程从任务队列中取出调度信息,执行业务逻辑,将结果放入一个公共的等待队列中(每个任务都有一个单独的处理线程和等待队列,任务信息放入该队列中)

  3. 执行器有一个专门的回调线程定时批量从结果队列中取出任务结果,并且回调告知调度中心

类似于xxl-job的有哪些框架?xxl-job有哪些优势?

分布式定时任务指的是运行在分布式集群环境下的调度任务,同一份定时任务部署多份,则同一时刻应当只允许一个定时任务执行。

分布式定时任务调度的框架:quartz、elastic-job、xxl-job

  • quartz和xxl-job对比:

    1. quartz采用api的方式调用任务,不方便,但是xxl-job使用的是管理界面。

    2. quartz比xxl-job代码侵入更强

    3. quartz调度逻辑和QuartzJobBean耦合在一个项目中,当任务增多,逻辑复杂的时候,性能会受到影响

    4. quartz底层以抢占式获取db锁并且由抢占成功的节点运行,导致节点负载悬殊非常大;xxl-job通过执行器实现协同分配式运行任务,各个节点比较均衡。

  • elastic-job和xxl-job对比:

    1. elastic-job是无中心化的,通过zookeeper的选举机制选出主服务器,如果主服务器挂了,重新选举出主服务器,因此elastic-job的扩展性和可用性较好,但是使用有一定的复杂度。使用于业务复杂,业务量大,服务器多。

    2. xxl-job是中心式的调度平台调度执行器执行任务,使用的是DB锁来保证集群分布式调用的一致性,学习简单,操作容易,成本不高。

  • 23
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值