暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

浅析 Apache DolphinScheduler 工作流实例的生命周期

海豚调度 2023-06-20
794



点击蓝字 关注我们





 

 

大家好,我是蔡顺峰,白鲸开源的数据工程师,同时也是Apache DolphinScheduler项目的committer和PMC成员。今天我想和大家分享的主题是工作流实例的生命周期。

 

|蔡顺峰

编辑整理 曾辉



讲师介绍


蔡顺峰

白鲸开源研发工程师


01

项目介绍



Apache DolphinScheduler是一个分布式任务调度平台,旨在提供即插即用的数据管道解决方案。


它具有以下几个特性:高可用性体现在去中心化的架构上,其中包括 Master 和 Worker ,可以部署多个节点,并具备容错机制,保证工作流的自动恢复。其次,它具有丰富的插件,涵盖了任务、数据源、告警和注册中心等方面。


Apache DolphinScheduler支持多种外部调用方式,如常见的 Web UI 和开放的 API,在社区中还有一个名为 PyDS 的子项目,它是一个 Python客户端,还可以通过提交yaml文件来启动工作流,类似于在K8S中提交YAML文件来启动一个工作流。


它的工作流和任务状态与任务插件有一定关联,并且支持各种依赖类型。此外,它还具备参数传递等功能,包括全局参数和任务本身的参数传递逻辑。

Apache DolphinScheduler 作为 Apache 基金会的顶级项目,在中国非常受欢迎,同时在海外也有用户开始尝试和咨询,我们有450多位贡献者,在GitHub上拥有一万个Star,其次它背后用有一家商业开源公司—白鲸开源。


新特性

新特性主要集中在DS 3.0和3.1版本上。对于使用过DS的用户来说,可以了解到在2.0和3.0之间最大的区别是UI的改进,整个UI进行了重新设计,并且性能也有了大幅提升。


在MLOPS方面,我们引入了许多任务组件,旨在提供更好的调度和机器学习支持。


最近,我们还在ChatGPT中尝试了一些大模型,感兴趣的同学可以阅读我们的公众号上的文章。用一杯星巴克的钱,训练自己私有化的ChatGPT


另外,我们还与云服务提供商进行了对接,主要集中在任务插件和数据源方面,我们已经与亚马逊云和阿里云对接,如阿里云的OSS和亚马逊的S3、Redshift等数据源。

稳定性


在稳定性方面,我们在高可用性的基础上做了一些重要的改进,主要集中在 Master 和 Worker 的代码重构上,以解决在高并发任务下的稳定性问题。


服务拆分方面,我们根据架构设计进行了服务拆分,使服务更轻量级。我们希望DS整个项目更易用,以便用户和贡献者更方便地使用,从而保证项目的持续发展,而核心的重点部分则是稳定性和性能的提升。


此外,我们也在开放方面做了很多工作,如在基础上向外拓展各种客户端形式,如 Python 客户端和 yaml 提交等,目的是降低接入成本。


最后是生态系统,在保持核心稳定的前提下,我们丰富了插件,并且甚至可以在将来把某些插件拆分出去,独立进行版本迭代,以提高插件的迭代效率。


02

工作流实例生命周期



在介绍之前,先对架构进行简单介绍。

首先,在服务中,我们有一个数据库 DB,以及一个用于服务注册和发现的注册中心。


我们的内部服务主要分为四个部分:

  • API 服务,用于与 UI 交互;

  • 然后是负责告警通知的 Alert 服务

  • 主节点(master)和工作节点(worker)是去中心化的,可以部署多个 Master 和多个Worker,它们可以分布在不同的位置并独立工作。

  • 基本概念是工作流运行在 Master 节点上,具体的任务节点在 Worker 节点上运行,例如 shell、Python、Flink 和 Spark 等任务节点。

创建工作流


接下来,让我们看看如何创建工作流实例。


简单来说,我们可以通过页面、客户端或命令行等方式触发工作流实例的启动。不管是通过页面运行、使用客户端提交还是运行数,系统都会创建一条命令,并先存储在数据库中,然后Master进行异步轮询处理,每个 Master 会根据自己的下标来获取需要自己处理的 Command,并将 Command 转化为工作流实例。


此时,Master 就开始对工作流实例进行处理,这涉及到 DAG 解析的三个步骤:DAG 构建、数据初始化和任务节点提交。DAG 构建的目的是获取一个工作流节点的拓扑图,它可以是全量的或局部的,具体取决于任务节点的设置和状态。


数据初始化的处理是当工作流实例重跑或容错的场景下,此时需要加载一些历史数据,并跳过已成功执行的任务。第三步是提交任务节点,根据 DAG 拓扑图,我们开始从 DAG 中获取下一个要提交的任务节点,并将其提交到任务队列中,最后将其分发Worker节点执行。当处理完任务实例后,会从DAG拓扑继续找出它的下游节点,提交分发,循环处理直到整个DAG运行完成。


OK,接下来重点讲下 Dispatch 分发流程。首先有一个 Worker group 的概念,即对一个或几个Worker 节点打上分组的标签,比如 Spark 集群组,Flink 集群组,任务在配置的时候可以配置Worker分组,在dispatch分发时只会分发到对应的目标 Worker 组。


第二步是如何确定最优的分发对象,目前 DS 使用 lower-weight 的分发策略,结合心跳机制,worker 每5秒上报一次心跳到注册中心,汇报本轮自己的状态是否busy(结合cpu、内存、当前处理任务数来判断),Master 定时同步到内存中做,在 Dispatch 的时候去除本轮“不可用”的 Worker 对象,至此,分发流程基本结束。


值得一提的是,社区已经对整个逻辑组件的流程做了统一,一方面是将原本各个逻辑组件内部处理做了流程统一,方便管理,提升稳定性;


另一方面,在 Dispatch 的时候做了抽象,可以分发给 Worker 节点,也可以分发给 Local 自己,甚至后续可以直接分发到 K8s 环境中,提高了想象力空间。


当任务实例被分发给 Worker 节点后,涉及到 Master 和 Worker 之间的交互。在正常流程下,当任务实例分发给 Worker 节点后,工作节点不会立即执行任务,而是将任务放入队列中,然后由另一个线程来消费。


此时,Worker 接收任务成功,Master 会将任务实例的状态设置为已分发,并记录下对应的 Worker host。当 Worker 真正开始执行任务时,它会向 Master 发送消息反馈任务正在 Running,Master 收到后会回复 ack 确认,以确保通信的稳定性,不会丢失任何信息。


当 Worker 处理完任务后,会发送任务 Finish 的消息,Master 收到后更新任务的状态、参数和应用信息。


03

运行状态


在介绍了正常流程后,还有一些与运行状态相关的操作,例如暂停和停止。我们可以通过页面上的操作来触发这些操作,例如触发停止,实际上任务的停止是执行在 Worker 节点上的,完成后也会经过 Finish-ack 的流程。


此外,还有一些超时检测,Master会检测任务是否达到超时时间点,如果达到终止时间点,它会发送一个事件给对应的Worker,进行相应的处理。


监听机制,例如当 Worker 节点挂掉时,Master 会通过注册中心监听到,并进行任务容错处理。如果 Master 节点挂掉,其他 Master 节点将进行抢锁来接管工作流实例,确保系统的正常运行。


在商业版中,我们还增加了更多运行状态的操作,例如加冕、隔离、状态清除等。


最后,我要介绍一下我所在的公司,白鲸开源,它是一个专注于DataOps领域的开源商业化公司。


主要在数据调度、数据转换、数据示例和数据应用安全等领域贡献,并希望与社区共同发展,在数据领域DataOps方面不断深耕。


目前,我主要在参与两个Apache顶级项目,即Apache DolphinScheduler 和 SeaTunnel。


链接:SeaTunnel在6月1日正式从Apache基金会毕业,成为顶级项目。


 



参与贡献


随着国内开源的迅猛崛起,Apache DolphinScheduler 社区迎来蓬勃发展,为了做更好用、易用的调度,真诚欢迎热爱开源的伙伴加入到开源社区中来,为中国开源崛起献上一份自己的力量,让本土开源走向全球。


参与 DolphinScheduler 社区有非常多的参与贡献的方式,包括:


贡献第一个PR(文档、代码) 我们也希望是简单的,第一个PR用于熟悉提交的流程和社区协作以及感受社区的友好度。


社区汇总了以下适合新手的问题列表:https://github.com/apache/dolphinscheduler/issues/5689


非新手问题列表:https://github.com/apache/dolphinscheduler/issues?q=is%3Aopen+is%3Aissue+label%3A%22volunteer+wanted%22


如何参与贡献链接:https://dolphinscheduler.apache.org/zh-cn/community/development/contribute.html


来吧,DolphinScheduler开源社区需要您的参与,为中国开源崛起添砖加瓦吧,哪怕只是小小的一块瓦,汇聚起来的力量也是巨大的。


参与开源可以近距离与各路高手切磋,迅速提升自己的技能,如果您想参与贡献,我们有个贡献者种子孵化群,可以添加社区小助手微信(Leonard-ds) ,手把手教会您( 贡献者不分水平高低,有问必答,关键是有一颗愿意贡献的心 )。

添加社区小助手微信(Leonard-ds,好友申请注明“入交流群+姓名+公司+职位信息“,群里是实名制,仅用于验证身份) 



添加小助手微信时请说明想参与贡献。


来吧,开源社区非常期待您的参与。



< 🐬🐬 >
更多精彩推荐

优秀用户案例有奖征集 | 活动火热开启,快来投稿!

用一杯星巴克的钱,训练自己私有化的ChatGPT

【第十期】Apache DolphinScheduler 每周 FAQ 集锦

☞去年办了这么多场Meetup都没有你,2023年赶紧安排起来!

助力长城汽车数据管道平台连接“数据孤岛”,加强数据一元化,Apache DolphinScheduler 的角色定位

Committer 迎新!这次是来自阿里云的同学



点击阅读原文报名

文章转载自海豚调度,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论