乐趣区

关于java:Java定时任务框架对比转载

汇总状况

Quzrzt
LTS
Elastic-Job
xxl-Job
saturn
opencorn
antares

1. 什么是集群,分布式定时工作

把扩散的,可靠性差的打算工作纳入对立的平台,并实现集群治理调度和分布式部署的一种定时工作的治理形式。叫做分布式定时工作。

2. 常见开源计划

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

2.1 elastic-job

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

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

Elastic-Job-Cloud 应用 Mesos + Docker(TBD)的解决方案,额定提供资源治理、利用散发以及过程隔离等服务 亮点

  • 基于 quartz 定时工作框架为根底的,因而具备 quartz 的大部分性能
  • 应用 zookeeper 做协调,调度核心,更加轻量级
  • 反对工作的分片
  • 反对弹性扩容,能够程度扩大,当工作再次运行时,会查看以后的服务器数量,从新分片,分片完结之后才会继续执行工作
  • 生效转移,容错解决,当一台调度服务器宕机或者跟 zookeeper 断开连接之后,会立刻进行作业,而后再去寻找其余闲暇的调度服务器,来运行残余的工作
  • 提供运维界面,能够治理作业和注册核心。

官网亮点阐明:

  • 分布式

重写 Quartz 基于数据库的分布式性能,改用 Zookeeper 实现注册核心。

  • 并行调度

采纳工作分片形式实现。将一个工作拆分为 n 个独立的工作项,由分布式的服务器并行执行各自调配到的分片项。

  • 弹性扩容缩容

将工作拆分为 n 个工作项后,各个服务器别离执行各自调配到的工作项。一旦有新的服务器退出集群,或现有服务器下线,elastic-job 将在保留本次工作执行不变的状况下,下次工作开始前触发任 务重分片。

  • 集中管理

采纳基于 Zookeeper 的注册核心,集中管理和协调分布式作业的状态,调配和监听。内部零碎可间接依据 Zookeeper 的数据管理和 - 监控 elastic-job。

  • 定制化流程型工作

作业可分为简略和数据流解决两种模式,数据流又分为高吞吐解决模式和程序性解决模式,其中高吞吐解决模式能够开启足够多的线程疾速的解决数据,而程序性解决模式将每个分片项调配到一个 独立线程,用于保障同一分片的程序性。

  • 生效转移

弹性扩容缩容在下次作业运行前重分片,但本次作业执行的过程中,下线的服务器所调配的作业将不会从新被调配。生效转移性能能够在本次作业运行中用闲暇服务器抓取孤儿作业分片执行。同样 生效转移性能也会就义局部性能。

  • 运行时状态收集

监控作业运行时状态,统计最近一段时间解决的数据胜利和失败数量,记录作业上次运行开始工夫,完结工夫和下次运行工夫。

  • 作业进行,复原和禁用

用于操作作业启停,并能够禁止某作业运行(上线时罕用)。

  • Spring 命名空间反对

elastic-job 能够不依赖于 spring 间接运行,然而也提供了自定义的命名空间不便与 spring 集成。

  • 运维平台

提供 web 控制台用于治理作业和注册核心。

  • 稳定性

在服务器无稳定的状况下,并不会从新分片;即便服务器有稳定,下次分片的后果也会依据服务器 IP 和作业名称哈希值算出稳固的分片程序,尽量不做大的变动。

  • 高性能

同一服务器的批量数据处理采纳主动切割并多线程并行处理。

  • 灵活性

所有在性能和性能之间的衡量,都可通过配置开启 / 敞开。如:elastic-job 会将作业运行状态的必要信息更新到注册核心。如果作业执行频度很高,会造成大量 Zookeeper 写操作,而分布式 Zookeeper 同步数据可能引起网络风暴。因而为了思考性能问题,能够就义一些性能,而换取性能的晋升。

  • 幂等性

elastic-job 可就义局部性能用以保障同一分片项不会同时在两个服务器上运行。

  • 容错性

作业服务器与 Zookeeper 服务器通信失败则立刻进行作业运行,避免作业注册核心将生效的分片分项配给其余作业服务器,而以后作业服务器仍在执行工作,导致反复执行。

有余:

  • 异构语言不反对
  • 目前采纳的无核心设计,难于反对多语言,前面须要思考调度核心的可行性。
  • 监控体系有待进步,目前只能通过注册核心做简略的存活和数据积压监控,将来须要做的监控局部有:

减少可监控维度,如作业运行工夫等。
基于 JMX 的外部状态监控。
基于历史的全量数据监控,将所有监控数据通过 flume 等模式发到内部监控核心,提供实时剖析性能。

  • 不能反对多种注册核心。
  • 须要减少工作工作流,如工作依赖,初始化工作,清理工作等。
  • 生效转移性能的实时性有待晋升。
  • 短少更多作业类型反对,如文件,MQ 等类型作业的反对。
  • 短少更多分片策略反对。

elastic-job 联合了 quartz 十分优良的工夫调度性能,并且利用 ZooKeeper 实现了灵便的分片策略。除此之外,还退出了大量实用的监控和治理性能,以及其开源社区沉闷、文档齐全、代码优雅等优 点,是分布式任务调度框架的举荐抉择。
elastic-job 学习(网易乐得技术团队,具体阐明)

零碎架构

控制台界面

2.2 xxl-job :

这个框架的搭建的确非常简单,只须要批改配置根本就能够运行了
由集体开源的一个轻量级分布式任务调度框架,次要分为 调度核心和执行器两局部,调度核心在启动初始化的时候,会默认生成执行器的 RPC 代理
对象(http 协定调用),执行器我的项目启动之后,调度核心在触发定时器之后通过 jobHandle 来调用执行器我的项目外面的代码,外围性能和 elastic-job 差不多,同时技术文档比较完善。

长处:

  • 1、简略:反对通过 Web 页面对工作进行 CRUD 操作,操作简略,一分钟上手;
  • 2、动静:反对动静批改工作状态、暂停 / 复原工作,以及终止运行中工作,即时失效;
  • 3、调度核心 HA(核心式):调度采纳核心式设计,“调度核心”基于集群 Quartz 实现并反对集群部署,可保障调度核心 HA;
  • 4、执行器 HA(分布式):工作分布式执行,工作”执行器”反对集群部署,可保障工作执行 HA;
  • 5、注册核心: 执行器会周期性主动注册工作, 调度核心将会主动发现注册的工作并触发执行。同时,也反对手动录入执行器地址;
  • 6、弹性扩容缩容:一旦有新执行器机器上线或者下线,下次调度时将会重新分配工作;
  • 7、路由策略:执行器集群部署时提供丰盛的路由策略,包含:第一个、最初一个、轮询、随机、一致性 HASH、最不常常应用、最近最久未应用、故障转移、繁忙转移等;
  • 8、故障转移:工作路由策略抉择”故障转移”状况下,如果执行器集群中某一台机器故障,将会主动 Failover 切换到一台失常的执行器发送调度申请。
  • 9、阻塞解决策略:调度过于密集执行器来不及解决时的解决策略,策略包含:单机串行(默认)、抛弃后续调度、笼罩之前调度;
  • 10、工作超时管制:反对自定义工作超时工夫,工作运行超时将会被动中断工作;
  • 11、工作失败重试:反对自定义工作失败重试次数,当工作失败时将会依照预设的失败重试次数被动进行重试;
  • 12、失败解决策略;调度失败时的解决策略,默认提供失败告警、失败重试等策略;
  • 13、分片播送工作:执行器集群部署时,工作路由策略抉择”分片播送”状况下,一次任务调度将会播送触发集群中所有执行器执行一次工作,可依据分片参数开发分片工作;
  • 14、动静分片:分片播送工作以执行器为维度进行分片,反对动静扩容执行器集群从而动静减少分片数量,协同进行业务解决;在进行大数据量业务操作时可显著晋升工作解决能力和速度。
  • 15、事件触发:除了”Cron 形式”和”工作依赖形式”触发工作执行之外,反对基于事件的触发工作形式。调度核心提供触发工作单次执行的 API 服务,可依据业务事件灵便触发。
  • 16、工作进度监控:反对实时监控工作进度;
  • 17、Rolling 实时日志:反对在线查看调度后果,并且反对以 Rolling 形式实时查看执行器输入的残缺的执行日志;
  • 18、GLUE:提供 Web IDE,反对在线开发工作逻辑代码,动静公布,实时编译失效,省略部署上线的过程。反对 30 个版本的历史版本回溯。
  • 19、脚本工作:反对以 GLUE 模式开发和运行脚本工作,包含 Shell、Python、NodeJS 等类型脚本;
  • 20、工作依赖:反对配置子工作依赖,当父工作执行完结且执行胜利后将会被动触发一次子工作的执行, 多个子工作用逗号分隔;
  • 21、一致性:“调度核心”通过 DB 锁保障集群散布式调度的一致性, 一次任务调度只会触发一次执行;
  • 22、自定义工作参数:反对在线配置调度工作入参,即时失效;
  • 23、调度线程池:调度零碎多线程触发调度运行,确保调度准确执行,不被梗塞;
  • 24、数据加密:调度核心和执行器之间的通信进行数据加密,晋升调度信息安全性;
  • 25、邮件报警:工作失败时反对邮件报警,反对配置多邮件地址群发报警邮件;
  • 26、推送 maven 地方仓库: 将会把最新稳定版推送到 maven 地方仓库, 不便用户接入和应用;
  • 27、运行报表:反对实时查看运行数据,如工作数量、调度次数、执行器数量等;以及调度报表,如调度日期分布图,调度胜利分布图等;
  • 28、全异步:零碎底层实现全副异步化,针对密集调度进行流量削峰,实践上反对任意时长工作的运行;
  • 29、国际化:调度核心反对国际化设置,提供中文、英文两种可选语言,默认为中文;

其余粗略认为:

    1. 能够手动在线通过 GLUE 编写 Java 代码,而后增加定时工作。
    1. 能够自定义管制 corn 表达式。
    1. 通过控制台能够间接执行,暂停,编辑定时工作,查看工作日志等等。

系统控制界面
零碎架构图:

2.3 LTS
LTS,light-task-scheduler,是一款分布式任务调度框架, 反对实时工作、定时工作和 Cron 工作。有较好的伸缩性和扩展性,提供对 Spring 的反对(包含 Xml 和注解),提供业务日志记录器。反对节点监控、工作执行监、JVM 监控,反对动静提交、更改、进行工作。

依赖环境:

jdk 1.6 +
maven 3.0.5 +
zookeeper/redis
MySQL 5.6 + / mongoDB

治理界面
架构图
流程图

2.4 quartz

quartz 的常见集群计划如下,通过在数据库中配置定时器信息,以数据库乐观锁的形式达到同一个工作始终只有一个节点在运行,

长处:

  • 保障节点高可用(HA),如果某一个几点挂了,其余节 e 点能够顶上

毛病:

  • 同一个工作只能有一个节点运行,其余节点将不执行工作,性能低,资源节约
  • 当碰到大量短工作时,各个节点频繁的竞争数据库锁,节点越多这种状况越重大。性能会很低下
  • quartz 的分布式仅解决了集群高可用的问题,并没有解决工作分片的问题,不能实现程度扩大

Quartz 作为开源作业调度中的佼佼者,是作业调度的首选。然而集群环境中 Quartz 采纳 API 的形式对工作进行治理,从而能够防止上述问题,然而同样存在以下问题:

  • 问题一:调用 API 的的形式操作工作,不人性化;
  • 问题二:须要长久化业务 QuartzJobBean 到底层数据表中,零碎侵入性相当严重。
  • 问题三:调度逻辑和 QuartzJobBean 耦合在同一个我的项目中,这将导致一个问题,在调度工作数量逐步增多,同时调度工作逻辑逐步减轻的状况加,此时调度零碎的性能将大大受限于业务;
  • 问题四:quartz 底层以“抢占式”获取 DB 锁并由抢占胜利节点负责运行工作,会导致节点负载迥异十分大;而 XXL-JOB 通过执行器实现“协同调配式”运行工作,充分发挥集群劣势,负载各节点平衡。

服务架构

2.5 Saturn :

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

运行环境: Linux(shell 作业仅反对 linux,java/msg 作业反对 linux 和 windows)

Java 1.7 +

Maven 3.0.4 +

个性:

  • 反对基于事件和工夫触发
  • 人工指定资源分配策略 + 主动均匀策略联合
  • 工作开发语言不受限制。反对 Shell(PHP, Bash, python…)作业以及 Java 作业
  • 反对 1 机 1 分片的本地化模式任务调度
  • 工作按分片并行执行
  • 框架和业务代码隔离,零依赖
  • 分片的调度按负荷平衡散布
  • 可视化治理
  • 反对秒级任务触发
  • 可视化监控和报警
  • 反对容器化 (Docker) 部署

亮点:

  • 反对多语言开发 python、Go、Shell、Java、Php。
  • 治理控制台和数据统计分析更加欠缺

毛病:

  • 文档较少,应用的公司比拟少

2.6 opencron

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

毛病:

  • 仅反对 kill 工作,现场执行,查问工作运行状态 等,次要性能是着重于工作的批改和查问上。
  • 不能动静的增加工作以及工作分片。

2.7 antares

长处:

  • 一个工作仅会被服务器集群中的某个节点调度,调度机制基于成熟的 quartz
  • 并行执行,用户可通过对工作预分片,无效晋升工作执行效率
  • 生效转移
  • 弹性扩容,在工作运行时,能够动静的加机器
  • 敌对的治理控制台

毛病:

  • 不能动静的增加工作,仅能在控制台对工作进行触发,暂停,删除等操作
  • 文档不多,开源社区不够沉闷

零碎架构图如下

4. 比拟

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

框架 quartz elastic-job-lite xxl-job LTS Saturn antares opencron
依赖 mysql,jdk1.6+ jdk1.7+, zookeeper 3.4.6+ ,maven3.0.4+ mysql5.6+,Servlet 3.1 ,jdk1.7+, maven3.0+,Tomcat8 + jdk1.6+, maven3.0+ zookeeper,mysql5.6+ jdk1.7+,ZK3.4.6+,mysql5.6+ jdk 1.7+ , redis , zookeeper jdk1.7+, Tomcat8.0+
HA 多节点部署,通过竞争数据库锁来保障只有一个节点执行工作 通过 zookeeper 的注册与发现,能够动静的增加服务器。 反对程度扩容。能够手动减少定时工作,启动和暂停工作。有监控。 集群部署, 能够动静的增加服务器。能够手动减少定时工作,启动和暂停工作。有监控。 集群部署,能够手动启动,暂停工作。监控,报警。 集群部署, 集群部署
工作分片 反对 反对 反对 反对 反对
文档欠缺 欠缺 欠缺 欠缺 欠缺 文档略少 文档略少 文档略少
治理界面 反对 反对 反对 反对 反对 反对
难易水平 简略 简略 简略 较简单 较简单 个别 个别
高级性能 弹性扩容,多种作业模式,生效转移,运行状态收集,多线程解决数据,幂等性,容错解决,spring 命名空间反对 弹性扩容,分片播送,故障转移,Rolling 实时日志,GLUE(反对在线编辑代码,免公布), 工作进度监控,工作依赖,数据加密,邮件报警,运行报表,国际化 反对 spring,spring boot,业务日志记录器,SPI 扩大反对,故障转移,节点监控,多样化工作执行后果反对,FailStore 容错,动静扩容。 反对基于事件和工夫触发,人工指定资源分配 + 主动调配,不受语言限度,工作分片,框架和业务代码拆散,零依赖,反对可视化治理,反对秒级任务触发,反对监控和报警,反对容器化(Docker)部署。 工作分片,生效转移,弹性扩容, 工夫规定反对 quartz 和 crontab,kill 工作,现场执行,查问工作运行状态
应用企业 大众化产品,对散布式调度要求不高的公司大面积应用 36 氪,当当网,国美,金柚网,联想,唯品会,亚信,安全,猪八戒 公众点评,运满满,优信二手车,拍拍贷 唯品会

转载自: https://wsk1103.github.io/201…

退出移动版