常见分布式任务调度工具浅析「终于解决」

常见分布式任务调度工具浅析「终于解决」在日常业务中或多或少都会碰到这样的需求,需要在指定时间执行某个任务,或者周期性的执行某个任务。类似这种任务,一般可以归结为定时任务。正所谓:哪里有需求,哪里就有创造。为了满足定时任务这样的需求,各种任务调度框架应运而生。Timer、ScheduledThreadPoolExec…

人生苦短,不如养狗

一、背景

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

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上搜索了解一下。

本文使用 mdnice 排版

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/12911.html

(0)

相关推荐

  • Python输出实现标题

    Python输出实现标题Python是一门流行的编程语言,它有着强大的输出功能,可以轻松地输出各种格式的文本。其中,Python输出实现h1/h1标题是一项非常基础和必要的功能,本文将从多个方面对此进行详细的阐述,包括功能实现和代码示例等。

    2024-09-16
    24
  • mysqldump数据库备份_mysql备份整个数据库

    mysqldump数据库备份_mysql备份整个数据库mysqldump -h主机IP -u用户名 -p密码 -w "字段名>=字段值" 数据库名 表名 > 文件路径/文件名 注意: "字段名>=字段值&q

    2023-02-02
    132
  • 成功安装mysql后,为何服务管理器里找不到MYSQL服务名【转】

    成功安装mysql后,为何服务管理器里找不到MYSQL服务名【转】解决方案:(参考以下命令) 1、打开cmd,切换到mysql的bin目录下 2、 D:Program FilesMySQL5.1in mysqld.exe install Service su

    2022-12-18
    147
  • scriptable脚本分享_优化源码

    scriptable脚本分享_优化源码代码笔记 为一系列的文章,从一个python ,django 完整项目的所用到的环境和工具讲起,随时供自己备查,进阶全栈工程师的狂暴之路。

    2022-12-14
    159
  • 用IDEA创建Python项目

    用IDEA创建Python项目Python是一种高级语言,常被用作脚本语言和Web开发。随着Python语言的广泛应用,越来越多的开发者开始学习Python语言。在使用Python进行开发时,很多人习惯于使用某些IDE,比如:PyCharm、Visual Studio Code等等。而本文将从另一个角度,介绍如何使用IntelliJ IDEA开发Python项目。

    2024-08-15
    29
  • T-SQL编程

    T-SQL编程T-SQL(Transact-SQL)是一种 SQL 扩展语言,由微软实现,运行在 Ms SQL Server 平台上。T-SQL 主要用来和SQL Server 交流,而查询语句则主要用来告诉服务器

    2023-02-22
    147
  • 如何安装wxPython?

    如何安装wxPython?wxPython是Python语言的GUI编程框架,它的目的是让Python程序员能够使用GUI工具包,把图形用户界面加到他们的应用程序中。

    2024-09-13
    23
  • threadlocal详解_threadlocal详解

    threadlocal详解_threadlocal详解1、每个线程都有一个 ThreadLocalMap 对象,每个 ThreadLocalMap 里面都包含了一个 Entry[] 数组,而 Entry 是由 key(threadLocal)和 value(数据)组成。 2、Entry extends WeakReference,…

    2023-07-25
    113

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注