引言

来自 eBay 的文俊同学在近期的上海开源大数据 Meetup 上做了十分精彩的 “Apache DolphinScheduler 的架构演进” 分享。本次分享有近 200 人参与,在线观看次数超过 2,500 次

dolphinscheduler spark job 配置 dolphinscheduler怎么样_插件化

图为现场

分享视频请参见

dolphinscheduler spark job 配置 dolphinscheduler怎么样_插件化_02

Apache DolphinScheduler 介绍

Apache DolphinScheduler 是一个云原生的分布式去中心化,易扩展的可视化 DAG 工作流任务调度平台。致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用。DolphinScheduler 以有向无环图的方式将任务连接起来,可实时监控任务的运行状态,同时支持取消、暂停、恢复、从指定任务节点重跑等操作。

DolphinScheduler 具有以下几个优良功能特性:

  • Cloud Native — 支持多云/数据中心工作流管理,也支持 Kubernetes、Docker 部署和自定义任务类型,分布式调度,整体调度能力随集群规模线性增长
  • 高可靠与高可扩展性 — 去中心化的多 Master 多 Worker 设计架构,支持服务动态上下线,自我容错与调节能力
  • 支持多租户
  • 丰富的使用场景 — 包括流、暂停、恢复操作,以及额外的任务类型,如 Spark、Hive、MR、Shell、Python、Flink 以及 DS 独有的子工作流、任务依赖设计,扩展点采用插件化的实现方式
  • 简单易用 — 所有流程定义操作可视化编排,定义关键信息一目了然,一键部署

关于 DolphinSheduler 更多功能介绍和开发文档请查阅官网详细信息 https://dolphinscheduler.apache.org/zh-cn/。

架构演进过程

1.2.x 架构

DolphinScheduler 最初进入 Apache 孵化器的版本是 1.2,在这一版本中采用的架构由以下几个重要部分组成:

  • 去中心化的 master 节点,负责工作流调度、DAG 任务切分、任务提交监控和监听其它节点健康状态等任务
  • 去中心化的 worker 节点,负责执行任务和维护任务的生命周期等
  • 数据库,存储工作流元数据,运行实例数据
  • Zookeeper,主要负责注册中心、分布式锁、任务队列等工作任务

1.2 版本基本实现了高可靠的工作流调度系统,但是也存在多个问题:

  • 重量级的 worker,worker 节点需要负责多种任务
  • 异步派发任务会导致任务执行延迟
  • 由于 masker 和 worker 都需要依赖数据库,导致数据库压力大

dolphinscheduler spark job 配置 dolphinscheduler怎么样_数据库_03

1.3.x 架构

针对 1.2 版本存在的问题,1.3 架构进行了如下改进:

  • 去任务队列,保证 master 节点同步派发任务,降低任务执行延迟
  • 轻量级 worker,worker 节点只负责执行任务,单一化 worker 职责
  • 减小数据库压力,worker 不再连接数据库
  • 采用多任务负载均衡策略,master 根据 worker 节点资源使用情况分配任务,提高 worker 资源利用率

dolphinscheduler spark job 配置 dolphinscheduler怎么样_Apache_04

这些改进有效改进了 1.2 版本的缺陷,但仍存在一些问题,例如:

  • master 调度工作流时需要依赖分布式锁,导致工作流吞吐量难以提升
  • 因为需要创建大量线程池,多数线程处于轮询数据库,导致 master 资源利用率低
  • master 轮询数据库,仍然导致数据库压力大
  • 各组件存在耦合情况

2.0 架构

针对 1.3 版本的缺陷,2.0 架构进一步做出以下改进:

  • 去分布式锁,对 master 进行分区编号,实现错位查询数据库,避免多个节点同时访问同一个工作流造成的冲突问题
  • 重构 master 线程模型,对所有工作流使用统一的线程池
  • 重构数据库中 DAG 元数据模型
  • 彻底的插件化,所有扩展点都采用插件化实现
  • 数据血缘关系分析

1 去分布式锁            

dolphinscheduler spark job 配置 dolphinscheduler怎么样_插件化_05

2 重构 master 中的线程模型

dolphinscheduler spark job 配置 dolphinscheduler怎么样_Apache_06

  • SchedulerThread 负责从数据库中查询 Command 并提交到 Command Queue
  • DagExecuteThreadPool 从 Command Queue 中取 command,并构造 DAG实例添加到 DAG 队列,进行处理,当前 DAG 没有未执行的任务,则当前 DAG 执行结束
  • TaskExecuteThreadPool 提交任务给 Worker
  • TaskEventThread 监听任务事件队列,修改任务状态

3 彻底的插件化

dolphinscheduler spark job 配置 dolphinscheduler怎么样_Apache_07

所有扩展点都采用插件化实现

  • 告警SPI
  • 注册中心SPI
  • 资源存储SPI
  • 任务插件SPI
  • 数据源SPI
  • ……

Apache DolphinScheduler 发展方向

文俊针对 DolphinScheduler 的未来发展方向,也分享了一些看法:

  • 系统更稳、速度更快(高吞吐、低延迟、智能化运维、高可用)
  • 支持更多的任务集成(深度学习任务、CI/CD等其它系统集成、存储过程和数据质量任务、容器调度任务、复杂调度场景等)
  • 轻量化 DolphinScheduler 内核,提供基础调度服务

dolphinscheduler spark job 配置 dolphinscheduler怎么样_Apache_08