Skip to content

krystalics/d10-scheduler

Repository files navigation

d10-scheduler

系统主要基于大数据离线调度的场景进行设计,同时借鉴elastic-job 的弹性调度与Quartz 的调度策略,以及众多其他的开源项目进而构建了基于DAG的分布式任务调度系统。 对标Apache DolphinScheduler

背景-调度系统分类

图片来源于快手大数据的任务调度分享 img.png

其实任务调度系统还有更多的开源项目,例如Quartz和Elastic-JOB、XXL-JOB等。没有列举到分享中也是因为他们和大数据体系的集成并不高。

大数据场景下的任务调度

图片来源于快手大数据的任务调度分享 img.png 这种场景下要面对的任务依赖非常的复杂,也是传统的基于时间的任务调度系统不能覆盖的范围。所以基于DAG的任务调度系统设计基本都是在大数据场景下完善成熟的。

分布式DAG任务调度系统

一个成熟的基于DAG分布式的任务调度系统至少需要有以下的模块来构成、并且关联上元数据与hadoop集群才能够提供生产。 img.png 元数据与hadoop集群都是另一个系统的事情,这里不做叙述。

系统架构设计 img.png

核心逻辑设计

很多开发者对于DAG非常的熟悉,非常不理解为什么在任务调度领域会区分定时调度以及基于DAG的调度。不就是一个小功能特性吗?至于这么麻烦?

其实在一般的业务系统中构建依赖关系的确不难,但是在任务调度的领域还有一个不可忽视的变量---时间。它是一个需要预测未来的设计、尤其是其中的难点【跨周期的任务依赖】(跨周期例子:A->B,A的运行周期是每天执行一次,B的运行周期是每周一执行一次)

简单的说就是两个任务不在同一个时间维度,想让它们相互构建成一张DAG是非常困难的。

概念解释
 任务:用户在产品页面进行配置的结果、需要设定运行周期、周期用crontab表示
 版本:任务的一个运行周期内只会有一个版本
 实例:版本的某一时刻只会有一个实例在运行(保留运行记录与刷数历史)
 表 : hive表、数仓的基础建设
 分区:hive表的划分方式,一般实践中会根据时间进行分区
 时间参数:动态的时间生成,搭配着hive表的时间分区和任务每天运行使用,
 
 具体的作用和来源可以参考后续给出的详细设计文章

这些概念交织在一起,形成成下面的结构 img.png

想知道更加详细的设计可以参考任务调度系统DAG设计

d10-scheduler 现在的特性:

  • 弹性调度:调度器高可用,任务会归属于多个调度器中的一个。当发生故障,会自动的转移到其他可用的调度器中 详细设计参考 弹性调度设计
  • 灵活的DAG依赖体系:跨周期的任务依赖配置很方便
  • 数据回填:当计算逻辑发生变化,可进行重新刷数来保证新老数据逻辑的一致性
  • 任务失败重试、报警
  • 任务执行过程可观测
  • 多租户建设,资源可争抢。加强资源利用率:详细参考 多租户--资源体系建设

未来规划

  • web page

如何使用:

todo

文档目录:

(除UI与API外)各模块的详细设计参考下面的文档:

1.任务调度体系

2.任务执行架构设计

3.动态扩所容、分布式与故障恢复

4.任务DAG体系设计

5.任务分级设计

6.监控报警

7.事件中心

8.日志服务

About

a simply distributed scheduler based on dag

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages