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

图为现场
分享视频请参见

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 都需要依赖数据库,导致数据库压力大

1.3.x 架构
针对 1.2 版本存在的问题,1.3 架构进行了如下改进:
去任务队列,保证 master 节点同步派发任务,降低任务执行延迟
轻量级 worker,worker 节点只负责执行任务,单一化 worker 职责
减小数据库压力,worker 不再连接数据库
采用多任务负载均衡策略,master 根据 worker 节点资源使用情况分配任务,提高 worker 资源利用率

这些改进有效改进了 1.2 版本的缺陷,但仍存在一些问题,例如:
master 调度工作流时需要依赖分布式锁,导致工作流吞吐量难以提升
因为需要创建大量线程池,多数线程处于轮询数据库,导致 master 资源利用率低
master 轮询数据库,仍然导致数据库压力大
各组件存在耦合情况
2.0 架构
针对 1.3 版本的缺陷,2.0 架构进一步做出以下改进:
去分布式锁,对 master 进行分区编号,实现错位查询数据库,避免多个节点同时访问同一个工作流造成的冲突问题
重构 master 线程模型,对所有工作流使用统一的线程池
重构数据库中 DAG 元数据模型
彻底的插件化,所有扩展点都采用插件化实现
数据血缘关系分析
1 去分布式锁

2 重构 master 中的线程模型

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

所有扩展点都采用插件化实现
告警SPI
注册中心SPI
资源存储SPI
任务插件SPI
数据源SPI
……
Apache DolphinScheduler 发展方向
文俊针对 DolphinScheduler 的未来发展方向,也分享了一些看法:
系统更稳、速度更快(高吞吐、低延迟、智能化运维、高可用)
支持更多的任务集成(深度学习任务、CI/CD等其它系统集成、存储过程和数据质量任务、容器调度任务、复杂调度场景等)
轻量化 DolphinScheduler 内核,提供基础调度服务

如何参与开源贡献
最后,开发者阮文俊针对入门新手如何参与开源贡献的问题,提出了宝贵的指导意见:
从小事做起,积累开发经验
关注社区动态,积极参与讨论,更好融入社区
坚持开源精神,乐于帮助他人
保持持之以恒的开发和贡献心态
分享讲师:阮文俊,eBay 开发工程师,DolphinScheduler 深度贡献者,开源深度玩家
编辑:徐玮毅,天津大学 2018 级计算机科学与技术本科生,热爱编程,开拓进取。本文是第一次参与 DolphinScheduler 社区的开源工作,希望能逐渐积累经验,继续为社区作出更大贡献!

点击阅读原文,加入官方 Slack 讨论群 也欢迎关注推特: https://twitter.com/DolphinSchedule
Apache DolphinScheduler 架构演进介绍及开源经验分享 - eBay 阮文俊的更多相关文章
- Apache DolphinScheduler 架构演进 & Roadmap
<DataFunSummit:大数据存储架构峰会> 2021年4月17日Apache DolphinScheduler PMC chair 代立冬参与 DataFunSummit 分享&l ...
- Apache DolphinScheduler&TiDB联合Meetup | 聚焦开源生态发展下的应用开发能力
在软件开发领域有一个流行的原则:Don't Repeat Yourself(DRY),翻译过来就是:不要重复造轮子.而开源项目最基本的目的,其实就是为了不让大家重复造轮子. 尤其是在大数据这样一个高速 ...
- 新一代大数据任务调度 - Apache DolphinScheduler喜提十大开源新锐项目 & 最具人气项目
经 10000+ 开发者公开票选,20+专家评审. 10+ 主编团打分,历经数月打磨,11 月 19 日,由InfoQ 发起并组织的[2020中国技术力量年度榜单评选]结果正式揭晓. 2020 年度十 ...
- 议题征集令 | Apache DolphinScheduler Meetup 2021 来啦,议题征集正式开启!
点击上方 蓝字关注我们 社区的小伙伴们,经过精心筹备,我们很高兴地宣布,Apache DolphinScheduler Meetup 2021 将于 2021 年 11 月 27 日到来! 在 Mee ...
- 从 Airflow 到 Apache DolphinScheduler,有赞大数据开发平台的调度系统演进
点击上方 蓝字关注我们 作者 | 宋哲琦 ✎ 编 者 按 在不久前的 Apache DolphinScheduler Meetup 2021 上,有赞大数据开发平台负责人 宋哲琦 带来了平台调度系统 ...
- 本周六 Apache DolphinScheduler & Doris 将联合线上 Meetup
活动背景 2020年,大数据成为国家基建的一个重要组成,大数据在越来越多的领域展现威力.随着大数据的应用场景越来越多,大家对数据的响应速度和数据加工工作流的方便程度也提出了更高的要求.在这种背景下,相 ...
- Apache DolphinScheduler & Doris 将于本周六联合进行线上 Meetup
01 - 活动介绍 2020年,大数据成为国家基建的一个重要组成,大数据在越来越多的领域展现威力.随着大数据的应用场景越来越多,大家对数据的响应速度和数据加工工作流的方便程度也提出了更高的要求.在这种 ...
- 日均 6000+ 实例,TB 级数据流量,Apache DolphinScheduler 如何做联通医疗大数据平台的“顶梁柱”?
作者 | 胡泽康 鄞乐炜 作者简介 胡泽康 联通(广东)产业互联网公司 大数据工程师,专注于开源大数据领域,从事大数据平台研发工作 鄞乐炜 联通(广东)产业互联网公司 大数据工程师,主要从事大数据平 ...
- Apache DolphinScheduler 1.3.6 功能发布说明
参与人员 @chengshiwen.@hailin0.@wanghong1314.@ruanwenjun.@xxjingcd.@zhangguohao.@zhuangchong.@syb8535531 ...
随机推荐
- monit 命令详解(monit)
monit是Monit软件的主操作控制命令. 语法 monit [options]+ [command] 选项(options) -c file 指定要使用的配置文件 -d n 每间隔多少秒运行一次M ...
- 安装Speedtest到Python
Speedtest模块可以测试主机的网络带宽大小. 运行环境 系统版本:CentOS Linux release 7.3.1611 (Core) 软件版本:无 硬件要求:无 安装过程 1.安装Spee ...
- Android 子线程 UI 操作真的不可以?
作者:vivo 互联网大前端团队- Zhang Xichen 一.背景及问题 某 SDK 有 PopupWindow 弹窗及动效,由于业务场景要求,对于 App 而言,SDK 的弹窗弹出时机具有随机性 ...
- ML第一周学习小结
最近的学习内容为<Python机器学习基础教程>这本书 从第一章开始,慢慢来,比较快. 一下为我的本周机器学习小结,以及下周的Flag. 本周收获 总结一下本周学习内容: 1.了解到机器学 ...
- A* K短路
注:\(A*\) 求解K短路效率极其低下,时间复杂度\(O(nklog\ n)\),空间视题目而定,因为本质是爆搜,可求解数据范围较小的题目. 我们使用\(A*\)求解k短路: 首先需要预处理出估价函 ...
- rpc的正确打开方式|读懂Go原生net/rpc包
前言 最近在阅读字节跳动开源RPC框架Kitex的源码,分析了如何借助命令行,由一个IDL文件,生成client和server的脚手架代码,也分析了Kitex的日志组件klog.当然Kitex还有许多 ...
- 【原创】SpringBoot 2.7.0通过lettuce及commons-pool2 v2.9.0集成Redis踩坑记录
背景 公司的一个项目由于HTTPS证书到期,导致小程序.POS不能正常使用.所以百度了下,通过URL检测证书有效期的代码,并自行整合到一个服务中. 代码仓库:[基于SpringBoot + 企业微信 ...
- SpringBoot整合SpringSecurityOauth2实现鉴权-动态权限
写在前面 思考:为什么需要鉴权呢? 系统开发好上线后,API接口会暴露在互联网上会存在一定的安全风险,例如:爬虫.恶意访问等.因此,我们需要对非开放API接口进行用户鉴权,鉴权通过之后再允许调用. 准 ...
- NC50528 滑动窗口
NC50528 滑动窗口 题目 题目描述 给一个长度为N的数组,一个长为K的滑动窗体从最左端移至最右端,你只能看到窗口中的K个数,每次窗体向右移动一位,如下图: 你的任务是找出窗体在各个位置时的最大值 ...
- NC21181 重返小学
NC21181 重返小学 题目 题目描述 时光依旧,岁月匆匆.转眼间,曾经的少年郭嘉烜已经长大成人,考上了一所优秀的大学--兰州大学.在经历了一年来自牛顿.莱布尼茨.拉普拉斯的精神洗礼后,他终于决 ...