简单介绍分布式定时任务XXL-JOB

打印 上一主题 下一主题

主题 1886|帖子 1886|积分 5658

XXL-JOB 由 调度中央 和 实行器 两大部分组成。调度中央主要负责任务管理、实行器管理以及日志管理
实行器主要是吸收调度信号并处理。另外,调度中央进行任务调度时,是通过自研 RPC 来实现的
不同于 Elastic-Job 的去中央化计划, XXL-JOB 的这种计划也被称为中央化计划(调度中央调度多个实行器实行任务)
和 Quzrtz 雷同 XXL-JOB 也是基于数据库锁调度任务,存在性能瓶颈

acessToken实行器要连接到我们的调度中央的时间,要使用一个雷同的token


Bean模式就是我们通过xxl-job注解内里的bean的名字,去查找对应的不同的方法




不过,一般在任务量不是特别大的情况下,没有什么影响的,可以满足绝大部分公司的要求。不要被 XXL-JOB 的架构图给吓着了,实际上,我们要用 XXL-JOB 的话,只需要重写 IJobHandler 自界说任务实行逻辑就可以了,非常易用
  1. @JobHandler(value="myApiJobHandler")
  2. @Component
  3. public class MyApiJobHandler extends IJobHandler {
  4.     @Override
  5.     public ReturnT<String> execute(String param) throws Exception {
  6.         //......
  7.         return ReturnT.SUCCESS;
  8.     }
  9. }
复制代码
直接基于注解界说任务
  1. @XxlJob("myAnnotationJobHandler")
  2. public ReturnT<String> myAnnotationJobHandler(String param) throws Exception {
  3.   //......
  4.   return ReturnT.SUCCESS;
  5. }
复制代码


优缺点总结:


  • 优点:开箱即用(学习资本比较低)、与 Spring 集成、支持分布式、支持集群、支持任务可视化管理。
  • 缺点:不支持动态添加任务(假如一定想要动态创建任务也是支持的,拜见:xxl-job issue277)。

xxl-job实行器原理

xxl-job分成两个部分,一个是调度中央,一个是实行器
XXL-JOB 的实行器本身不负责任务调度,调度由调度中央(Admin)完成。调度中央根据任务配置的触发规则(如 Cron 表达式)触发任务,并通过 RPC 调用将任务分发给对应的实行器。


  • 调度中央:负责管理任务配置、触发任务、监控任务状态。
  • 实行器:吸收调度中央的请求,实行详细的任务逻辑

任务实行流程

实行器吸收到调度中央的请求后,会通过以下步调实行任务:

  • 任务剖析
实行器剖析调度中央通报的任务参数(如任务 ID、任务参数等)。
根据任务 ID 找到对应的任务处理器(JobHandler)

  • 任务处理器实行
实行器调用预先注册的任务处理器(JobHandler)的 execute 方法(@XxlJob的底层也是这个)
任务处理器实行业务逻辑,并返回实行效果。

  • 效果回调
实行器将任务实行效果通过 HTTP 回调给调度中央
调度中央记录任务实行状态(乐成、失败、重试等)

任务注册与发现

实行器启动时,会向调度中央注册本身,并上报本身支持的任务列表。调度中央通过注册信息知道哪些任务可以由哪些实行器实行。
注册机制
实行器启动时,会调用调度中央的注册接口,上报本身的地址(AppName)和支持的任务列表
调度中央将实行器的信息存储到数据库中

发现机制
调度中央根据任务配置的 AppName,找到对应的实行器地址,并将任务分发给该实行器

心跳机制

实行器会定期向调度中央发送心跳,以保持与调度中央的连接,并上报本身的康健状态。
心跳作用
维持实行器与调度中央的连接
上报实行器的康健状态(如是否在线、负载情况等)
调度中央根据心跳信息判断实行器是否可用

心跳超时处理
假如调度中央长时间未收到实行器的心跳,会将该实行器标志为离线,并不再向其分发任务

任务重试与容错

XXL-JOB 提供了任务重试机制,确保任务在失败时能够主动重试
重试机制
假如任务实行失败,调度中央会根据配置的重试次数重新触发任务。
实行器会重新实行任务,直到任务乐成或到达最大重试次数。

容错机制
假如某个实行器宕机,调度中央会将任务分发给其他康健的实行器
调度中央会根据心跳信息动态调整任务分发策略

任务分片与并行实行

XXL-JOB 支持任务分片(Sharding),允许将一个任务拆分成多个子任务并行实行。
分片原理
调度中央将任务分片信息(如分片总数、当前分片索引)通报给实行器
实行器根据分片信息实行对应的子任务
假如你有多个实行器,可以通过分片将任务均匀分配给所有实行器,制止单个实行器负载过高


例如我们给这个定时任务的业务是处理100w条数据
然后我们弄10个分片,耦合到业务逻辑,每一个分片处理10w数据,如许子我们就是10个
  1. @XxlJob("shardingJobHandler")
  2. public ReturnT<String> shardingJobHandler(String param) throws Exception {
  3.     // 获取分片参数
  4.     int shardIndex = XxlJobHelper.getShardIndex(); // 当前分片索引
  5.     int shardTotal = XxlJobHelper.getShardTotal(); // 总分片数
  6.     // 模拟处理数据
  7.     List<String> dataList = getDataList(); // 获取所有数据
  8.     int dataSize = dataList.size();
  9.     int perShardSize = dataSize / shardTotal; // 每个分片处理的数据量
  10.     // 计算当前分片需要处理的数据范围
  11.     int start = shardIndex * perShardSize;
  12.     int end = (shardIndex == shardTotal - 1) ? dataSize : start + perShardSize;
  13.     // 处理当前分片的数据
  14.     for (int i = start; i < end; i++) {
  15.         String data = dataList.get(i);
  16.         processData(data); // 处理数据
  17.     }
  18.     return ReturnT.SUCCESS;
  19. }
  20. private List<String> getDataList() {
  21.     // 模拟获取数据
  22.     List<String> dataList = new ArrayList<>();
  23.     for (int i = 0; i < 1000; i++) {
  24.         dataList.add("data-" + i);
  25.     }
  26.     return dataList;
  27. }
  28. private void processData(String data) {
  29.     // 模拟处理数据
  30.     System.out.println("处理数据:" + data);
  31. }
复制代码

并行实行
多个实行器可以同时实行不同的分片任务,从而实现任务的并行处理

面试答复思绪

调度中央统一管理任务
我们实行器有两种方式实现:
一个是继续IJobHandler类来重写我们的execute()方法
一个是通过@xxljob注解来实现(底层还是IJobHandler)

实行器启动时,会向调度中央注册本身,并上报本身支持的任务列表。调度中央通过注册信息知道哪些任务可以由哪些实行器实行
同时我们实行器和调度中央会保持心跳实行器会定期向调度中央发送心跳,以保持与调度中央的连接,并上报本身的康健状态,调度中央根据心跳信息判断实行器是否可用

我们的心跳还有超时处理机制,假如调度中央长时间未收到实行器的心跳,会将该实行器标志为离线,并不再向其分发任务

我们的xxl-job和传统的定时任务不同,他有更强大的功能,同时还有ui界面方便交互和使用
首先将一下分布式定时任务和平常定时任务的不同和优缺点

xxl-job他还有任务重试机制和容错机制
重试机制:任务失败时根据配置的重试次数进行重试
容错机制:假如某个实行器宕机,调度中央会将任务分发给其他康健的实行器。调度中央会根据心跳信息动态调整任务分发策略

xxl-job的分片机制(大题目化小)
假如你有多个实行器,可以通过分片将任务均匀分配给所有实行器,制止单个实行器负载过高
例如我们给这个定时任务的业务是处理100w条数据
然后我们弄10个分片,耦合到业务逻辑,每一个分片处理10w数据,如许子我们就是10次实行器实行去处理这个100w数据

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

数据人与超自然意识

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表