新一代大数据任务调度平台 Apache DolphinScheduler 架构实践经验
如果无法正常显示,请先停止浏览器的去广告插件。
1. 新一代大数据任务调度平台
-
Apache DolphinScheduler 架构实践经验
代立冬
Apache DolphinScheduler PMC Chair & Apache 孵化器导师
2.
3. • Apache DolphinScheduler 简介
• 架构演进历程
• Apache DolphinScheduler 2.0 架构优化 – 如何让性能提升 20 倍?
• Apache DolphinScheduler 应用案例实践
• 云原生下的调度思考
4. 01
DolphinScheduler 介绍
DolphinScheduler 简介
研发 DolphinScheduler 的背景
DolphinScheduler 的功能一瞥
5. • Apache
DolphinScheduler 简介
Apache DolphinScheduler 是一个云原生的分布式易
扩展并带有强大可视化界面的大数据工作流调度系
统。
2021 年 04 月 09 日正式成为 Apache 顶级项目。
首个由国人主导并贡献到 Apache 基金会的大数据工
作流领域的顶级项目。
6. DolphinScheduler 部分用户案例
7. 调度的痛点?
任务依赖
补数
日志
Oozie/Airflow 的任务日志不是一般人想看就看的
Why DolphinScheduler ?
来自奇安信讲师在 Meetup 上的分享
8. DolphinScheduler 功能一瞥
总览
任务执行状态回溯
工作流运行状态查看
任务执行日志查看
任务执行日志查看,方便运维实时了解任务运行状况,快速定位问题
9. DolphinScheduler 功能一瞥
2.0 以前版本
10. DolphinScheduler 功能一瞥
2.0 版本
11. 02
DolphinScheduler 架构迭
代
DolphinScheduler 1.2 架构
1.2 架构缺点
DolphinScheduler 1.3 架构
1.3 架构改进了哪些
耗时 10 个月,性能提升 20 倍的 2.0 架构都做了
些什么
12. DolphinScheduler 设计特点
高可靠性
简单易用
去中心化的多 Master 和多 Worker, 一键部署 – 简化部署,易维护
自身高可用能力 可视化 DAG 界面,所有流程定义都是可视
化,通过拖拽任务形成工作流模板
采用任务队列来避免过载,不会造成机器
卡死
丰富的使用场景
支持 Open API 方式与第三方系统对接
高扩展性、云原生能力
支持暂停恢复操作 支持自定义任务类型
支持多租户,权限管理等大数据应用场景 调度器使用分布式调度,调度能力随集群线性
支持近 20 种任务类型,如 Spark, Hive, MR, Python,
Sub-Process, Shell 等
增长
弹性伸缩, Master 和 Worker 支持动态上下
线
13. DolphinScheduler 1.2 架构
MasterServer 无中心设计
MasterServer主要负责 DAG 任务切
分、任务提交监控
监听其它MasterServer和
WorkerServer的健康状态及容错处理
WorkerServer 无中心设计
WorkerServer主要负责维护任务
的生命周期
WorkerServer服务启动时向
Zookeeper注册临时节点,并维
持心跳
14. DolphinScheduler 1.2 架构不足
•
•
•
•
1
•
Master 将任务信息存放到 zk
队列中
Worker 通过分布式锁的方式
去消费任务队列,延迟了任务
开始执行的时间(经历了1-2-
3)。
•
2
•
3
•
4
•
Master没有真正
意义上地去管理;
Worker却做了许
多不必承担的工作
为保证性能,zk 数据节点无法
存储执行任务所需的全部信
息。因而 Worker 需要操作数
据库去获取相关信息,增加了
数据库的负担。
15. DolphinScheduler 1.3 架构
16. DolphinScheduler 1.3.x 与 1.2.x 系统运作的差异
1.3.x 架构(黑线)中 Master职能更加丰
富,Worker则更加专注于执行。
1.2.x 中 Worker不仅要主动“揽活”,
还要负责“善后”工作。
任务的执行状态要通过访问数据库才能
获得,对于那些任务复杂的工作流来
说,时效性,任务吞吐,数据库压力都
会成为调度性能的瓶颈。
17. • DolphinScheduler
1.3.x 架构待优化
Master 分布式锁,抢锁问题
Master 使用线程多的问题
频繁查询数据库问题
任务类型的易扩展性
18. 03
DolphinScheduler 2.0
耗时 10 个月,性能提升 20 倍的 2.0 架构都做了
些什么
19. 耗时 10 个月完成的 2.0 架构
高性能 - Master 重构
减少数据库轮询
去分布式锁
减少线程使用
20. 2.0 以前版本瓶颈- 分布式锁
21. 2.0 重构 - 去分布式锁尝试之 Scheduler HA
22. 2.0 重构 - 去分布式锁采用方案
23. 2.0 重构 - Master 中的线程模型
2.0 以前 Master 实现
使用一个主线程池执行所有 DAG 工作流
主线程池执行过程中为每个工作流创建一 个 任
务线程池
Master 能并发处理的工作流为 m, 并发处理的
任务为 n,会产生m * n 个线程
24. 2.0 重构 - Master 中线程池如何工作
MasterSchedulerService 负责从 Command 表中分片获取 command, 构造工作流实
例,启动 WorkFlowExecuteThread 处理
WorkFlowExecuteThread 负责构建 DAG, DAG 拆分,生成任务实例,提交到任务队列;
同时负责处理任务状态和工作流状态变化
ThreadPool
API
StateEventExecuteService
ThreadPool
负责接收其他 Master / Worker 发过来的任务状态和工作流
状态变化事件,并提交 WorkFlowExecuteThread 状态处理
StateWheelExecuteService
负责任务/工作流
超时监控
25. DolphinScheduler 2.0 Master 端有哪些变化
大幅减少 Master 的线程使用
使用分片机制获取命令队列
增加状态事件的处理机制
增加 Master 与 Master 之间的通信
增加 Master 的缓存机制
26. 2.0 DAG 拆解
27. DolphinScheduler 2.0 Master 运行流程
28. 改造后的 2.0 架构效果 – 吞吐 20 倍提升
Master:100 threads Worker:100 threads
29. 2.0 新增可扩展能力
所有扩展点都采用插件化实现
Service Provide Interface, 简称SPI
SPI 优点
1、SPI 设计保持简洁
2、不依赖过多第三方 JAR
3、各个插件保持独立
可扩展的地方
•
• 告警 SPI
• 注册中心 SPI
• 资源存储 SPI
• 任务插件 SPI
• 数据源 SPI
Waterdrop
30. 告警插件
Email
DingTalk
Feishu
Http
Script
…
31. 2.0 跨集群、跨机房调度
多种环境变量配置
环境变量和任务绑定
WorkerGroup
适配环境变量
32. 2.0 功能新增主要 Feature
• 任务结果参数传递
• 工作流间的血缘关系,如右图
• 增加数据同步组件 Waterdrop、多分支等任务组件能力支持
• 工作流定义和任务关系拆分,更易通过 open API 生成工作流
• 添加工作流版本控制,如下图
33. 体验版极速部署
•
只需要 2 步即可体验
• 1、安装 JDK
• 2、sudo 用户一键启动
•
sh ./bin/dolphinscheduler-daemon.sh start standalone-server
34. 04
用户实践案例
社区用户案例
35. DolphinScheduler 在联通的大规模应用实践
•
目的:集中调度 Spark、Hive、MR job、存储过程、Shell 等资源,支撑
跨系统、跨应用、跨语言的作业任务协同执行,实现调度全局化、透明化
复杂多样的作业定义与调度策略:包括父子流程、并行、串行、依赖、和干涉等方式
资源负载均衡,实现高效调度:按资源对任务调度分组、并发控制、优先级动态调整
一天数十万任务量级调度,对稳定性要求极高
36. 联通 2020 年技术选型
重点调研过的产品: 存在的问题 是否适合原调度替换基座框架
Oozie 1.配置工作流的过程是编写大量的xml
语言配置,社区活跃度低 不适合
2.代码复杂度比较高,不易于二次开
发
Azkaban
1.创建 job 需要手动完成固定格式文
件
2.任务执行中信息存储在内存中并没
有持久化,所以一旦失败会丢失所有
工作流。
Airflow
Dolphinscheduler
重点讨论
不适合
37. 联通技术选型
Airflow
DolphinScheduler
二开成本 Python 开发成本较高 Java,流程清晰,代码简洁,成本相对较低
社区活跃度 比较活跃 比较活跃
集群扩展 需重启 Worker 节点 单点故障 主从模式,存在一定的单点风险 多 Master 多 Worker,注册 Zookeeper,一个节
点挂了不影响其他节点
过载处理 任务量大,调度的性能会急剧下降,甚至卡死服务器 任务过多会依靠队列排队
作业编排 流程定义需要编写 Python 脚本 支持任务拖拽配置,本土化亮点突出,用户交互友
好
节点类型
可随时在 ZK 中注册和删除 Master、Worker,
操作简单,稳定向高,可扩展性强
BashOperator、PythonOperator、SSHOperator、
Shell节点、子流程节点、存储过程、SQL节点、
HiveOperator,DockerOperator,OracleOperator,
Spark节点、MR、Python节点、依赖节点、HTTP
MysqlOperator,DummyOperator,SimpleHttpOperator、
节点、自定义节点
自定义节点
暂停与重跑 否 支持暂停流程、支持任意节点重跑
全局变量 支持全局变量,项目内所有流程可见,缺乏变量权限控制 暂不支持(注:联通已贡献给社区)
38. • 联通技术选型结果
- DolphinScheduler
39. DolphinScheduler 在 T3 出行数据湖建设中的实践
•
T3 2019 年在建设数据湖时,从易用性、社区活跃度、可拓展性、与 Hadoop 生态圈集成以及维护成本几个维度进行了调研对比
Oozie
易用性 一般
社区活跃度 中
可扩展性
hadoop集成
维护代价
一般
Azkaban
较好
Airflow
较好
中
高
Dolphin
好
活跃
一般
高
深入 一般 一般
高 中 中
调度系统对比表
活跃
深入
低
40. DolphinScheduler 在 T3 出行数据湖建设中的实践
•
•
•
•
•
流式
消费
低延迟的数据摄入
Hudi 与 Spark 解耦
支持 Flink 引擎流式写入
•
流式
生产
调度
加工
•
•
•
•
高效快速的数据加工
写 commit 通知
调度集成
摘自Apache Hudi PMC 杨华/赵玉威同学分享:T3出行在数据湖上进行准实时分析
查询
分析
•
•
•
低延迟的交互式查询分析
Zeppelin 集成
Alluxio 加速
41. 05
云原生下的调度方向
Roadmap
云原生下如何发展
DolphinScheduler 发展历程
参与开源有啥用
42. Roadmap(近期)
任务并行度控制
任务列表配置
任务全局优先级
血缘分析智能生成 DAG
优化文档结构
SDK 开发
• 如果对
Roadmap 有更多建议,欢迎讨论
43. Roadmap (长期)
• 毫秒级超低延迟
• 更高的调度吞吐量
• 智能化
44. 云原生时代 – 调度的方向
容器调度
任务
去 ZK
多云的能
力
弹性伸缩、
任务隔离
易扩展、
高性能
45. DolphinScheduler 项目发展历程
DolphinScheduler
架构设计
决定开源
花了2个月进行重构
升级 1.0.1、1.0.2、1.0.3
相继推出1.0.1、
1.0.2、1.0.3版本 Apache第一个版本
1.2.0
2019.02 2019.05 2019.12
2017.12
•
•
2018.05
内部使用
千帆产品线使用
2019.03
外部种子用户使用
3月30号正式对外开
源 – 1.0.0版本
2019.08
进入apache孵化
器
…
1. Apache 顶级项目
3.
2021.04.09
4
、
1.
3.
5
46. 为什么要参与开源
技术能力提升
成就感、自信心
个人影响力、 个人晋升
1
2
开源
3
丰富简历,利于找工作
4
5
6
结交高手、提高交流技巧
创新
47. 参与开源贡献的方式
Apache DolphinScheduler 社区参与贡献的方式,包括:
文档
翻译
答疑
测试
代码
实践文章、原理文章等
DolphinScheduler 开源社区非常期待您的参与 - 中国开源崛起
会议分享等
48. DolphinScheduler 2020 年荣誉
49.
50. DolphinScheduler 资源
开源地址: https://github.com/apache/dolphinscheduler
公众号 : 海豚调度
Twitter: @dolphinschedule
Slack workspace: https://s.apache.org/dolphinscheduler-slack