分布式定时任务调度系统技术选型

标签: 分布 任务 调度 | 发表时间:2020-04-12 01:21 | 作者:老马
出处:http://weekly.dockone.io

什么是分布式定时任务

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

常见开源方案

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断开连接之后,会立即停止作业,然后再去寻找其他空闲的调度服务器,来运行剩余的任务
  • 提供运维界面,可以管理作业和注册中心。


Elastic-Job结合了Quartz非常优秀的时间调度功能,并且利用ZooKeeper实现了灵活的分片策略。除此之外,还加入了大量实用的监控和管理功能,以及其开源社区活跃、文档齐全、代码优雅等优点,是分布式任务调度框架的推荐选择。

由于Elastic-Job-Lite不支持动态添加作业,此处仅贴上Elastic-Job-Cloud架构图:

XXL-Job

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

对象(http协议调用),执行器项目启动之后,调度中心在触发定时器之后通过JobHandle来调用执行器项目里面的代码,核心功能和Elastic-Job差不多,同时技术文档比较完善。

系统架构图:

Quartz

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

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


缺点:
  • 同一个任务只能有一个节点运行,其他节点将不执行任务,性能低,资源浪费。
  • 当碰到大量短任务时,各个节点频繁的竞争数据库锁,节点越多这种情况越严重,性能会很低下。
  • Quartz的分布式仅解决了集群高可用的问题,并没有解决任务分片的问题,不能实现水平扩展。



Saturn

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

亮点:
  • 支持多语言开发:Python、Go、Shell、Java、PHP。
  • 管理控制台和数据统计分析更加完善。


缺点:
  • 技术文档较少,该框架是2016年由唯品会的研发团队基于Elastic-Job开发而来的。


Opencron

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

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

Antares

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


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


系统架构图如下:

比较

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

原文链接: https://blog.csdn.net/guyue35/ ... 83408

相关 [分布 任务 调度] 推荐:

LTS 轻量级分布式任务调度框架(Light Task Schedule)

- - Java - 编程语言 - ITeye博客
LTS是一个轻量级分布式任务调度框架,参考hadoop的部分思想. 有三种角色, JobClient, JobTracker, TaskTracker. 各个节点都是无状态的,可以部署多个,来实现负载均衡,实现更大的负载量, 并且框架具有很好的容错能力. 采用Zookeeper暴露节点信息,master选举.

分布式任务调度组件 Uncode-Schedule

- - 企业架构 - ITeye博客
Uncode-Schedule 是基于 zookeeper+quartz/spring task 的分布式任务调度组件,非常小巧,无需任何修改就可以使quartz/spring task具备分布式特性,确保所有任务在集群中不重复,不遗漏的执行. 基于zookeeper+spring task的分布任务调度系统.

LTS 分布式任务调度 1.6.9 发布

- - 开源中国社区最新新闻
LTS(light-task-scheduler)主要用于解决分布式任务调度问题,支持实时任务,定时任务和Cron任务. 有较好的伸缩性,扩展性,健壮稳定性而被多家公司使用. 支持分布式,解决多点故障,支持动态扩容,容错重试等. Spring扩展支持,Spring Quartz Cron任务的无缝接入支持.

GitHub - ihaolin/antares: 分布式任务调度平台(Distributed Job Schedule Platform)

- -
分布式任务调度平台(Distributed Job Schedule Platform). 基于Quartz的分布式调度. 一个任务仅会被服务器集群中的某个节点调度,调度机制基于成熟的 Quartz,antares内部会重写执行逻辑;. 用户可通过对任务预分片,有效提升任务执行效率;. 客户端实效转移:当某个客户端实例在执行任务中宕机时,其正在执行的分片将重新由其他客户端实例执行;.

分布式定时任务调度系统技术选型

- - DockOne.io
把分散的,可靠性差的计划任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式,叫做分布式定时任务. Elastic-Job是由当当网基于Quartz二次开发之后的分布式调度解决方案,由两个相对独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成.

Spark 任务调度

- - IT瘾-dev
 Spark的核心是基于RDD来实现的,Spark任务调度就是如何组织任务去处理RDD中每个分区的数据,根据RDD的依赖关系构建DAG,基于DAG划分Stage,然后将每个Stage中的任务(Task)分发到指定的节点去运行得到最终的结果. Application:用户编写的Spark应用程序,由一个或多个Job组成.

使用Quartz和Obsidian来调度任务

- - Java译站
在介绍使用到的Quartz和Obsidian的API之前,首先我得声明一下,一般来说使用API并不是调度任务的最佳方式. Quartz提供了一个通过XML来配置作业的机制,而Obsidian则为你提供了一套完整的管理和监控的WEB应用. 然而,有一些使用场景还是强烈推荐使用API的,我们来看一下吧.

MapReduce调度与执行原理之任务调度

- - CSDN博客云计算推荐文章
前言:本文旨在理清在Hadoop中一个MapReduce作业(Job)在提交到框架后的整个生命周期过程,权作总结和日后参考,如有问题,请不吝赐教. 本文不涉及Hadoop的架构设计,如有兴趣请参考相关书籍和文献. 在梳理过程中,我对一些感兴趣的源码也会逐行研究学习,以期强化基础. 作者:Jaytalent.

Java Spring注解任务调度并实现AOP监控任务执行情况

- - 极客521 | 极客521
本文讲的是通过Spring注解的方式实现任务调度. 只要引入了spring-context包就能够在项目中使用注解方式的任务调度. 需要在Spring配置文件中加入task的schema. 然后在代码中就可以直接用了,要定时执行的方法必须是void的,并且没有任何参数的. cron表达式请自行问百度,下面只列出几个从网上找的例子.

几种任务调度的 Java 实现方法与比较

- wangyegang - IBM developerWorks 中国 : 文档库
综观目前的 Web 应用,多数应用都具备任务调度的功能. 本文由浅入深介绍了几种任务调度的 Java 实现方法,包括 Timer,Scheduler, Quartz 以及 JCron Tab,并对其优缺点进行比较,目的在于给需要开发任务调度的程序员提供有价值的参考.