分布式定时任务对比

article/2025/10/10 2:39:20

1. 什么是分布式定时任务

把分散的,可靠性差的计划任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式。叫做分布式定时任务。

2. 常见开源方案

 elastic-job xxl-job ,quartz , saturn,  opencron , antares

 elastic-job

elastic-job 是由当当网基于quartz 二次开发之后的分布式调度解决方案 , 由两个相对独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成 。

Elastic-Job-Lite定位为轻量级无中心化解决方案,使用jar包的形式提供分布式任务的协调服务。

Elastic-Job-Cloud使用Mesos + Docker(TBD)的解决方案,额外提供资源治理、应用分发以及进程隔离等服务

亮点:

  1. 基于quartz 定时任务框架为基础的,因此具备quartz的大部分功能

  2. 使用zookeeper做协调,调度中心,更加轻量级

  3. 支持任务的分片

  4. 支持弹性扩容 , 可以水平扩展 , 当任务再次运行时,会检查当前的服务器数量,重新分片,分片结束之后才会继续执行任务

  5. 失效转移,容错处理,当一台调度服务器宕机或者跟zookeeper断开连接之后,会立即停止作业,然后再去寻找其他空闲的调度服务器,来运行剩余的任务

  6. 提供运维界面,可以管理作业和注册中心。

elastic-job结合了quartz非常优秀的时间调度功能,并且利用ZooKeeper实现了灵活的分片策略。除此之外,还加入了大量实用的监控和管理功能,

以及其开源社区活跃、文档齐全、代码优雅等优点,是分布式任务调度框架的推荐选择。

由于elastic-job-lite  不支持动态添加作业,此处仅贴上elastic-job-Cloud架构图

xxl-job

由个人开源的一个轻量级分布式任务调度框架 ,主要分为 调度中心和执行器两部分 , 调度中心在启动初始化的时候,会默认生成执行器的RPC代理

对象(http协议调用), 执行器项目启动之后, 调度中心在触发定时器之后通过jobHandle 来调用执行器项目里面的代码,核心功能和elastic-job差不多

,同时技术文档比较完善

系统架构图:

 quartz

quartz 的常见集群方案如下,通过在数据库中配置定时器信息, 以数据库悲观锁的方式达到同一个任务始终只有一个节点在运行,

优点:

  1. 保证节点高可用 (HA), 如果某一个几点挂了, 其他节点可以顶上

缺点:

  1. 同一个任务只能有一个节点运行,其他节点将不执行任务,性能低,资源浪费

  2. 当碰到大量短任务时,各个节点频繁的竞争数据库锁,节点越多这种情况越严重。性能会很低下

  3. quartz 的分布式仅解决了集群高可用的问题,并没有解决任务分片的问题,不能实现水平扩展

 Saturn

 Saturn是唯品会在github开源的一款分布式任务调度产品。它是基于当当elastic-job 1.0版本来开发的,其上完善了一些功能和添加了一些新的feature。

 亮点:

  1. 支持多语言开发 python、Go、Shell、Java、Php。

  2. 管理控制台和数据统计分析更加完善

 缺点:

  1. 技术文档较少 , 该框架是2016年由唯品会的研发团队基于elastic-job开发而来的

opencron 

一个功能完善真正通用的linux定时任务调度定系统,满足多种场景下各种复杂的定时任务调度,同时集成了linux实时监控,webssh,提供一个方便管理定时任务的平台

缺点:仅支持  kill任务, 现场执行,查询任务运行状态 等, 主要功能是着重于任务的修改和查询上。 不能动态的添加任务以及任务分片。

antares

优点:

  1. 一个任务仅会被服务器集群中的某个节点调度,调度机制基于成熟的 quartz
  2. 并行执行 , 用户可通过对任务预分片,有效提升任务执行效率
  3. 失效转移
  4. 弹性扩容,在任务运行时,可以动态的加机器
  5. 友好的管理控制台

缺点:

  1. 不能动态的添加任务,仅能在控制台对任务进行触发,暂停,删除等操作
  2. 文档不多,开源社区不够活跃

系统架构图如下: 

4. 比较

此处列出了几个代表性的开源产品

feature

quartz

elastic-job-cloud

xxl-job

antares

opencron

依赖mysqljdk1.7+, zookeeper 3.4.6+ ,maven3.0.4+ ,mesosmysql ,jdk1.7+ , maven3.0+jdk 1.7+ , redis , zookeeperjdk1.7+ , Tomcat8.0+
HA多节点部署,通过竞争数据库锁来保证只有一个节点执行任务通过zookeeper的注册与发现,可以动态的添加服务器。 支持水平扩容集群部署集群部署
任务分片支持支持支持
文档完善完善完善完善文档略少文档略少
管理界面支持支持支持支持
难易程度简单较复杂简单一般一般
公司OpenSymphony当当网个人个人个人
高级功能弹性扩容,多种作业模式,失效转移,运行状态收集,多线程处理数据,幂等性,容错处理,spring命名空间支持弹性扩容,分片广播,故障转移,Rolling实时日志,GLUE(支持在线编辑代码,免发布),任务进度监控,任务依赖,数据加密,邮件报警,运行报表,国际化任务分片, 失效转移,弹性扩容 ,时间规则支持quartz和crontab ,kill任务, 现场执行,查询任务运行状态
缺点没有管理界面,以及不支持任务分片等。不适用于分布式场景需要引入zookeeper , mesos, 增加系统复杂度, 学习成本较高调度中心通过获取 DB锁来保证集群中执行任务的唯一性, 如果短任务很多,随着调度中心集群数量增加,那么数据库的锁竞争会比较厉害,性能不好。不支持动态添加任务不适用于分布式场景
使用企业大众化产品,对分布式调度要求不高的公司大面积使用36氪,当当网,国美,金柚网,联想,唯品会,亚信,平安,猪八戒大众点评,运满满,优信二手车,拍拍贷


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

相关文章

简单粗暴的分布式定时任务解决方案

分布式定时任务 1.为什么需要定时任务?2.数据库实现分布式定时任务3.基于redis实现 1.为什么需要定时任务? 因为有时候我们需要定时的执行一些操作,比如业务中产生的一些临时文件,临时文件不能立即删除,因为不清楚用户…

Java 实现分布式定时任务

文章目录 前言一、技术点二、代码实践1、引入库2、创建启动线程入口3、表结构4、任务解析5、任务拉取 三、结果展示四、总结 前言 最近有一个需求:需要实现分布式定时任务。而市面上的定时任务大多数都是基于Scheduled注解进行实现。不符合需求。所以根据需求整体思…

分布式定时任务调度

前言 什么是分布式定时任务? 把分散的,可靠性差的计划任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式。叫做分布式定时任务。 为什么要采用分布式定时任务? 单点定时任务的缺点: 功能相对简单&#xff0c…

分布式定时任务-XXL-JOB-教程+实战

一.定时任务概述 1.定时任务认识 1.1.什么是定时任务 定时任务是按照指定时间周期运行任务。使用场景为在某个固定时间点执行,或者周期性的去执行某个任务,比如:每天晚上24点做数据汇总,定时发送短信等。 1.2.常见定时任务方案…

几种常用的分布式定时任务

1. 什么是分布式定时任务 把分散的,可靠性差的计划任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式。叫做分布式定时任务。 2. 常见开源方案 elastic-job xxl-job quartz saturn opencron antares elastic-job el…

分布式定时任务

分布式定时任务 1,什么是分布式定时任务;2,为什么要采用分布式定时任务;3,怎么样设计实现一个分布式定时任务;4,当前比较流行的分布式定时任务框架; 1,什么是分布式定时…

python类型转换函数str

str函数,将数字转为字符串:

Python 类型转换(数据类型转换函数大全)

文章目录 虽然 Python 是弱类型编程语言,不需要像 Java 或 C 语言那样还要在使用变量前声明变量的类型,但在一些特定场景中,仍然需要用到类型转换。 比如说,我们想通过使用 print() 函数输出信息“您的身高:”以及浮点…

python怎么转换文件格式_python怎么转换数据类型

在处理数据的时候,经常需要转换数据的格式,来方便数据遍历等操作。下面我们来看一下Python中的几种数据类型转换。 1、字符串转字典:dict_string "{name:linux,age:18}" to_dict eval(dict_string) print(type(to_dict)) 也可以用…

python强制类型转换

1.强转为int string->int a string print(int(a))a 1.2 print(int(a))a 12 print(int(a))string仅在无特殊字符(包括小数点)且全为数字的情况下可强转为float boolen->int a True b False print(int(a)) print(int(b))float->int a …

python批量转换数据类型_python中数据类型转换

1、list转str 假设有一个名为test_list的list,转换后的str名为test_str 则转换方法: test_str = "".join(test_list) 例子: 需要注意的是该方法需要list中的元素为字符型,若是整型,则需要先转换为字符型后再转为str类型。 2、str转list 假设有一个名为test_str的…

python类型转换

一、int——支持转换为 int 类型的,仅有 float、str、bytes,其他类型均不支持。 1、str与bytes类型是什么,有什么区别 文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示。 字符串是 以字符为单位进行处理…

浅谈Python中的类型转换

目录 (一)前言 (二)四种常见转换类型 1. int()函数 (1)int()函数的格式 (2)示例 2. float()函数 (1)float()函数格式: (2&…

初学ansys:模态分析及谐响应分析

谐响应为线性系统对简谐激励的稳态响应,当系统含有阻尼或者激励为复数(相位不为0或pi),谐响应为复数。 ansys可在模态分析的基础上进行谐响应分析: 2阶频率377.47,振型如下: 当z向加速度10g,右端平面z向位…

关于模态分析

模态分析目的是获得固有频率、模态振型、振型参与系数、有效质量 模态分析是动力学的基础分析,谐响应分析的前提是进行模态分析。 什么是固有频率呢?共振频率呢? 比如一个单摆做好后,他的振动频率等于2Pi(l/g)^&#x…

Ansys-模态分析基础上的谱分析学习收获

谱分析是一种将模态分析和已知谱联系起来的、计算结构位移和应力的分析方法,主要用于确定结构对随机载荷或时间变化载荷(如地震载荷)的动力响应。谱是谱值和频率的关系曲线,它反映了时间历程载荷的强度和频率之间的关系。响应谱&a…

什么是模态分析?什么是振型?

模态和振型是两个比较难懂的概念,涉及的理论比较多,我想通过一句话引出,然后通过逐步解释的方法去阐释这两个概念。 以一根梁为例,通过理论计算寻找其固有频率、阻尼比、振型的过程就是解析模态分析,通过实验得到的就…

模态分析实例—斜齿圆柱齿轮的固有频率分析

本例介绍了对一个复杂结构—斜齿圆柱齿轮模型的创建方法,以及利用ANSYS对其进行固有频率和振型研究即模态分析的方法、步骤和过程。 APDL: /CLEAR,NOSTART /FILNAME,EXAMPLE11/PREP7 ET,1,SOLID45 MP,EX,1,2E11 MP,PRXY,1,0.3 MP,DENS,1,7800 K,1,21.87E-3 K,2,22.…

使用ANSYS进行对称边界的模态分析,制作【春节快乐】

这里写自定义目录标题 想法由来1. 建模2. 使用对称边界进行模态分析2.1 处理几何模型2.2 网格划分并设置边界条件进行计算2.3 求解2.4查看结果 延续去年的传统,最近几天一直在想做个什么东西来迎接新年。本来想用keras训练个深度网络,从一大堆图片中识别…