定时任务介绍及X-Job和E-Job简单对比

news2024/10/5 17:22:27

下面对elastic-Job和xxl-Job做个简单的描述和对比

一、区别

1XJob环境依赖于mysql,不依赖ZooKeeper2EJob依赖ZooKeeper
1X-Job 侧重的业务实现的简单和管理的方便,学习成本简单,
失败策略和路由策略丰富。推荐使用在“用户基数相对少,服务器数量在一定范围内”的情景下使用
2E-Job 关注的是数据,增加了弹性扩容和数据分片的思路,以便于更大限度的利用分布式服务器的资源。
但是学习成本相对高些,推荐在“数据量庞大,且部署服务器数量较多”时使用

二、基础知识介绍

1、什么是分布式任务调度

分布式任务调度就是在分布式环境下,定时任务的管理与执行

2、分布式任务调度的特性

分布式环境下,一个任务被部署在多实例的情况下,只有一个定时任务可执行

3、什么是任务分片

一个定时任务可以分成多个小任务并行执行(通常称为切片)

4、集群和分布式

集群:当单节点性能不足的时候,多个节点组合起来共同满足外部业务需要。
分布式:将业务需求分解成多个子业务,然后将各个子业务分别部署多个节点

使用场景:什么会使用定时任务

1、时间驱动的场景:某个时间点发送优惠券,发送短信,取消未支付订单等等。
2、批量处理数据:批量统计上个月的账单,全量同步商品数据等等。
3、固定频率的场景:每隔一定时间需要执行一次。

传统的定时任务的缺点,比如Timer,Quartz等都或多或少存在一些问题

1、不支持集群高可用,没有监控、故障告警等。
2、没有统一管理平台,不支持统计和追踪各个服务节点任务调度的结果等
3、不支持分布式任务调度:同一个服务多个实例的任务存在互斥时,需要统一的调度。

针对上面缺点,我们以Elastic-Job-lite框架为例说明

1、防止重复执行

在分布式环境中,任务能够按指定的调度策略执⾏,并且能够避免同⼀任务多实例重复执⾏

Elastic-Job依赖于Zookeeper进⾏分布式协调,每个Elastic-Job的任务执⾏实例App作为Zookeeper的客户端,进而操作ZooKeeper的znode,多个实例同时创建/leader节点,/leader节点只有一个实例能创建成功,其他的会创建失败,创建成功的实例会被选为leader节点执行任务

2、去中心化

中心化和去中心化

举例:比如业务系统A、业务系统B、业务系统C那么如果这三个业务系统两两之间需要交互。 就存在以下2个方式
1、ABC三者的协同都需要通过"中转服务"来完成,中转服务挂了整个系统就挂了
2、ABC之间可以点对点协同交互。

那么对于场景1就是中心化框架,场景2就是去中心化框架。典型的例子就是微服务A和微服务B直接的调用。

Zookeeper是去中心化,虽然选举出一个leader,多个follower,但是leader和follower是可以直接交互的。

3、任务分片

任务分片就是将一个定时任务分成多个小任务,每个小任务可以并发执行,具体的分片策略也可以自由制定,分⽚和任务本身是通过⼀个注册中⼼协调的。

4、弹性扩容,高可用

新增加⼀个运⾏实例,如job3,它会⾃动注册到注册中⼼,注册中⼼发现新的服务上线,注册中⼼会通知ElasticJob 进⾏重新分⽚
如果所有的节点挂掉,只剩下⼀个节点,所有分⽚都会指向剩下的⼀个节点,这也是ElasticJob的⾼可⽤

二、elastic-Job

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

1、ElasticJob-Lite定位是无中心化的分布式定时调度框架,采用zookeeper实现分布式协调,实现任务高可用、任务可分片执行。
2、ElasticJob-Cloud提供资源治理、应用分发以及进程隔离等功能。

官网介绍:可面对高并发复杂的业务,即使是在业务量大,服务器多的时候也能做好任务调度,尽可能的利用服务器的资源。使用ZooKeeper使其具有高可用、一致性的,而且还具有良好的扩展性

elasticjob通过ZooKeeper的选举机制选举出主服务器,如果主服务器挂了,会重新选举新的主服务器。因此elasticjob具有良好的扩展性和可用性,但是使用和运维有一定的复杂

三、xxl-Job

xxl-job 通过一个中心式的调度平台,调度多个执行器执行任务,调度中心通过DB锁保证集群分布式调度的一致性,这样扩展执行器会增大DB的压力,但是如果实际上这里数据库只是负责任务的调度执行。但是如果没有大量的执行器的话和任务的情况,是不会造成数据库压力的。实际上大部分公司任务数,执行器并不多(虽然面试经常会问一些高并发的问题)。

xxl-job中心式的调度平台轻量级,开箱即用,操作简易,上手快,与SpringBoot有非常好的集成,而且监控界面就集成在调度中心,界面又简洁,对于企业维护起来成本不高,还有失败的邮件告警等等

xxl-job环境依赖于mysql,不依赖ZooKeeper

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

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

相关文章

对elasticsearch的实际应用

有业务需求,要做一个搜索接口,从千万的数据中根据筛选项查到需要的数据 筛选项有 1.学段。高中,初中等 2.学科。数学,语文等 3.专区。同步专区,高考专区等 4.试卷类型。月考卷,期中考试卷等 5.年级。高一&a…

MyBatis-Plus常用注解

常用注解 TableName 在使用MyBatis-Plus实现基本的CRUD时,我们并没有指定要操作的表,只是在Mapper接口继承BaseMapper时,设置了泛型User,而操作的表为user表 由此得出结论,MyBatis-Plus在确定操作的表时,…

基于 Tensorflow 2.x 从零训练花卉图像识别模型

一、数据集准备 本篇文章使用数千张花卉照片作为数据集,共分为5个分类:雏菊(daisy)、蒲公英(dandelion)、玫瑰(roses)、向日葵(sunflowers)、郁金香&#xf…

ClickHouse中的数据类型

ClickHouse中的数据类型数据类型说明数值类型IntFloatDecimal字符串类型StringFixedStringUUID时间类型DateDateTimeDateTIme64复杂类型ArrayEnumTupleNested特殊类型IPV4GEOBoolean 和 Nullable[参考文章]: ClickHouse | 数据类型介绍 数据类型说明 …

Docker | docker安装portainer详细步骤

portainer是一款容器管理可视化界面,不想在虚拟中使用命令管理容器的小伙伴,可以选择安装portainer对容器进行管理,查看日志、启动、停止容器等非常方便。 1. 搜索portainer镜像 docker search portainer 2. 拉取portainer镜像 docker pull…

[torch]日志记录之SummaryWriter(持更)

参考博文: 《tensorboardX的简单使用》《详解PyTorch项目使用TensorboardX进行训练可视化》《使用TensorBoard检查监控深度学习模型》 一、使用方法 class SummaryWriter(builtins.object)| SummaryWriter(log_dirNone, comment, purge_stepNone, max_queue10, f…

Springboot扩展点之ApplicationContextInitializer

前言 一提到Spring、Springoboot,很多人马上就会想到依赖注入、控制反转、自动装配、约定大于配置、使开发变得简单等等。但是如果仅仅会使用Springboot、SpringMVC完成一些增删改查,解决一些bug,那么实际上你并没有真的懂Spring、Sp…

每天5分钟机器学习:线性判别分析LDA算法

本文重点 我们前面学习了PCA算法,本文我们将学习一种新的算法,这种算法和PCA非常相似,这个算法叫做线性判别分析,简称为LDA,也称为Fisher线性判别(Fisher Linear Discriminant,FLD),是模式识别的经典算法,在1996年由Belhumeur引入模式识别和人工智能领域。 LDA原理 …

毒鸡汤 | 云服务器部署项目

文章目录前言环境介绍安装PHP安装Apache安装MySQL上传项目访问网站前言 新年的第一篇文章,今年继续努力加油,继续产出高质量的文章。 前面用PHPstudy搭建了【毒鸡汤】项目,但是这样只能自己访问,别人是访问不了的,因此…

Redis 持久化机制

个人博客地址: 文章目录Redis 持久化机制1. 概述2. RDB2.1 手动快照2.2 自动快照3. AOF3.1 AOF机制3.2 AOF文件的重写4. 混合型持久化5. 总结Redis 持久化机制 1. 概述 Redis​为了保证性能,会将所有数据放在内存中,那么万一Redis宕机&…

AcWing 756. 蛇形矩阵

目录问题描述思路与代码1. 个人解法2. 官方题解问题描述 原题链接🔗:756. 蛇形矩阵 输入两个整数 nnn 和 mmm,输出一个 nnn 行 mmm 列的矩阵,将数字 111 到 nmnmnm 按照回字蛇形填充至矩阵中。 具体矩阵形式可参考样例。 输入格…

synchronized底层原理

synchronized是JVM内置锁,基于monitor机制实现,依赖底层操作系统的互斥源语Mutex(互斥量),它是一个重量级锁,性能较低。 当然,JVM内置锁在1.5之后版本做了重大优化,如锁粗化&#xf…

[红明谷CTF 2021]JavaWeb

0x01 好久没打过ctf了,最近也在学Java 就看下java的题吧 WP 进入环境就提示访问 /login ,访问之后 提示的 /json ,试着访问一下 给了 jessid,继续访问 /json 的话 又会跳转至 /login 应该是要传点username password 果然是了&#…

web制作网页

HTML(人的骨架): 标签 1.超文本标记性语言 2.当前最新版HTML5 3.URL统一资源定位器(网址) 4.网站首页名称index.html,default.htm,main.heml 基本结构: 注意:1.标签都是小写 2.标签成对写 3.代码要层次缩进…

JavaScript内存管理

JavaScript 是一个弱类型的、动态语言,在执行一段 JS 代码时,需要经历编译、执行、内存回收阶段。 一、编译阶段 JS 代码执行时,会首先创建全局执行上下文、以及函数执行上下文,上下文的执行顺序按照栈的方式进行调用&#xff0c…

面试题: JVM内存结构

目录目的资源概览JVM内存溢出分类类型1: OutOfMemoryError类型2: StackOverflowError方法区与永久代、元空间之间的关系目的 学习记录, 面试准备 资源 B站的一个讲高频面试题的一个学习视频 概览 线程私有 ① 程序计数器 ② 虚拟机栈线程共享 ① 堆 ② 方法区 JVM内存溢…

RSA密钥协商过程

目录 TSL握手过程 RSA密钥协商握手过程 TLS第一次握手 TLS第二次握手 客户端验证证书 TLS第三次握手 TLS 第四次握手 RSA 算法的缺陷 TSL握手过程 HTTP 由于是明文传输,所谓的明文,就是说客户端与服务端通信的信息都是肉眼可见的,随…

linux常用指令讲解

文章目录 前言一、指令详解总结前言 Linux是一种自由和开放源代码的类UNIX操作系统,该操作系统的内核由林纳斯托瓦兹在1991年首次发布,之后,在加上用户空间的应用程序之后,就成为了Linux操作系统。严格来讲,Linux只是操…

分布式锁的实现

目录分布式锁分布式锁的引出单体锁存在的问题分布式锁的引出分布式锁的设计思路分布式锁的常见应用场景分布式锁方案分布式锁 分布式锁的引出 单体锁存在的问题 在单体应用中,如果我们对共享数据不进行加锁操作,多线程操作共享数据时会出现数据一致性问…

【Kuangbin简单DP】平整数组

4562. 平整数组 - AcWing题库 题意&#xff1a; 思路&#xff1a; 一开始想的是 设DP状态是&#xff1a;dp[i][0/1]表示阶段到 i &#xff0c;然后前面是递增or递减的最小sum的集合 然后我是怎么转移的呢&#xff0c;现在看来感觉挺好笑的&#xff1a; #include <bits/…