人生苦短,不如养狗
一、背景
在日常业务中或多或少都会碰到这样的需求,需要在指定时间执行某个任务,或者周期性的执行某个任务。类似这种任务,一般可以归结为定时任务。正所谓:哪里有需求,哪里就有创造。为了满足定时任务这样的需求,各种任务调度框架应运而生。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 | xxl-job | Saturn |
---|---|---|---|
高可用 | 通过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.[1]
2. Saturn
Github地址:Saturn[2]
3. xxl-job
Github地址:GitHub - xuxueli/xxl-job: A distributed task scheduling framework.(分布式任务调度平台XXL-JOB)[3]
从Github的热度和详细度来看,xxl-job可以说是占据首位。相比于elastic-job的长时间不更新,xxl-job的代码维护和社区活跃度还是非常高的,从这一方面来看,xxl-job对于使用者来说还是非常友好的。
三、总结
以上就是对目前较为常用的三款分布式任务调度工具进行的一个简单的分析对比。当然除了这三个比较热门的工具,还有诸如TBSchedule(淘宝早期基于timer开源的一款作业调度框架)、light-task-schedule等作业调度框架,这里就不一一介绍了,有兴趣的同学可以到github上搜索了解一下。
参考资料
[1]Elastic-Job: https://github.com/elasticjob/elastic-job-lite
[2]Saturn: https://github.com/vipshop/Saturn
[3]xxl-job: https://github.com/xuxueli/xxl-job