一、背景
在日常业务中,经常会遇到需要在特定时间执行任务或周期性执行任务的需求。这些任务通常被归类为定时任务。为了满足这种需求,各种任务调度框架应运而生,如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年开源的一款分布式任务调度平台。最初基于Quartz进行扩展开发,使用数据库锁保证只有一个节点执行任务。在最新版本中,xxl-job重构了任务调度的主要逻辑,去除了Quartz,选择了自研,并开发了rpc模块。其设计目标是开发迅速、学习简单、轻量级、易扩展、开箱即用。从功能上看,上述三个开源框架都能满足日常业务需求。需要注意的是,Elastic-Job-Lite的去中心化和服务自治更符合分布式理念,而Saturn和xxl-job则保留了调度中心的概念。另一个显著区别是,前两者使用Zookeeper作为服务注册中心,而xxl-job使用数据库进行任务注册和发现。
特性对比
| 特性 | 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等参数情况。
Elastic-Job
GitHub地址:GitHub - elasticjob/elastic-job-lite: Elastic-Job is a distributed scheduled job framework, based on Quartz and Zookeeper.[1]
Saturn
GitHub地址:Saturn[2]
xxl-job
GitHub地址:GitHub - xuxueli/xxl-job: A distributed task scheduling framework.(分布式任务调度平台XXL-JOB)[3]
从GitHub的热度和详细度来看,xxl-job无疑占据首位。相比于elastic-job的长时间不更新,xxl-job的代码维护和社区活跃度非常高,从这一方面来看,xxl-job对使用者非常友好。
三、总结
以上就是常见分布式任务调度工具浅析的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号