人生苦短,不如养狗

一、背景

  在日常业务中或多或少都会碰到这样的需求,需要在指定时间执行某个任务,或者周期性的执行某个任务。类似这种任务,一般可以归结为定时任务。正所谓:哪里有需求,哪里就有创造。为了满足定时任务这样的需求,各种任务调度框架应运而生。Timer、ScheduledThreadPoolExecutor(什么?你没看错,这个也可以做定时任务)、Quartz等等。但随着分布式、微服务的发展,以上的作业调度框架就有点不够看了。主要有以下几个问题:

  • 无法获知任务运行数据:比如任务列表、任务执行状态等;
  • 在不重启应用的情况下,无法动态的对任务参数进行修改(不使用配置中心的情况下);
  • 在不重启应用的情况下,无法操作任务的生命周期:比如启动、终止、重启、删除等操作;
  • 缺少任务失败报警机制
  • 不适用于分布式场景

  下面,闲鱼就根据自己了解到的市面上比较常用的三款分布式任务调度工具进行简单的对比分析。

二、常见分布式调度工具对比

  从几个较大的博客平台以及GitHub上的调研结果来看,比较常用的开源分布式任务调度框架有如下三个:Elastic-Job(当当网)、Saturn(唯品会)、xxl-job(大众点评-个人)。

简单介绍

  • Elastic-Job :Elastic-Job是当当网开源的一个分布式调度解决方案,主要是有两个相互独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成。Elastic-Job-Lite定位为轻量级无中心化解决方案,使用jar包的形式提供分布式任务的协调服务;Elastic-Job-Cloud采用自研Mesos Framework的解决方案,额外提供资源治理、应用分发以及进程隔离等功能。(目前我们使用的就是Elastic-Job-Lite)
  • Saturn :Saturn (任务调度系统)是唯品会开源的一个分布式任务调度平台,取代传统的Linux Cron/Spring Batch Job的方式,做到全域统一配置,统一监控,任务高可用以及分片并发处理。需要注意的是,Saturn是基于Elastic-Job进行二次开发的一个分布式任务调度框架,所以Elastic-Job有的特性,Saturn基本都有。
  • xxl-job : xxl-job是大众点评许雪里于2015年开源的一款分布式任务调度平台。最初,xxl-job是基于Quartz进行扩展开发,使用数据库锁来保证只有一个节点来执行任务。在最新的几个版本中,xxl-job重构了任务调度的主要逻辑,去除了Quartz选择了自研,并自行开发了rpc模块。其设计目的是开发迅速、学习简单、轻量级、易扩展、开箱即用。

  从功能上来看,上述的三个开源框架都满足了日常业务所需。需要注意的是,Elastic-Job-Lite的去中心和服务自治更符合分布式理念,而Staurn和xxl-job则保留了调度中心的概念。还有一个显著的区别是,前两者使用的是Zookeeper作为服务的注册中心,而xxl-job使用的是DB方式来进行任务注册和发现。

特性对比

特性 Elastic-Job Saturn xxl-job
高可用 通过zookeeper的注册与发现,可以动态的添加服务器 基于竞争数据库锁保证只有一个节点执行任务,支持水平扩容。可以手动增加定时任务,启动和暂停任务,有监控 同Elastic-Job
任务分片 可以 可以 可以
管理界面 有运维平台,提供了快捷修改作业设置,作业和服务器维度状态查看,操作作业禁用\启用、停止和删除等生命周期,但停止的任务不可以重启,无报警机制 进行任务创建、编辑,编辑GLUE代码,操作作业禁用\启用、停止和删除等生命周期,可以查看调度日志,任务进度监控,任务依赖,数据加密,邮件报警(提供了钉钉报警API,可以进行二次开发),运行报表,国际化 同Elastic-Job,可以进行任务重启,并提供了一键摘流量、一键dump等Executor运维功能
开发难易程度 简单 简单 简单

  整体来看,三个框架的功能大致相同,一些高级特性方面各有千秋。但从运维平台来看,Elastic-Job和后两者相比要稍差一筹,对于Elastic-Job-Lite而言,运维平台是一个可有可无的组件(目前在我们的项目中就没有使用到)。同时如果想要通过运维平台完全控制作业的分发,就需要使用Elastic-Job-Cloud,Elastic-Job-Lite并无作业分发功能。

使用情况和社区活跃度比较

  这里我们直接看一下github上面的star、issue和contributor等参数情况。

1. Elastic-Job

  Github地址:GitHub - elasticjob/elastic-job-lite: Elastic-Job is a distributed scheduled job framework, based on Quartz and Zookeeper.

2. Saturn

  Github地址:Saturn

3. xxl-job

  Github地址:GitHub - xuxueli/xxl-job: A distributed task scheduling framework.(分布式任务调度平台XXL-JOB)

  从Github的热度和详细度来看,xxl-job可以说是占据首位。相比于elastic-job的长时间不更新,xxl-job的代码维护和社区活跃度还是非常高的,从这一方面来看,xxl-job对于使用者来说还是非常友好的。

三、总结

  以上就是对目前较为常用的三款分布式任务调度工具进行的一个简单的分析对比。当然除了这三个比较热门的工具,还有诸如TBSchedule(淘宝早期基于timer开源的一款作业调度框架)、light-task-schedule等作业调度框架,这里就不一一介绍了,有兴趣的同学可以到github上搜索了解一下。

常见分布式任务调度工具分析相关推荐

  1. java orika_常见Bean映射工具分析评测及Orika介绍

    Bean映射工具选择 工作中,我们经常需要将对象转换成不同的形式以适应不同的api,或者在不同业务层中传输对象而不同分层的对象存在不同的格式,因此我们需要编写映射代码将对象中的属性值从一种类型转换成另 ...

  2. 分布式任务调度框架和微服务的区别

    一.前言 分布式大行其下的时代,让大家彻底的抛弃了传统陈旧的技术框架.几乎每一个技术人都知道和掌握了微服务架构,微服务自然有它的美,但是所以技术框架都必须服务于业务,结合自身业务选取甚至自研适合自身的 ...

  3. 开课吧:常见的数据可视化分析工具有哪些?

    数据分析工作的完成,既需要拥有良好的方式方法,同时还需要借助分析工具,这也是数据分析师需要熟练使用数据分析工具的主要原因,那么常见的数据可视化分析工具有哪些呢? 常见的数据可视化分析工具有哪些? 1. ...

  4. Java常见类库与工具及官网

    Java https://www.oracle.com/java/technologies/ OpenJDK https://openjdk.java.net/ w3c(万维网联盟) https:// ...

  5. 深度解析 | 基于DAG的分布式任务调度平台:Maat

    阿里妹导读:搜索中台建设过程中,单个系统不再能满足复杂业务的需求,更多时候需要多个子系统互相协作,异步地按照指定流程完成一项特定的功能.例如一个应用的上线流程依次需要调用配置同步模块.监控模块.资源更 ...

  6. 深度解析 | 基于DAG的分布式任务调度平台:Maat 1

    背景 什么是Maat? Maat是一个基于开源项目Airflow的流程调度系统,它支持用户自定义地组装流程节点,流程可以在用户指定的时间触发(支持crontab格式),或由用户手动触发. Maat的所 ...

  7. python dag调度系统开发_基于DAG的分布式任务调度平台-Maat

    背景 什么是Maat Maat是一个基于开源项目Airflow的流程调度系统,它支持用户自定义地组装流程节点,流程可以在用户指定的时间触发(支持crontab格式),或由用户手动触发. Maat的所有 ...

  8. 自己动手实现分布式任务调度框架

    前段时间,公司要改造现有的单节点调度为分布式任务调度,然后就研究了目前市面上主流的开源分布式任务调度框架,用起来就一个感觉:麻烦!特别是之前在一个类里写了好多个调度任务,改造起来更加麻烦.我这人又比较 ...

  9. Airflow2.2.5任务调度工具

    Airflow2.2.5任务调度工具 一.Airflow介绍 1.基本概念 Airflow是一个以编程方式创作,可进行调度和监控工作流程的开源平台.基于有向无环图(DAG),airflow可以定义一组 ...

  10. 第二十章 分布式任务调度中心DolphinScheduler架构设计

    1.调度系统概述 1.1.调度系统介绍 含义:在指定时间协调器通过分布式执行器并行执行任务. (1)目标 ​ 分布式环境下处理任务调度,在基于给定的时间点,给定的时间间隔或者给定执行次数自动的执行任务 ...

最新文章

  1. 双圆环环布带系法图解_【图】板鞋系鞋带 板鞋鞋带的系法有几种
  2. Java如何加载类的呢?
  3. Vmware 中Linux中NAT网络异常解决方法
  4. Java Web学习笔记05:状态管理
  5. python 解释器下载_PyPy Python
  6. 消除代码中的 if-else/switch-case
  7. tomcat编码设置
  8. 学计算机的高等数学,高等数学-计算机类
  9. html都是纯文本文件吗,关于“什么是纯文本文件”的思考
  10. 委托、事件 茴字有几种写法
  11. vmware workstation 使用桥接网络 上网
  12. 分治算法 循环比赛日程表
  13. 纪念我的小宝贝——浪浪
  14. 全球程序员收入出炉!北京收入排入全球第十
  15. 微信小程序让凌乱的代码整齐好看紧凑
  16. 定义一个图形类及其子类
  17. 美团点评2019校招笔试题——前端开发方向(附答案)
  18. 查询课程名称为“数学“,且分数低于60的学生姓名和分数(不重点)
  19. CentOS7虚拟机取消屏幕保护
  20. java基础巩固-宇宙第一AiYWM:为了维持生计,虽然咱没机会经历双11、美团、飞猪基础架构组这种型号的技术阅兵场,但是看看人家写的阅兵场日记,先xiao习xiao习一下嘛~整起

热门文章

  1. 连接到手机热点显示无法解析服务器,Win10连接到手机热点却无法上网的解决方法...
  2. 推荐系统领域最新研究进展论文整理
  3. html中放大镜案列,HTML放大镜的一种实现及原理讲解(js)
  4. 共码未来 | 2022 Google 谷歌开发者大会参会现场记
  5. 用类描述计算机CPU的速度和硬件的容量
  6. 计算机d盘可以格式化吗,d盘怎么格式化
  7. 婚姻中,不去表达爱,比不爱更可怕
  8. RK3568平台开发系列讲解(安卓适配篇)Android11旋转屏幕
  9. 5 mysql 凤舞天骄_浅谈5行刺客的技能 凤舞天骄
  10. java 回合制抛物线游戏_回合制抛物线射击游戏《坦克总动》重磅来袭!