分布式调度任务系统调研及选型

目前的场景是这样的,我们组内现在有很多旧或新的定时任务都是在直接在某些服务器上跑。如果遇到要下线某台服务器,要先检查一下这个服务器上是否还存在定时任务脚本。通常情况下,即使找到该运行的定时任务脚本,也不知道它是用来做的或者是否能迁移到其他机器上。另外,如果某台机器挂了,上面的定时任务脚本也会挂了,不能自动切换到其他机器上。

由于存在着这种情况,我们就想着把这些定时任务脚本管理起来,并且需要具备高可用。这就需要一个分布式调度任务系统。🧐

概述

关于定时执行任务的工具或框架系统有很多,一般情况下针对不同的应用场景可以选择适合该场景下工具或框架。例如:如果不想引入其他语言,只使用shell来执行的,可以使用 linux Crontab 来执;如果是基于Spring 想着简单实现一个定时任务,可以使用@Scheduled注解。如果按照是否为单独的系统来分可以分为两类:1. 系统或框架自带的定时执行方法或工具。2. 单独作为一个服务的调度任务系统。

系统或框架自带的定时执行方法或工具

Linux Crontab

只能单机执行与linux机器固定绑定,可以通过cron 表达式定时执行shell脚本。简单易使用,不好后期维护,只能执行shell脚本。

Java 原生的定时器Timer

优点:简单,不用引入其他框架。

缺点:

  1. Timer在执行所有定时任务时只会创建一个线程,如果某个任务的执行时间过长,那么将破坏其他TimerTask的定时精确性
  2. Timer的另一个问题是,如果TimerTask抛出了一个未检查的异常,那么Timer线程不会捕获异常,此时会终止定时线程,并且不会恢复。
    参考:java定时器之Timer使用与原理分析

Spring 的 @Scheduled注解

一般集成于项目中,小任务很方便,不能分布式。注意,如果使用了,在集群部署的时候需要使用分布式锁来限制

单独作为一个服务的调度任务系统

这部分主要的调度任务系统都是开源系统,并且大部分是基于Java的Quratz框架来封装的

XXL-JOB

在这里插入图片描述

XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。

(美团公司个人开放)“调度中心”基于集群Quartz实现,提供官方docker镜像,作业与语言无关。社区较活跃,一直有维护状态。 较多公司使用。

elastic-job

Elastic-job

ElasticJob 是面向互联网生态和海量任务的分布式调度解决方案,由两个相互独立的子项目 ElasticJob-Lite 和 ElasticJob-Cloud 组成。 它通过弹性调度、资源管控、以及作业治理的功能,打造一个适用于互联网场景的分布式调度解决方案,并通过开放的架构设计,提供多元化的作业生态。 它的各个产品使用统一的作业 API,开发者仅需一次开发,即可随意部署。

当当开源的,使用 Zookeeper 实现分布式分布式部署。2019年10月前停止维护过一段时间,后面才重新维护。并且在2020 年 5 月 28 日成为 Apache ShardingSphere 的子项目未来前景应该很不错。

Saturn

Saturn

Saturn (任务调度系统)是唯品会Venus体系的一个组成部分,负责分布式的定时任务的调度,取代传统的Linux Cron/Spring Batch Job的方式,做到全域统一配置,统一监控,任务高可用以及分片并发处理。Saturn基于当当Elastic Job代码基础上自主研发的任务调度系统。

唯品会开源的,基于elastic-job。支持多种语言作业,语言无关(Java/Go/C++/PHP/Python/Ruby/shell)。社区活跃度一般,小部分公司使用。

基于Quartz自己开发

开源的有个好处就是大部分都是开箱即用。但是通常来说,如果直接使用开源的系统,后期改造起来都是比较麻烦,而且如果有什么问题,排查起来也比较麻烦,毕竟不是自己的系统。基于我们要求的调度任务系统,并不需要太多功能,所以我们计划自己基于Quartz框架来开发调度任务系统。

原生quartz任务的缺点

  1. 只能在单个服务器上运行,或者在多个服务器上集群运行,在单个数据库的情况下,不能指定不同服务器运行不同任务。

为了解决原生Quartz的确定,我们基于Quartz和GRPC框架来开发任务调度系统,具体方案如下:

  1. 利用一台服务器部署quartz服务和作为服务注册中心(rpc调用中心)。
  2. 通过创建不同的cron定时任务,通过传入服务器地址,要执行的方法,定时远程rpc调用不同服务器上的方法。
  3. 定义每个master和slaver都定义http请求调度,命令行请求调度和邮箱发送请求调度,当不需要指定执行机器时,则通过随机找一个slaver去执行。

初版项目地址:https://github.com/KANLON/job-scheduling (这个还不太完善,目前执行还不支持执行的高可用,后面需要修改执行任务的机器为一个列表,遍历该列表执行)

总结

如果没有时间或资源搭一套调度任务系统,可以使用系统或框架自带的定时执行方法或工具来简单使用。如果需要统一管理,方便后期维护建议首先使用开源系统的。开源的分布式调度任务系统中建议使用xxl-job,该开源系统社区活跃度高,使用的公司数量相对较多,而且一直有在维护。

以下是我整理的思维导图:


分布式调度任务系统调研及选型思维导图

关注公众号“CrudBoys” 回复 学习 可以获取到获取到我精心准备的编程资料

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,099评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,473评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,229评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,570评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,427评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,335评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,737评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,392评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,693评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,730评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,512评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,349评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,750评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,017评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,290评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,706评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,904评论 2 335

推荐阅读更多精彩内容