论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
软件与程序人生
›
云原生
›
XXL-Job详解(一):组件架构
XXL-Job详解(一):组件架构
丝
金牌会员
|
2024-7-12 02:25:28
|
显示全部楼层
|
阅读模式
楼主
主题
993
|
帖子
993
|
积分
2979
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。
执行模块(执行器):
负责吸收调度请求并执行任务逻辑。任务模块专注于任务的执行等操纵,开发和维护更加简单和高效;
吸收“调度中心”的执行请求、终止请求和日志请求等。
架构图
将调度行为抽象形成“调度中心”公共平台,而平台自身并不承担业务逻辑,“调度中心”负责发起调度请求。
将任务抽象身分散的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企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
丝
金牌会员
这个人很懒什么都没写!
楼主热帖
ShardingSphere 异构迁移最佳实践:将3 ...
本科毕设CTF平台-MarsCTF
MySQL 5.7 安装教程(全步骤、保姆级教 ...
KubeEdge 1.12版本发布,稳定性、安全 ...
Grafana 系列文章(一):基于 Grafana ...
学生信息管理系统(JAVA+MYSQL) ...
15.Linux和Windows入侵排查
Sickos1_1
mysql数据迁移,通用windows->linux,li ...
Redis介绍与安装
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
虚拟化与私有云
Mysql
前端开发
网络安全
分布式数据库
移动端开发
SQL-Server
物联网
程序人生
快速回复
返回顶部
返回列表