分布式任务调度(03)--中心化设计

news2024/11/16 19:30:36

把调度和任务执行,隔离成两个部分:

  • 调度中心

    只需要负责任务调度属性,触发调度命令

  • 执行器

    执行器接收调度命令,去执行具体的业务逻辑

两者都可以进行横向扩容。

1 MQ

调度中心依赖Quartz集群模式,当任务调度时,发送消息到RabbitMQ 。业务应用收到任务消息后,消费任务信息。

充分利用MQ解耦:

  • 调度中心发任务
  • 应用方作为执行器,接收任务并执行

1.1 缺点

多引入中间件,强依赖MQ,可扩展性和功能,系统负载都和MQ有关。

2 XXL-JOB

分布式任务调度平台,设计目标:开发迅速、学习简单、轻量级、易扩展。

2.1 xxl-job 2.3.0架构图

2.2 网络通讯 server-worker 模型

img

调度中心和执行器 两个模块之间通讯是 server-worker 模式。调度中心本身就是一个SpringBoot 工程,启动会监听8080端口。

执行器启动后,会启动内置服务( EmbedServer )监听9994端口。这样双方都可以给对方发送命令。

调度中心咋知道执行器地址信息?

执行器会定时发送注册命令 ,这样调度中心就可获取在线执行器集。

通过执行器集,即可根据任务配置的路由策略选择节点执行任务。

路由策略

随机节点执行

选择集群中一个可用的执行节点执行调度任务。

适用场景:离线订单结算。

img

广播执行

在集群中所有的执行节点分发调度任务并执行。

适用场景:批量更新应用本地缓存。

分片执行

按用户自定义分片逻辑进行拆分,分发到集群中不同节点并行执行,提升资源利用效率

适用场景:海量日志统计。

img

调度器

调度器是任务调度系统里面非常核心的组件。XXL-JOB 的早期版本是依赖Quartz。

但在v2.1.0版本中完全去掉了Quartz的依赖,原来需要创建的 Quartz表也替换成了自研的表。

核心的调度类是:JobTriggerPoolHelper 。调用start方法后,会启动两个线程:scheduleThread 和 ringThread 。

首先 scheduleThread 会定时从数据库加载需要调度的任务,这里从本质上还是基于数据库行锁保证同时只有一个调度中心节点触发任务调度。

ExplainConnection conn = XxlJobAdminConfig.getAdminConfig()
                  .getDataSource().getConnection();
connAutoCommit = conn.getAutoCommit();
conn.setAutoCommit(false);
preparedStatement = conn.prepareStatement(
"select * from xxl_job_lock where lock_name = 'schedule_lock' for update");
preparedStatement.execute();
# 触发任务调度 (伪代码)
for (XxlJobInfo jobInfo: scheduleList) {
  // 省略代码
}
# 事务提交
conn.commit();

调度线程会根据任务的「下次触发时间」,采取不同的动作:

img

已过期的任务需要立刻执行的,直接放入线程池中触发执行 ,五秒内需要执行的任务放到 ringData 对象里。

ringThread 启动后,定时从 ringData 对象里获取需要执行的任务列表 ,放入到线程池中触发执行。

imgimg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1181249.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文搞懂图像RGB和YUV编码及相互转换

一文搞懂图像RGB和YUV编码及相互转换 硬件花园 • 来源:硬件花园 • 作者:硬件花园 • 2023-05-17 08:37 • 3987次阅读 1 色彩空间和色彩模型 色彩是人眼对于不同频率的光线的不同感受。色彩既是客观存在的,但又是主观感知的,所以不同人对色彩的感知会存在差异。为了规范…

[论文阅读]PV-RCNN++

PV-RCNN PV-RCNN: Point-Voxel Feature Set Abstraction With Local Vector Representation for 3D Object Detection 论文网址:PV-RCNN 论文代码:PV-RCNN 简读论文 这篇论文提出了两个用于3D物体检测的新框架PV-RCNN和PV-RCNN,主要的贡献如下: 提出P…

有电闭锁继电器 YDB-100 100V 辅助电源DC110V JOSEF约瑟 板后安装

YDB-100有电闭锁继电器 1 应用 本继电器用于发电厂和变电站内,用作高压母线合接地刀闸的闭锁元件,以防止高压母线带电时合接地刀闸。 2 主要性能 2 1采用进口集成电路和元器件构成。具有原理先进、性能稳定、可靠性高、动作值精度高、离散值小、整定范围…

ideal一键部署SpringBoot项目jar包到服务器

一 简介 我们在开发环境部署项目一般通过ideal将项目打包成jar包,然后连接linux服务器,将jar手动上传到服务中,重启服务。 概括的说流程是这样的: 本地打包->上传到服务器->kill掉以前的服务->重新启动jar包服务 每次总是循环这一…

暴力枚举

文章目录 循环枚举统计方形加强版烤鸡三连击升级版 子集枚举选数组合的输出 排列枚举三连击升级版全排列问题火星人 [NOIP2004 普及组] 火星人题目描述输入格式输出格式样例 #1样例输入 #1 循环枚举 统计方形加强版 题目背景 1997年普及组第一题 题目描述 有一个 n m n …

Kubernetes 准入控制

Author:rab 目录 前言一、限制范围二、配置案例2.1 名称空间 CPU 与内存约束2.1.1 CPU 约束2.1.2 内存约束2.1.3 默认 CPU 申请约束2.1.4 默认内存申请约束 2.2 名称空间总容量限额约束 总结 前言 LimitRange 是限制命名空间内可为每个适用的对象类别 (…

基于51单片机的停车场管理系统仿真电路设计

**单片机设计介绍,基于51单片机的停车场管理系统仿真电路设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 停车场管理系统仿真电路设计介绍 停车场管理系统主要用于自动化管理和控制停车场,以提高停车…

Elasticsearch内存分析

文章目录 Elasticsearch JVM内存由哪些部分组成Indexing BufferNode Query CacheShard Request CacheField Data CacheSegments Cache查询 非堆内存内存压力mat分析es的jvm缓存监控 Elasticsearch JVM内存由哪些部分组成 官方建议Elasticsearch设置堆内存为32G,因为…

第三章:人工智能深度学习教程-人工智能与机器学习与深度学习之间的区别

人工智能基本上是通过一组规则(算法)将人类智能融入机器的机制。人工智能是两个词的组合:“人工”是指由人类或非自然物体制造的东西,“智能”是指相应地理解或思考的能力。另一个定义可能是“人工智能基本上是训练机器&#xff0…

Starward(米家游戏启动器)支持米哈游旗下的所有桌面端游戏

Starward应用名的由来 Starward 出自星穹铁道开服前的宣传语———愿此行,终抵群星 (May This Journey Lead Us Starward),虽然这不是一个正确的英文单词,但是很适合拿来用作应用名。 Starward 是一个米家游戏启动器,支持米哈游旗…

web3通过antd 在React dapp中构建订单组件基本结构

上文web3 dapp React项目引入 antd 对 balance 用户token信息组件进行样式改造 中 我们导入 antd组件 算是比较完整的编写了用户资产组件 那么 今天开始 我们就要说订单组件了 这个就会比之前的复杂很多 我们还是先开环境 ganache 终端执行 ganache -d然后 将合约 发布到区块链…

Django+Celery框架自动化定时任务开发

本章介绍使用DjCelery即DjangoCelery框架开发定时任务功能,在Autotestplat平台上实现单一接口自动化测试脚本、业务场景接口自动化测试脚本、App自动化测试脚本、Web自动化测试脚本等任务的定时执行、调度、管理等,从而取代Jenkins上的定时执行脚本和发送…

趋动云云端部署ChatGLM3-6B

趋动云端部署ChatGLM3-6B 文章目录 趋动云端部署ChatGLM3-6B1.项目创建2.模型部署3.总结参考 本部分主要内容:1.熟悉趋动云项目创建流程2.动手部署ChatGLM3-6B模型 1.项目创建 首先是趋动云的项目的创建,其主要以项目为载体,一个项目内可以进…

深度学习连接

全连接批量归一化 目的是:通过归一化,让所有的 x i x_i xi​具有一样的分布,学习率是一个值,每个参数 w i w_i wi​梯度的值大致相当实现是:实际上是在全连接中增加了两个节点 γ \gamma γ, β \beta β

设置区块链节点输出等级为警告级,并把日志存储阈值位100MB并验证;

题目 获取指定区块链节点输出等级为警告级,并设置日志存储阈值位100MB并验证; 操作步骤 1.切换目录 cd nodes/127.0.0.1/node0 2.打开配置文件并修改 vim config.ini warn:警告

拒绝一次性芯片,新技术:无线升级芯片

其便捷性和兼容性拥有4年经验的职场人都上手试用! 就算把产品寄到国外出问题了或需要升级 2.4G射频芯片帮您实现Mcu Ota无线升级产品0.3就能换一次救命的机会,相当于给产品买个保险! 问宇凡微拿了规格书和样品,经过几天的摸索研…

怎么更改文件创建日期?

怎么更改文件创建日期?如今科技发展日新月异,人们对于信息和数据的依赖程度日益加深。在这个高度信息化的时代,文件处理已经成为数字化办公不可或缺的环节。无论是个人还是企业,都需要通过数字化的方式来处理和管理大量的文档、表…

聊聊低代码技术

目录 一、什么是低代码开发? 二、为什么需要低代码开发,具备哪些优势? 三、低代码开发在实际工作中的作用 四、是不是有了低代码,就能不关注“质量”呢? 五、引迈旗下低代码开发平台--JNPF初体验 一、什么是低代码开发…

大厂硬性要求的性能优化,如何做到极致?可从7个方向切入

关于Android开发中的性能优化也是老生常谈的技术了。在许多大厂的招聘条件中就必须要求这项技术;因为Android 开发越来越规范, 国内工程师的素质,以及用户对产品的要求也越来越高。所以这也间接导致我们对研发项目的质量要求到了近乎苛刻的地…

『MySQL快速上手』-③-库的操作

文章目录 1.创建数据库2.创建数据库案例3.字符集和校验规则3.2 校验规则对数据库的影响3.2.1 进行查询3.2.2 进行排序 4.字符集和检验规则的作用5.操纵数据库5.1 查看数据库5.2 显示创建语句5.3 修改数据库5.4 数据库删除 6.备份与恢复6.1 备份6.2 还原6.3 注意事项 7.查看数据…