- 快召唤伙伴们来围观吧
- 微博 QQ QQ空间 贴吧
- 视频嵌入链接 文档嵌入链接
- 复制
- 微信扫一扫分享
- 已成功复制到剪贴板
10.阮文俊-ApacheDolphinScheduler架构演进
阮文俊,eBay开发工程师,Apache DolphinScheduler 深度贡献者,重度开源爱好者,专注于微服务中间件,分布式架构等领域。
展开查看详情
1 .Apache DolphinScheduler 架构演进 分享人:阮文俊
2 . 目 录 • Apache DolphinScheduler 介绍 • 架构演进过程 • Apache DolphinScheduler发展方向 • 如何参与开源贡献
3 .01 Apache DolphinScheduler介绍
4 .Apache DolphinScheduler简介 Apache DolphinScheduler 是一个开源的分布式工作流调度系统,于19年8月进入 Apache孵化器,在今年4月份从Apache孵化器毕业,现在是Apache顶级开源项目之 一。 DolphinScheduler致力于“可视化操作任务、工作流之间的依赖关系、并可视化整 个数据处理过程”。DolphinScheduler以DAG(有向无环图)的方式将任务连接起 来,可实时监控任务的运行状态,同时支持取消、暂停、恢复、从指定任务节点重 跑等操作
5 .Apache DolphinScheduler部分用户(排名不分先后) 已累计有400+公司在生产上使用
6 .Apache DolphinScheduler功能特性 简单易用 高可靠性 整个调度系统高可用,各个组件具备自我容错能力,任意 提供可视化的工作流编排能力,通过拖拉拽任务定制DAG 节点宕机能够自动进行故障转移,采用任务队列来避免系 并且能够将整个工作流的执行过程在界面上友好的进行展 统过载,不会造成机器卡死 示,提供API供三方系统接入,支持一键部署 高可扩展性 丰富的使用场景 采用去中心化的多Master和多Worker设计,集群可以横向 所有扩展点都全面采用插件化的实现方式,包括数据源、 扩容,调度能力随集群线性增长,Master和Worker支持动 告警、任务、注册中心等,可以更好的应对复杂的使用场 态上下线 景
7 .Apache DolphinScheduler主要能力 • 任务以DAG形式关联, • 原生支持Spark、 • 工作流优先级、任务优 • 工作流支持定时调度、手动 可以实时监控任务运行 Shell、Flink、SQL等 先级、自定义参数及任 调度、停止、暂停、恢复、 状态 十多种任务类型 务结果传递 自动失败重试等操作 • 支持多租户、worker分 • 提供完善的任务状态监 • 去中心化设计确保系统 • K8s支持,可直接部署 组、资源在线管理、工 控、任务超时/失败告 稳定、高可用、可自动 在云环境 作流版本控制 警机制 进行容错
8 .02 架构演进过程
9 .1.2.x架构 Master去中心化设计 • Master主要负责工作流调度,DAG任务切分,任务提交监 控 • 监听其他Master和Worker健康状态及容错处理 Worker去中心化设计 • Worker负责从任务队列中消费,执行任务 • Worker负责任务的生命周期 数据库 • 存储工作流元数据、运行实例数据 Zookeeper • 注册中心 • 分布式锁 • 任务队列
10 .1.2.x架构存在的问题 重量级的Worker • Worker负责取任务和维护任务的生命周期 任务执行延迟 • 任务派发是异步过程,极端情况下会出现延 1 迟高的情况(经历了1-2-3) 数据库压力大 • Master和Worker都需要依赖数据库,增加了 数据库的负担
11 .1.3.x架构 去任务队列 • Master采用同步的方式分配任务,降低任务执行延迟 轻量级的Worker • Worker只需要执行任务,并将执行结果通知Master,职责 单一,依赖更少 数据库压力减小 • Worker不再需要连接数据库 多种任务负载均衡策略 • Master分配任务的时候根据Worker的节点资源使用情况可 以选用多种负载均衡策略,Worker资源利率更高
12 .1.3.x架构存在的问题 分布式锁 • Master调度工作流时依赖分布式锁,导致调度工作流吞吐量难以提升,极端情况下调度可能出现高延迟 Master资源利用率低 • Master创建大量线程池,导致线程上下文切换频繁,大量线程处于轮询数据库,线程利用率低 数据库压力大 • Master通过轮询数据库来查询任务状态,任务数多的时候导致数据库压力大 各组件存在耦合情况 • 注册中心耦合Zookeeper • Worker耦合任务,需要打入许多依赖jar包
13 .2.0架构 • 去分布式锁 • 重构Master线程模型 • 重构数据库中DAG元数据模型 • 彻底的插件化 • 数据血缘关系分析
14 .去分布式锁
15 .Sharding by Master
16 .重构Master中的线程模型 Master现状 • 使用一个主线程池执行所有DAG工作流 • 主线程池执行过程中为每个工作流创建一 个任务线程池 • Master能并发处理的工作流为m, 并发处理 的任务为n,会产生m * n个线程
17 .重构Master中的线程模型 • SchedulerThread负责从数据库中查询Command并提交到Command Queue • DagExecuteThreadPool从Command Queue中取command,并构造DAG实 例添加到DAG队列,进行处理,当前DAG没有未执行的任务,则当前 DAG执行结束 • TaskExecuteThreadPool提交任务给Worker • TaskEventThread监听任务事件队列,修改任务状态
18 .彻底的插件化 所有扩展点都采用插件化实现 • 告警SPI • 注册中心SPI • 资源存储SPI • 任务插件SPI • 数据源SPI • ……
19 .03 Apache DolphinScheduler发展方向
20 .系统更稳、速度更快 • 依赖组件不可用时,系统仍然能够完成基本调度工作 • 毫秒级延迟 • 更高的调度吞吐量 • 智能化运维
21 .支持更多的任务集成 • 机器学习、深度学习的任务 • CI、CD等其他系统集成 • 存储过程任务、数据质量任务 • 容器调度任务 • 更复杂的调度场景
22 .基础调度服务
23 .04 如何参与开源贡献
24 .如何参与开源贡献 • 从小事做起 • 关注社区动态,积极参与讨论 • 坚持开源精神,乐于帮助他人 • 持之以恒
25 .订阅邮件: dev@dolphinscheduler.apache.org 官网:https://dolphinscheduler.apache.org Github仓库:https://github.com/apache/dolphinscheduler 公众号:海豚调度 Slack:https://join.slack.com/t/asf-dolphinscheduler/shared_invite/zt-omtdhuio-_JISsxYhiVsltmC5h38yfw Stack Overflow:https://stackoverflow.com/questions/tagged/apache-dolphinscheduler Twitter:https://twitter.com/dolphinschedule