来自 eBay 的文俊同学在近期的上海开源大数据 Meetup 上做了十分精彩的 “Apache DolphinScheduler 的架构演进” 分享。本次分享有近 200 人参与,在线观看次数超过 2,500 次
阮文俊,eBay 开发工程师,DolphinScheduler 贡献者。
Apache DolphinScheduler是一个分布式去中心化,易扩展的可视化DAG工作流任务调度平台。致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用。DolphinScheduler以有向无环图的方式将任务连接起来,可实时监控任务的运行状态,同时支持取消、暂停、恢复、从指定任务节点重跑等操作。
DolphinScheduler具有以下几个优良功能特性:
Cloud Native — 支持多云/数据中心工作流管理,也支持 Kubernetes、Docker 部署和自定义任务类型,分布式调度,整体调度能力随集群规模线性增长
高可靠与高可扩展性 — 去中心化的多 Master 多 Worker 设计架构,支持服务动态上下线,自我容错与调节能力
支持多租户
丰富的使用场景 — 包括流、暂停、恢复操作,以及额外的任务类型,如 Spark、Hive、MR、Shell、Python、Flink 以及 DS 独有的子工作流、任务依赖设计,扩展点采用插件化的实现方式
简单易用 — 所有流程定义操作可视化编排,定义关键信息一目了然,一键部署
关于DolphinSheduler更多功能介绍和开发文档请查阅官网详细信息 https://dolphinscheduler.apache.org
1.2.x架构
DolphinScheduler最初进入Apache孵化器的版本是1.2,在这一版本中采用的架构由以下几个重要部分组成:
1.2版本基本实现了高可靠的工作流调度系统,但是也存在多个问题:
[]
1.3.x架构
针对1.2版本存在的问题,1.3架构进行了如下改进:
这些改进有效改进了1.2版本的缺陷,但仍存在一些问题,例如:
2.0架构
针对1.3版本的缺陷,2.0架构进一步做出改进:
SchedulerThread 负责从数据库中查询 Command 并提交到 Command Queue
DagExecuteThreadPool 从 Command Queue 中取 command,并构造 DAG实例添加到 DAG 队列,进行处理,当前 DAG 没有未执行的任务,则当前 DAG 执行结束
TaskExecuteThreadPool 提交任务给 Worker
TaskEventThread 监听任务事件队列,修改任务状态
所有扩展点都采用插件化实现
告警SPI
注册中心SPI
资源存储SPI
任务插件SPI
数据源SPI
……
开发者阮文俊针对dolphinsheduler的未来发展方向,也分享了一些看法:
最后,开发者阮文俊针对入门新手如何参与开源贡献的问题,提出了宝贵的指导意见: