一、概述

XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。xxl三个字母是其开发者许雪里名字的缩写。

几个特性:

1、简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手;
2、动态:支持动态修改任务状态、启动/停止任务,以及终止运行中任务,即时生效
3、注册中心: 执行器会周期性自动注册任务, 调度中心将会自动发现注册的任务并触发执行,每30秒清理一次注册表中的无效机器。同时,也支持手动录入执行器地址;
4 、失败处理策略:每10秒检测失败任务,报警和重试;
5、一致性:“调度中心”通过DB锁保证集群分布式调度的一致性, 一次任务调度只会触发一次执行

二、架构

一次完整的执行流程

1、“调度中心”向“执行器”发送http调度请求: “执行器”中接收请求的服务,实际上是一台内嵌jetty服务器,默认端口9999;
2、“执行器”执行任务逻辑;
3、“执行器”http回调“调度中心”调度结果: “调度中心”中接收回调的服务,是针对执行器开放一套API服务;
1、调度中心:负责管理调度信息,按照调度配置发出调度请求,自身不承担业务代码。调度系统与任务解耦,提高了系统可用性和稳定性,同时调度系统性能不再受限于任务模块;
支持可视化、简单且动态的管理调度信息,包括任务新建,更新,删除,GLUE开发和任务报警等,所有上述操作都会实时生效,同时支持监控调度结果以及执行日志,支持执行器Failover。
调度模块早期依赖于quartz,为了精简系统降低冗余依赖,和提供系统的可控度与稳定性;现在使用选择自研调度组件,类似于一个时间轮。
XXL-JOB中“调度模块”和“任务模块”完全解耦,调度模块进行任务调度时,将会解析不同的任务参数发起远程调用,调用各自的远程执行器服务。这种调用模型类似RPC调用,调度中心提供调用代理的功能,而执行器提供远程服务的功能。
2、执行模块:负责接收调度请求并执行任务逻辑。任务模块专注于任务的执行等操作,开发和维护更加简单和高效;接收“调度中心”的执行请求、终止请求和日志请求等;
执行器实际上是一个内嵌的Server,默认端口9999(配置项:xxl.job.executor.port)。
在项目启动时,执行器会通过“@XxlJob”识别Spring容器中“Bean模式任务”,以注解的value属性为key管理起来。
“执行器”接收到“调度中心”的调度请求时,如果任务类型为“Bean模式”,将会匹配Spring容器中的“Bean模式任务”,然后调用其execute方法,执行任务逻辑
3、"bean"模式原理:每个Bean模式任务都是一个Spring的Bean类实例,它被维护在“执行器”项目的Spring容器中。任务方法需要加“@XxlJob(value=”名称”)”注解,因为“执行器”会根据该注解识别Spring容器中的任务。

三、如何触发

1.早期:基于quartz.现在:timewheel时间轮,这个时间轮本质就是一个Map<Integer, List>


2.触发算法:
拿到了距now 5秒内的任务列表数据:scheduleList,分三种情况处理:for循环遍历scheduleList集合

(1)对到达now时间后的任务:(任务下一次触发时间+5s<now):直接跳过不执行; 重置trigger_next_time;

(2)对到达now时间后的任务:(任务下一次触发时间<now<任务下一次触发时间+5s):线程执行触发逻辑; 若任务下一次触发时间是在5秒内, 则放到时间轮内(Map<Integer, List> 秒数(1-60) => 任务id列表);再 重置trigger_next_time

(3)对未到达now时间的任务(任务下一次触发时间>now):直接放到时间轮内;重置trigger_next_time 。

3.接下来讲时间轮,时间轮数据结构: Map<Integer, List> key是秒数(1-60) value是任务id列表,具体结构如下图 :

四、一致性保证

为了避免多个服务器同时调度任务, 通过mysql悲观锁实现分布式锁(for update语句)
看一下代码

1 setAutoCommit(false)关闭隐式自动提交事务,

2 启动事务select lock for update(排他锁)

3 读db任务信息 -> 拉任务到内存时间轮 -> 更新db任务信息

4 commit提交事务,同时会释放for update的排他锁(悲观锁)

任务处理完毕后,释放悲观锁,准备等待下一次循环。

XxlJob使用总结相关推荐

  1. xxl-job Vs ElasticJob,谁牛?

    欢迎关注方志朋的博客,回复"666"获面试宝典 1. xxl-job 2. 运行 xxl-job 3. 开发定时任务 3.1 项目创建及配置 3.2 定时任务开发方式 4. 小结 ...

  2. 分布式定时任务xxl-job的常用姿势都集齐了,So Easy!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 # 前言 任务调度是java项目中常用的一种组件,可以指定任务在何 ...

  3. 五分钟体验分布式调度框架xxl-job

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速. ...

  4. XXL-JOB v2.0.2,分布式任务调度平台

    v2.0.2 Release Notes 1.底层通讯方案优化:升级较新版本xxl-rpc,由"JETTY"方案调整为"NETTY_HTTP"方案,执行器内嵌n ...

  5. 对xxl-job进行simpleTrigger并动态创建任务扩展

    2019独角兽企业重金招聘Python工程师标准>>> 博文原址:对xxl-job进行simpleTrigger并动态创建任务扩展 业务场景 需求上要求能实现quartz的simpl ...

  6. 分布式任务调度平台 XXL-JOB

    https://opentalk.upyun.com/303.html 2017 年 10 月 22 日,又拍云 Open Talk 联合 Spring Cloud 中国社区成功举办了"进击 ...

  7. XXL-JOB v2.0.1 发布,分布式任务调度平台

    XXL-JOB 正在角逐 " 2018 开源中国软件",期待您宝贵的一票! 投票链接: https://www.oschina.net/proje... v2.0.1 Releas ...

  8. 分布式任务调度平台XXL-JOB本地配置可能遇到的问题和解决方案

    分布式任务调度平台XXL-JOB本地配置可能遇到的问题和解决方案 参考文章: (1)分布式任务调度平台XXL-JOB本地配置可能遇到的问题和解决方案 (2)https://www.cnblogs.co ...

  9. XXL-JOB v2.0.2,分布式任务调度平台 | 多项特性优化更新

    开发四年只会写业务代码,分布式高并发都不会还做程序员?   v2.0.2 Release Notes 1.底层通讯方案优化:升级较新版本xxl-rpc,由"JETTY"方案调整为& ...

  10. XXL-Job分布式任务调度

    分布式情况下定时任务会出现哪些问题? 分布式集群的情况下,怎么保证定时任务不被重复执行 分布式定时任务解决方案 ①使用zookeeper实现分布式锁 缺点(需要创建临时节点.和事件通知不易于扩展) ② ...

最新文章

  1. Ubuntu 16.04 安装 CUDA、CUDNN 和 GPU 版本的 TensorFlow 一般步骤总结
  2. 史上最全的正则表达式
  3. Java中实现DES加解密的一个类
  4. ajax 请求超过了5s 还没有返回 的话 就自动取消
  5. PlugX变体已经悄悄更改源代码且正式更名为THOR
  6. WSAStartup()函数以及DLL的加载
  7. 抢人饭碗了!推荐一款全自动的机器学习建模神器PyCaret
  8. 「经营分析报告」怎么做?这套模板让领导一看就懂
  9. 最便宜的鸿蒙手机,今年不再推出鸿蒙手机,却让老旗舰占据优势,降价后变真香...
  10. 通过 Python 装饰器实现DRY(不重复代码)原则
  11. 三种Windows版本下教你如何卸载Oracle
  12. C/C++ 图像二进制存储与读取
  13. C++ 类图 Astah画类图
  14. linux文件复制和移动
  15. oracle找出两张表中不同的数据
  16. Python网页编程(CGI)
  17. android 将app添加进入文件的打开方式
  18. html语言期末考试,HTML期末考试复习题及参考答案
  19. Java中DecimalFormat的用法!
  20. 树莓派usb摄像头网络监控(定时拍照+网络存储)

热门文章

  1. 【node进阶】深入浅出---MVC设计模式RESTful风格
  2. 发布我在esnips上传的东东
  3. 魅族mx6详细打开usb调试模式的流程
  4. android 微信评论功能,安卓微信7.0.10正式版发布:没有朋友圈评论功能
  5. ubuntu绝对路径和相对路径自动补全
  6. springboot使用jedis
  7. 百度在线语音识别接入经验
  8. DDL语句,DML语句介绍
  9. IT常用单词-2016.8.22
  10. 视频融合云服务EasyCVR平台如何通过华为SDK接入实现云台控制?