开源分布式任务调度工具,和你一起记住生命中每一个重要的时刻

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开源分布式任务调度工具,和你一起记住生命中每一个重要的时刻相关的知识,希望对你有一定的参考价值。

参考技术A

⏳ SandGlass 是一款为 java 设计的分布式任务调度工具。

定时任务是业务需求中非常常见的

比如:

(1)每天给自己爱人发晚安

什么你还是单身?,那看完本篇文章就有了。

(2)每个月通知自己要还信用卡

可能还有其他的手机费、生活费之类的,反正又是一个没钱的一个月。

(3)每个月 14 日都是情人节

这个扯远了……

有了场景,那我们如何实现呢?

java 已有的实现任务调度的主流工具如下:

为什么需要重新实现一个任务调度框架呢?

老马的日常开发中,简单的调度任务会使用 jdk 中的 ScheduledExecutor 实现。

当涉及到 cron 表达式时,一般会使用 quartz,毕竟老牌调度框架,功能非常完善。

但是对比 spring schedule,quartz 的使用就显得有些麻烦,需要开发者指定较多的配置。

那直接使用 spring schedule 不就好了吗?

spring schedule 的缺点也很明显,不支持数据的持久化,不支持分布式调度。

那直接引入一个分布式任务调度系统呢?

有时候就显得杀鸡用牛刀,而且维护成本比较高。

读到这里,肯定会有聪明的小伙伴们发问了:“难道就不能写一个可以独立于 spring 使用,又可以整合 spring 使用,可以单机调度,又可以分布式调度的任务调度工具吗?”

是的, sandglass 就是一个渐进式,满足上面各种应用场景的任务调度工具

根据 cron 表达式,5s 执行一次任务。

通过 cron 表达式创建 trigger,可以通过方法:

通过指定时间间隔创建 trigger,使用方法:

SandGlass 也支持引导类自定义,默认配置等价于:

所有实现都是基于接口,用于可以根据实际业务进行调整。

可配置的属性列表如下:

类似于 spring 的任务调度,我们可以通过注解指定方法。

@PeriodSchedule 用于指定 period 执行的任务, @CronSchedule 用于指定 cron 表达式对应的任务。

用于指定基于 period 执行的任务方法。

可配置属性列表如下:

用于指定基于 cron 表达式 执行的任务方法。

可配置属性列表如下:

直接指定 @EnableSandGlass 注解即可,无需额外配置。

@EnableSandGlass 允许用户进行自定义。

可配置的属性列表如下:

默认的策略和 SandglassBs 引导类保持一致。

自定义方式:实现对应接口,在注解中对应对应的 bean 名称即可。

说明:下面 3 个属性和业务无关,只和执行的环境的配置有关,所以不支持注解指定。可以通过配置自定义。

其他什么都不需要,就可以类似 spring 整合一样使用定时任务了。

同 spring 整合

sandglass 共计 5 个子模块:

采用渐进式的 MVP 设计理念,基本可以满足日常开发中的常见场景。

当然,分布式的任务调度服务会复杂的多,将会以 sandglass 为基础进行拓展实现。

常言道,独木不成林。

sandglass 作为一个任务调度核心实现,只是分布式任务调度的基石。

若要实现一个完整的分布式调度系统,还需要如下的工具支撑。

目前经历几十个迭代和几十个不眠的夜晚,基本功能实现完成,后续考虑陆续开源。

为了便于大家共同学习,开源地址如下:

为了吃瓜通宵7天写了一个网站

开源分布式任务调度工具,和你一起记住生命中每一个重要的时刻

分布式工作流任务调度系统Easy Scheduler正式开源

分布式工作流任务调度系统Easy Scheduler正式开源

技术图片

1、背景

在多位技术小伙伴的努力下,经过近2年的研发迭代、内部业务剥离及重构,也经历一批种子用户试用一段时间后,EasyScheduler终于迎来了第一个正式开源发布版本 -- 1.0.0
相信做过数据处理的伙伴们对开源的调度系统如oozie、azkaban、airflow应该都不陌生,在使用这些调度系统中可能会有这样的体验:比如配置工作流任务不能可视化、任务的运行状态不能实时在线查看、
任务运行时不能暂停、不能支持参数传递、不能补数、不能多租户使用、调度系统不高可用等等问题所烦扰过。Easy Scheduler正是在这种背景下应运而生,其目标就是为使调度更加easy,更可以从其中文名“易调度”看出我们的初衷。

2、设计特点

Easy Scheduler是一个分布式工作流任务调度系统,主要解决数据研发ETL错综复杂的依赖关系所带来的各种问题。
其主要目标如下:

  • 以DAG图的方式将Task按照任务的依赖关系关联起来,可实时可视化监控任务的运行状态
  • 支持丰富的任务类型:Shell、MR、Spark、SQL(mysql、postgresql、hive、sparksql),Python,Sub_Process、Procedure等
  • 支持工作流定时调度、依赖调度、手动调度、手动暂停/停止/恢复,同时支持失败重试/告警、从指定节点恢复失败、Kill任务等操作
  • 支持工作流优先级、任务优先级及任务的故障转移及任务超时告警/失败
  • 支持工作流全局参数及节点自定义参数设置
  • 支持资源文件的在线上传/下载,管理等,支持在线文件创建、编辑
  • 支持任务日志在线查看及滚动、在线下载日志等
  • 实现集群HA,通过Zookeeper实现Master集群和Worker集群去中心化
  • 支持对Master/Worker cpu load,memory,cpu在线查看
  • 支持工作流运行历史树形/甘特图展示、支持任务状态统计、流程状态统计
  • 支持补数
  • 支持多租户
  • 支持国际化
  • 还有更多等待伙伴们探索

4、与同类调度系统的对比

技术图片

5、系统部分截图

技术图片

技术图片

技术图片

6、文档

更多文档请参考:
Easy Scheduler中文在线文档

7、感谢

Easy Scheduler使用了很多优秀的开源项目,比如google的guava、guice、grpc,netty,ali的bonecp,quartz,以及apache的众多开源项目等等,我们也非常感谢oozie、azkaban、airflow等优秀调度作品的出现带给我们的启发,
正是由于站在这些开源项目的肩膀上,才有Easy Scheduler的诞生的可能。对此我们对使用的所有开源软件表示非常的感谢!我们也希望自己不仅是开源的受益者,也能成为开源的
贡献者,于是我们决定把易调度贡献出来,并承诺长期维护。也希望对开源有同样热情和信念的伙伴加入进来,一起为开源献出一份力!

8、后记

Easy Scheduler于2019.03.28号正式开源后,仅仅一周时间,我们就感受到了伙伴们对Easy Scheduler的极大热情,很多伙伴提出使用反馈,还有一些伙伴是直接就找到相应的源代码来提问题或给出更好的建议、甚至直接在Easy Scheduler上撸袖子写代码,
这给我们目前的主要开发者予以极大的精神鼓舞,非常感谢伙伴们这么热情和信任我们,我们会和大家一道继续奔走在使调度系统开箱即用这条大道上,为使"数据能力平民化"添砖加瓦,为数据时代贡献自己的激情和汗水!

开源github地址:https://github.com/analysys/EasyScheduler

在线文档地址:https://analysys.github.io/easyscheduler_docs_cn

以上是关于开源分布式任务调度工具,和你一起记住生命中每一个重要的时刻的主要内容,如果未能解决你的问题,请参考以下文章

分布式定时任务调度框架实践

定时任务调度系统设计

开源分布式任务调度系统就选:DolphinScheduler

最新开源分布式定时任务调度系统

分布式工作流任务调度系统Easy Scheduler正式开源

分布式任务调度框架选型,如何选择一个合适的框架?