发表于 2024-7-12 02:25:28

XXL-Job详解(一):组件架构

XXL-Job

XXL-JOB是一个分布式任务调度平台,其核心计划目标是开发敏捷、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
特性

1、简单:支持通过Web页面对任务进行CRUD操纵,操纵简单,一分钟上手;
2、动态:支持动态修改任务状态、启动/停止任务,以及终止运行中任务,即时见效;
3、调度中心HA(中心式):调度采用中心式计划,“调度中心”自研调度组件并支持集群摆设,可保证调度中心HA;
4、执行器HA(分布式):任务分布式执行,任务”执行器”支持集群摆设,可保证任务执行HA;
5、注册中心: 执行器会周期性自动注册任务, 调度中心将会自动发现注册的任务并触发执行。同时,也支持手动录入执行器地址;
6、弹性扩容缩容:一旦有新执行器机器上线大概下线,下次调度时将会重新分配任务;
还有多种特性,具体可以查看官网:
链接: https://www.xuxueli.com/xxl-job/
体系构成

xxl-job分为 调度中心和执行器两大模块
调度模块(调度中心):
负责管理调度信息,按照调度配置发出调度请求,自身不承担业务代码。调度体系与任务解耦,提高了体系可用性和稳定性,同时调度体系性能不再受限于任务模块;
支持可视化、简单且动态的管理调度信息,包罗任务新建,更新,删除,GLUE开发和任务报警等,所有上述操纵都会及时见效,同时支持监控调度结果以及执行日志,支持执行器Failover。
执行模块(执行器):
负责吸收调度请求并执行任务逻辑。任务模块专注于任务的执行等操纵,开发和维护更加简单和高效;
吸收“调度中心”的执行请求、终止请求和日志请求等。
架构图

https://img-blog.csdnimg.cn/direct/4e653501a9a745f5b912db18316a888c.png
将调度行为抽象形成“调度中心”公共平台,而平台自身并不承担业务逻辑,“调度中心”负责发起调度请求。
将任务抽象身分散的JobHandler,交由“执行器”统一管理,“执行器”负责吸收调度请求并执行对应的JobHandler中业务逻辑。
调度模块剖析

调度线程池
调度采用线程池方式实现,制止单线程因壅闭而引起任务调度延迟。
并行调度
XXL-JOB调度模块默认采用并行机制,在多线程调度的情况下,调度模块被壅闭的几率很低,大大提高了调度体系的承载量。
XXL-JOB的不同任务之间并行调度、并行执行。
XXL-JOB的单个任务,针对多个执行器是并行运行的,针对单个执行器是串行执行的。同时支持任务终止。
过期处理策略
任务调度错过触发时间时的处理策略:
大概原因:服务重启;调度线程被壅闭,线程被耗尽;上次调度持续壅闭,下次调度被错过;
处理策略:
过期超5s:本次忽略,当前时间开始盘算下次触发时间
过期5s内:立即触发一次,当前时间开始盘算下次触发时间
调度中心HA(集群)
基于数据库的集群方案,数据库选用Mysql;集群分布式并发情况中进行定时任务调度时,会在各个节点会上报任务,存到数据库中,执行时会从数据库中取出触发器来执行,如果触发器的名称和执行时间相同,则只有一个节点去执行此任务。
任务 “运行模式” 剖析

“Bean模式” 任务
原理:每个Bean模式任务都是一个Spring的Bean类实例,它被维护在“执行器”项目的Spring容器中。任务类需要加“@JobHandler(value=”名称”)”注解,由于“执行器”会根据该注解辨认Spring容器中的任务。任务类需要继承统一接口“IJobHandler”,任务逻辑在execute方法中开发,由于“执行器”在吸收到调度中心的调度请求时,将会调用“IJobHandler”的execute方法,执行任务逻辑。
“GLUE模式(Java)” 任务
原理:每个 “GLUE模式(Java)” 任务的代码,现实上是“一个继承自“IJobHandler”的实现类的类代码”,“执行器”吸收到“调度中心”的调度请求时,会通过Groovy类加载器加载此代码,实例化成Java对象,同时注入此代码中声明的Spring服务(请确保Glue代码中的服务和类引用在“执行器”项目中存在),然后调用该对象的execute方法,执行任务逻辑。
GLUE模式(Shell) + GLUE模式(Python) + GLUE模式(PHP) + GLUE模式(NodeJS) + GLUE模式(Powershell)
原理:脚本任务的源码托管在调度中心,脚本逻辑在执行器运行。当触发脚本任务时,执行器会加载脚本源码在执行器机器上生成一份脚本文件,然后通过Java代码调用该脚本;并且及时将脚本输出日志写到任务日志文件中,从而在调度中心可以及时监控脚本运行情况;
执行器

执行器现实上是一个内嵌的Server,默认端口9999(配置项:xxl.job.executor.port)。
在项目启动时,执行器会通过“@JobHandler”辨认Spring容器中“Bean模式任务”,以注解的value属性为key管理起来。
“执行器”吸收到“调度中心”的调度请求时,如果任务类型为“Bean模式”,将会匹配Spring容器中的“Bean模式任务”,然后调用其execute方法,执行任务逻辑。如果任务类型为“GLUE模式”,将会加载GLue代码,实例化Java对象,注入依赖的Spring服务(留意:Glue代码中注入的Spring服务,必须存在与该“执行器”项目的Spring容器中),然后调用execute方法,执行任务逻辑。
工作流程
1、“调度中心”向“执行器”发送http调度请求: “执行器”中吸收请求的服务,现实上是一台内嵌Server,默认端口9999;
2、“执行器”执行任务逻辑;
3、“执行器”http回调“调度中心”调度结果: “调度中心”中吸收回调的服务,是针对执行器开放一套API服务;

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: XXL-Job详解(一):组件架构