前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >常见分布式任务调度工具浅析

常见分布式任务调度工具浅析

作者头像
闲宇非鱼
发布2022-02-08 11:25:45
1.5K0
发布2022-02-08 11:25:45
举报

人生苦短,不如养狗

一、背景

  在日常业务中或多或少都会碰到这样的需求,需要在指定时间执行某个任务,或者周期性的执行某个任务。类似这种任务,一般可以归结为定时任务。正所谓:哪里有需求,哪里就有创造。为了满足定时任务这样的需求,各种任务调度框架应运而生。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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Brucebat的伪技术鱼塘 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、背景
  • 二、常见分布式调度工具对比
    • 简单介绍
      • 特性对比
        • 使用情况和社区活跃度比较
          • 1. Elastic-Job
          • 2. Saturn
          • 3. xxl-job
      • 三、总结
        • 参考资料
        相关产品与服务
        微服务引擎 TSE
        微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档