浅析xxl-job

简介: 作为一个优秀的调度框架,今天整理一波xxl-job的复习资料


整体架构

  1. 整体架构分为调度器、执行器两个模块,互相解耦合
  2. 任务抽象称JobHandler,由执行器内的netty服务扫描管理中

执行流程

服务端启动流程

客户端启动



执行内嵌netty服务

  1. 使用netty开放端口,等待服务端调用
  2. 注册到服务端(心跳30S)
  3. 向服务端申请剔除服务
  4. 使用异步执行(每步都是启动线程完成任务)

服务注册

主动触发

自动触发

执行器挂掉如何保证数据准确

  1. job只是调度,调度时期挂掉,有任务失败线程校验是否重跑job调度
  2. job中的数据是否重复消费,在job调度的时候去具体的任务执行校验幂等


分片路由

  • 分片的好处
  1. 并行处理
  2. 灵活控制并行数量
  3. 压力均匀分散到不同服务器节点
  • 分片广播策略两个重要概念,分片总数、当前分片数
  1. 分片总数:任务器群中任务服务的数量
  2. 当前分片数:当前的下标,同一片任务机器中下标都不一样
  • 实现方案
  • 即xxl-job调度中心发出一次调度,所有相关节点全部执行一次
  • 通过任务参数传入执行任务节点数量
  • 定时任务逻辑里,根据获取到的分片参数执行任务节点数量,决策当前节点是否需要执行,分片查询数据并处理
  • 如果分片序号 > (执行任务节点数量 - 1),则当前节点不执行任务,直接返回;
  • 否则,取 分片序号执行任务节点数量 作为分片参数,查询数据并处理。

增大并发度

  1. 如果需要更大的并发量,需要有大于应用节点数量的任务并行,如何处理?两种思路:
  • 通过任务参数传入一个并发数,单个节点在处理任务时,将查询到的数据按这个数字进行再分片,交由线程池并行处理;
  • 配置 M 个定时任务,指定相同的 JobHandler,给它们编号 0、1、2…M,并将定时任务编号和 M 这两个数,由任务参数传入,定时任务逻辑里,先根据分片参数、定时任务编号、M,重新计算出新的分片参数,如分片序号 = (分片序号 * M) + 定时任务编号分片总数 = 分片总数 * M,再查询数据并处理。
  1. 如果有可能频繁调整任务执行逻辑,包括可能要新增任务参数等,而不想重启服务器,如何解决?
  1. 可以考虑使用 XXL-JOB 的「GLUE模式」任务,能够在线编辑和更新定时任务执行逻辑。


加锁

  1. JDBC自己管理数据库链接
  2. 取消事务自动提交,使用for update写锁
  3. 一般情况下查询的时候,默认数据库加读锁,这种级别是很低的,当xxjob存在集群部署的时候,存在多个线程争抢查询数据库,会造成触发器重复执行。为了防止这种情况,设置手动提交(这里spring会默认自动提交),查询添加写锁(for update)。在此期间其他线程访问的时候都会阻塞等待。



相关文章
|
SQL 监控 Java
分布式任务调度之xxl-job
分布式任务调度之xxl-job
xxl-job执行器启动报错读取不到配置文件Could not resolve placeholder ‘xxl.job.executor.address‘ in value “${xxl.job
有几个不用配置的属性,也要写出来,不填值就行 但是最后一个日志天数得写,写个-1。不然空字符串无法转成数字
|
缓存 Java 应用服务中间件
一文带你使用xxl-job定时任务
将调度行为抽象形成“调度中心”公共平台,而平台自身并不承担业务逻辑,“调度中心”负责发起调度请求。 将任务抽象成分散的JobHandler,交由“执行器”统一管理,“执行器”负责接收调度请求并执行对应的JobHandler中业务逻辑。 因此,“调度”和“任务”两部分可以相互解耦,提高系统整体稳定性和扩展性;
2855 0
一文带你使用xxl-job定时任务
|
4月前
|
Kubernetes 数据库 容器
k8s快速部署xxl-job
k8s快速部署xxl-job
|
7月前
|
负载均衡 Java 调度
xxl-job与其他调度框架比较与部署
xxl-job与其他调度框架比较与部署
xxl-job与其他调度框架比较与部署
|
存储 SQL BI
xxl-job 介绍与使用
XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
200 0
|
SQL 调度 数据库
|
缓存 Java 调度
xxl-job的原理(1)
xxl-job的原理(1)
144 0
|
监控 Java 调度
xxl-Job分布式任务调度 1
xxl-Job分布式任务调度
114 0
|
JavaScript Java 关系型数据库
xxl-job搭建
xxl-job搭建
310 0

相关实验场景

更多