一、背景
在日常业务中,经常会遇到需要在特定时间执行任务或周期性执行任务的需求。这些任务通常被归类为定时任务。为了满足这种需求,各种任务调度框架应运而生,如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使用数据库进行任务注册和发现。
特性对比
高可用通过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对使用者非常友好。
三、总结
以上就是常见分布式任务调度工具浅析的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/24658.html
微信扫一扫
支付宝扫一扫