分布式定时任务调度框架

article/2025/9/11 17:35:39

分布式定时任务调度框架

1 分布式定时任务框架设计

1.1 所需的功能

一个分布式定时任务,需要具备有以下几点功能:
1)核心功能:定时调度、任务管理、可观测日志
2)高可用:集群、分片、失败处理
3)高性能:分布式锁
4)扩展功能:可视化运维、多语言、任务编排

1.2 整体架构

一个分布式定时任务调度框架一般分为3个模块:
调度中心:负责接收并分配任务,任务调度,核心调度模块。
任务执行:负责执行任务,执行完反馈给调度中心。
监控中心:主要负责节点管理,任务队列管理,监控管理等。

2 常见的分布式调度框架

2.1 QuartZ

2.1.1 基本概念

在这里插入图片描述
JOB: 定义自己的任务
JobDetail: 封装 JOB 对象的
scheduler调度器: 管理全部的任务(Scheduler)
Trigger触发器: 开启新的线程执行任务(jobDetail)

2.1.2 调度原理

在Quartz中,线程分为Scheduler调度线程和任务执行线程。
Scheduler调度线程主要有:执行常规调度的线程和执行misfired trigger的线程。
Scheduler有一个QuartzSchedulerThread(Thread的子类)属性,在scheduler实例化的时候,实例化了一个对象,并用ThreadExecutor启动该线程对象。该线程就是调度线程,主要任务就是不停的从JobStore中获取即将被触发的触发器(默认30s调度一次)。

2.1.3 分布式锁

使用数据库分布式事务锁。
1)默认不开启悲观锁,需要在配置文件中
org.quartz.jobStore.acquireTriggersWithinLock=true
2)也可以集成redis实现分布式锁

2.2 tbschedule

2.2.1 基本概念

任务:定义某一个任务,绑定实现IScheduleTaskDealSingle或者IScheduleTaskDealMulti的任务类,同时可以通过设置任务项,将任务同一时间分片。
策略:定义执行的时间,一般采用cron表达式。绑定某个任务以及绑定机器。用于按照某个时间点分配给不同机器执行某个任务。策略可以设置线程组数量,就是使用多少给线程组来同时处理任务。
机器:监控调度机的状态。
在这里插入图片描述

2.2.2 调度原理

策略会根据最小ID的机器,分配任务执行。定时器使用Timer实现。

2.2.3 分布式锁

使用zookeeper来做分布式锁,就是机器注册zookeeper后,会查找所有策略中绑定的机器,然后写入到策略节点下面。策略会根据最小ID的机器,分配任务执行。

2.2.4 任务分片

搞清楚几个参数的作用
1)策略中的线程组:该参数是该策略总共启动多少个线程组来执行任务
2)任务中的任务项:可以按照0、1、2、3、4或者A、B、C、D等划分
3)selectTasks(String taskParameter, String ownSign, int taskItemNum, List list, int eachNum)方法
其中 List list就是分配到不同线程组的任务项。
那么任务分片就是根据设定的任务项,将其分配到不同的线程组中实现分片功能。

2.3 Schedulerx2.0

分布式任务调度SchedulerX是阿里巴巴自研的基于Akka架构的分布式任务调度平台,兼容开源XXL-JOB、ElasticJob,支持Cron定时、一次性任务、任务编排、分布式执行批量任务等功能,具备高可用、可视化、可运维、低延时等能力。
在这里插入图片描述

2.4 elastic-job

2.4.1 基本概念

elasti-job分为2独立2大块,一个是lite-core(核心去中心化的调度),一个是cloud(监控平台)。
在这里插入图片描述
schedule:是会选出一个leader,作为每次任务执行时,分配任务(包括分片)的机器
job:是真正执行任务
Simple类型作业:意为简单实现,未经任何封装的类型。需实现SimpleJob接口。该接口仅提供单一方法用于覆盖,此方法将定时执行。与Quartz原生接口相似,但提供了弹性扩缩容和分片等功能。
Dataflow类型作业:Dataflow类型用于处理数据流,需实现DataflowJob接口。该接口提供2个方法可供覆盖,分别用于抓取(fetchData)和处理(processData)数据。(类似tbschedule的seletTask)
Script类型作业:Script类型作业意为脚本类型作业,支持shell,python,perl等所有类型脚本。只需通过控制台或代码配置scriptCommandLine即可,无需编码。执行脚本路径可包含参数,参数传递完毕后,作业框架会自动追加最后一个参数为作业运行时信息。

2.4.2 调度原理

在这里插入图片描述
定时任务触发时,如需重新分片,则通过主服务器分片,分片过程中阻塞,分片结束后才可执行任务。如分片过程中主服务器下线,则先选举主服务器,再分片

2.4.3 分布式锁

使用zookeeper来做分布式锁,就是机器注册zookeeper后,会选出leader,然后做分配工作,最后执行

2.4.4 分片原理

AverageAllocationJobShardingStrategy:基于平均分配算法的分片策略,也是默认的分片策略。
OdevitySortByNameJobShardingStrategy:根据作业名的哈希值奇偶数决定IP升降序算法的分片策略。
RotateServerByNameJobShardingStrategy:根据作业名的哈希值对服务器列表进行轮转的分片策略。

2.4.5 与quartz的关系

elastic-job使用了quartz的调度机制,内部原理一致,他可以看作是quartz的一个扩展实现,使用注册中心(zookeeper)替换了quartz的jdbc数据存储方式,此外,elastic-job又支持分片等特殊功能。对应的概念:

JobLiteJob
Triggercron
SchedulerJobScheduler

底层其实使用LiteJob 实现了quartz的Job接口,在JobScheduleController.java创建创建trigger。

2.5 xxl-job

2.5.1 基本概念

在这里插入图片描述
调度中心:一个用于发布任务的中心,可以控制任务启动和停止,已经维护监控注册和日志
执行器:用于执行任务的客户端,调度中心会根据注册执行器,按照算法分配任务执行。执行器有一个appName,与调度中心的执行器管理的appName对应,名称一致才会分配任务
任务:设置任务、执行策略、分片机制、执行器等属性,其中执行器与执行器管理中选择一个执行器名称,这样就可以分配到对应appName的执行器。

2.5.2 调度原理

  • 1、“调度中心”向“执行器”发送http调度请求: “执行器”中接收请求的服务,实际上是一台内嵌Server,默认端口9999;
  • 2、“执行器”执行任务逻辑;
  • 3、“执行器”http回调“调度中心”调度结果: “调度中心”中接收回调的服务,是针对执行器开放一套API服务;#### 2.5.3 分布式锁

2.5.4 分片原理

执行器集群部署时,任务路由策略选择”分片广播”情况下,一次任务调度将会广播触发对应集群中所有执行器执行一次任务,同时系统自动传递分片参数;可根据分片参数开发分片任务;

2.6 LTS(light-task-scheduler)

3 serverless解决方案

利用容器化,定时启动执行器,执行任务。

4 方案对比

在这里插入图片描述


http://chatgpt.dhexx.cn/article/Vo8uxyCU.shtml

相关文章

# 手把手教学超详细python通用爬虫分布式框架(一)

手把手教学超详细python通用爬虫分布式框架(一) 这里日后添加系列文章的所有文章的目录 文章目录 手把手教学超详细python通用爬虫分布式框架(一)前言一、所谓任务?二、任务需要什么1.启动格式2.任务执行流程分析3.任务灵活化 总结 前言 采用 vueflask,…

使用c++开发分布式框架实践

目前比较流行的分布式框架有dubbo,springcloud,JMX等,都是java实现的,但是在做c项目时,也有分布式的需求,这时我们可以基于grpc自己设计一套分布式框架。 整体思路如下: Consumer服务消费者&…

Ray入门指南——分布式框架(待更新)

1. ray库介绍 金融、工程模型需要大量使用 Pandas 和 Numpy 来做矩阵计算,需要针对 Pandas/Numpy 有更好的支持,ray库就是其中一种可以加速计算的框架。 Ray 有如下特点: 分布式异步调用内存调度Pandas/Numpy 的分布式支持支持 Python整体性…

springboot分布式框架搭建

搭建框架需要工具默认基于 maven 的分布式工程,我们知道在一个项目中,多个微服务是属于同一个工程,只不过是提供不同的服务而已,因此使用 maven 分布式工程来搭建微服务架构。搭建基于 maven 分布式的 Spring Cloud 微服务工程架构…

分布式事务及分布式框架Seata

分布式事务 分布式事务是什么? 》本地事务是一个单元的sql,分布式事务也是一个单元的sql,他们区别在于,分布式事务的sql分布在了不同服务上,这里的服务指微服务和数据库服务 ?为什么强调服务是微服务和数…

分布式计算框架Map/reduce

简介: MapReduce是一个基于集群的高性能并行计算平台,MapReduce是一个并行计算与运行的软件框架,MapReduce是一个并行程序设计模型与方法.特点: ①分布可靠,对数据集的操作分发给集群中的多个节点实现可靠性,每个节点周期性返回它完成的任务和最新的状态 ②封装了实现细节&a…

什么是分布式架构

一、分布式架构定义 什么是分布式架构 分布式系统(distributed system) 是建立在网络之上的软件系统。 内聚性:是指每一个数据库分布节点高度自治,有本地的数据库管理系统。 透明性:是指每一个数据库分布节点对用户…

分布式架构图解

一、分布式架构图解 1)传统servletjsp模式 2)分布式架构  需要按照功能点把系统拆分,拆分成独立的功能。单独为某一个节点添加服务器。需要系统之间配合才能完成整个业务逻辑。叫做分布式。  分布式架构:多个子系统相互协作…

分布式框架

应用架构 单一应用架构ORM 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。 适用于小型网站,小型管理系统,将所有…

juicer.js @each中的index 索引+1操作

问题描述:想在index1的值显示出来而不是做字符串拼接,如我做的楼号, 想显示2楼,3楼,4楼 解决方法:在index前加一个加号即可。 !{index1}楼 效果: 简单介绍juicer模板: Juicer 是…

Jmetercookie管理器

Jmeter中cookie自动存储 1,新建一个测试计划,然后添加一个"HTTP Cookie 管理器"(用来存储cookie) 2,新建一个线程组,添加一个Sampler-->“HTTP 请求”(用来登录用的),添加一个Samp…

利用3D-DNA流程组装基因组

利用3D-DNA流程组装基因组 使用二代数据或三代数据得到contig后,下一步就是将contig提升到染色体水平。有很多策略可以做到这一点,比如说遗传图谱,BioNano(看运气), HiC, 参考近源物种。 如果利用HiC进行准染色体水平,那么目前常见…

Hic-pro的结果文件转化为.hic文件,在juicebox中实现可视化

hic数据经过Hic-pro处理后,会生成allvalidpairs文件,这是所有有效配对的文件。一般想要可视化的话,比较复杂。这时我们就可以把它转化为.hic文件,放到juicebox中就很好的可视化。 juicer中的pre命令是用来做这个事情的。只要你的…

Java-juc

1. 进程和线程 进程: 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个基本单位。例如:打开一个 .exe文件就是一个进程、打开360安全软件就是一个进程 线程 线程是进程的一个实体,是进…

Junit

Junit单元测试 简介:本文主要讲解,如何使用Eclipse,进行单元测试。 1.准备工作:搭建实验环境(EclipseJunitAnt) Eclipse:http://www.eclipse.org/ JUnit:http://www.junit.org/ Ant&#x…

juicer使用案例

代码结构&#xff1a; 编写main.html&#xff1a;引入方式可从bootcdn直接copy script标签 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge&…

juicer

UPDATE: juicer-0.3.1-dev published github.com. 让我们从一段代码说起&#xff0c;假设有一段这样的JSON数据&#xff1a; var json{name:"流火",blog:"ued.taobao.org" };我们需要根据这段JSON生成这样的HTML代码&#xff1a; 流火 (blog: ued.taoba…

Juicer软件的安装详解

欢迎关注”生信修炼手册”! 软件安装是生物信息实战中最基础的技能之一&#xff0c;只有确保软件安装无误&#xff0c;后续使用起来才会得心应手&#xff0c;不会有很多的bug。juicer软件提供了Hi-C数据一键化分析的pipeline, 这样高度的封装使得用户操作起来更加简便&#xff…

Juicer实战详解

欢迎关注”生信修炼手册”! Juicer软件的运行是非常简单的&#xff0c;只需要设置几个参数就可以了&#xff0c;本文利用官网的小的测试测试数据集来展示该软件的基本用法。 1. 下载测试数据 从以下链接下载测试数据集 https://github.com/aidenlab/juicer/wiki/Running-Juicer…

Juicer: 辅助基因组组装

Juicer: 辅助基因组组装 Juicer 导读 本文主要对处理HiC数据的Juicer程序进行一个简短的介绍&#xff0c;并展示如何利用Juicer进行基因组组装中染色体挂载的第一步。 1. 介绍 算法介绍 Juicer[1] 是一款能够提供一键式分析Loop-Resolution的程序。 特点 只需一次单击&#xff…