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

7W+任务实例,80+台任务节点,联通数科基于 DolphinScheduler 的差异化改造和升级

海豚调度 2022-09-14
869

 点亮 ⭐️ Star · 照亮开源之路
https://github.com/apache/dolphinscheduler
    

感谢志愿者天星数科 信贷数仓团队 软件工程师 李硕 对本文的整理工作,您的支持让社区越来越好!


大家好,我是来自联通数科的刘武,很高兴参加APACHECON ASIA 2022。我今天分享的题目是DolphinScheduler在联通数科的应用与实践。我的分享将分为如下五个部分:

  • 背景介绍
  • 易用性增强
  • 轻量化需求
  • 三方系统集成
  • 社区3.0版本特性介绍

1

背景介绍


为什么选择Apache DolphinScheduler,主要有以下几点考虑。首先公司目前有许多大数据调度任务和数仓计算任务如spark、flink和shell相关等任务,同时也有使用商业化调度工具。基于目前大数据任务现状以及降低成本的目的,考虑将商业化调度工具替换成Apache DolphinScheduler。同时,从系统高可用性、可扩展性和稳定性方面考虑,我们选择Apache DolphinScheduler。

在现有系统上部署新的Apache DolphinScheduler调度工具,在这过程中我们面临了一些挑战。

首先是集中现有调度服务机器以及评估现有任务部署情况;第二是评估原有任务迁移的难易程度;第三是为兼容商业调度功能,对Apache DolphinScheduler进行一些二次开发;最后是结合目前的生产任务和Apache DolphinScheduler版本持续迭代升级。

我们在2020年上线了第一个版本,总体有1万多工作流及7万多任务实例,worker节点有80余台。在系统权限、节点增强、worker分组等方面进行了二次开发,同时结合社区最新版本,进行差异化的改造和持续升级。


2

易用性增强


在系统首页统计数据部分,我们优化了项目总数、工作流总数、异常工作流数、任务节点总数以及异常任务节点数的全局数据,并保证实时统计24小时内任务数据。

在统计分析模块中,首先展示了任务节点实例Top10的项目统计,每个项目展示了运行成功和失败的比例,便于人员观察。在右侧展示了T+1的工作流运行时间分布情况。


在实时统计部分中,我们实时化的统计和展示了每个worker节点任务运行数据。架构上采用了StatsD+influxdb+granfnan,增强了对master和worker节点中运行实例的监控。具体是将StatsD的统计接口调用嵌入到master、worker代码中,服务在运行时将统计结果定时发送到Influxdb中,Granfnan访问Influxdb数据,最终系统UI界面通过调用API访问Granfnan数据,进行数据展示。


通过master、worker实时统计,我们可以方便地了解任务运行负载情况,并对worker分组进行动态调整。同时利用该实时统计框架,可以进一步监控master、worker内存、CPU、网络IO情况,便于用户选择服务器执行具体任务。

我们还开发了服务上下线管理模块。由于我们线上有80多台服务器,手动进行服务上下线是比较困难的,所以开发了统一服务管理页面,对master、worker服务上下线进行统一管理。

对于master管理,我们采用状态更新的机制,包含了以下操作:

  • 下线,加载zookeeper中对应下线节点地址
  • 刷新,检查任务数及机器状态
  • 重启,即重启服务
  • 回滚,服务出现问题回滚到之前版本

其中最重要的是下线服务操作,其对应流程是从Zookeeper拿到在线服务器列表,对下线服务进行标记,对比在线和标记下线的服务器列表,对下线的服务器列表进行后续操作,如重启、服务升级等。


当用户点击更新操作时,服务会执行标记下线流程,同时判断运行作业数量,当为0时触发。同时记录了服务状态改变信息以及当前版本信息。当服务自动更新失败后,可手动操作进行服务重启、回滚等操作。

对于worker管理,与master管理模块类似。当升级worker版本时支持差异化升级,可以跨版本进行worker服务发布。


资源池管理用于每次升级之前数据库记录版本与时间信息、升级包的位置,通过Netty服务将资源分发到我们所有服务器上面。同时为了发现升级过程中发生的异常情况,提供了异常检测功能。通过自动手动触发扫描数据库中对应项目流程处理状态,达到检测异常目的。


3

轻量化需求


01

轻量化需求背景


因为我们公司内部很多系统具有调度使用需求,前期已经使用了轻量化的调度工具组件如xxl-job,实现业务逻辑调度。

我们想是否能够根据xxl-job轻量化架构的特点和Apache DolphinScheduler架构特点做差异化兼容,即将两者进行架构的融合和统一。

xxl-job的架构简要如下。

02

轻量化需求架构融合


我们在改造过程中首先将xxl-job执行器模块启动时将自身注册到Apache DolphinScheduler数据库表中,具体则是通过netty与master进行通信;同时要兼容xxl-job服务响应请求的协议。服务发生注册时master监听需要区分是xxl-job服务注册还是本身worker服务。

master分发xxl-job任务同正常任务分发是一致的,API层也能够读取xxl任务日志相关信息统一反馈到Apache DolphinScheduler中。


03

三方系统集成


三方系统集成的需求同框架整合类似,我们目前有很多系统如数据质量、数据采集,其内部自有一些调度系统进行调度。为了利用Apache DolphinScheduler高可用特性,通过规定统一参数标准、和返回结果格式,支持定义第三方扩展的工作流节点,在master中实现第三方系统调用组件。

注册时master会将master地址和zk地址发送给三方系统,三方系统接收参数,并将调度相关参数写入配置中心。


在具体的流程配置页面中,可以选择对接的数据质量系统,并填入响应参数进行保存。后续会对接更多系统如bi系统、元数据管理系统。


04

社区3.0版本特性介绍


3.0版本相较于之前版本有着诸多改进和优化,例如重构了UI界面,新UI响应速度更快,稳定性更高。

  • AWS支持
  • 服务拆分
  • 引入了数据质量原生支持
  • 任务组,可以控制任务并发并明确组内优先级
  • 自定义时区
  • 任务定义列表
  • 新告警类型支持
  • Python API新功能

同时在该版本中还扩展了Flink任务类型,支持Flink SQL任务,以及支持Zepplin任务类型、Jupyter任务类型,和其他功能增强和优化。


结合新版本支持Jupyter任务新特性,我来介绍一下如何实现扩展Jupyter组件。

首先将Jupyter执行命令常量配置到Jupyter插件中,实现拼接shell命令的Jupyter参数类。在JupyterTask类中进行参数化校验,拼接执行shell命令。

在前端页面中我们修改支持了更多执行模式,支持docker、k8s选项,并且在JupyterTask中支持了这些执行模式。

以上即是Apache DolphinScheduler3.0的介绍,感谢大家的聆听,我今天的分享就到这里。

最后非常欢迎大家加入 DolphinScheduler 大家庭,融入开源世界!

我们鼓励任何形式的参与社区,最终成为 Committer 或 PPMC,如:
  • 将遇到的问题通过 GitHub 上 issue 的形式反馈出来。
  • 回答别人遇到的 issue 问题。
  • 帮助完善文档。
  • 帮助项目增加测试用例。
  • 为代码添加注释。
  • 提交修复 Bug 或者 Feature 的 PR。
  • 发表应用案例实践、调度流程分析或者与调度相关的技术文章。
  • 帮助推广 DolphinScheduler,参与技术大会或者 meetup 的分享等。
欢迎加入贡献的队伍,加入开源从提交第一个 PR 开始。
  • 比如添加代码注释或找到带有 ”easy to fix” 标记或一些非常简单的 issue(拼写错误等) 等等,先通过第一个简单的 PR 熟悉提交流程。
注:贡献不仅仅限于 PR 哈,对促进项目发展的都是贡献。

相信参与 DolphinScheduler,一定会让您从开源中受益!

参与贡献


随着国内开源的迅猛崛起,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) ,手把手教会您( 贡献者不分水平高低,有问必答,关键是有一颗愿意贡献的心 )。


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


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


< 🐬🐬 >
活动推荐


2022 年 9 月 17 日,Apache DolphinScheduler 和 Apache RocketMQ 社区将强强联合,邀请来自互联网企业大数据专家和社区核心开发者,带来一场大数据开发技术以及生产场景实践的精彩分享。


报名通道已开启,马上预约吧!


扫码预约


扫码加入海豚调度交流群


添加小助手




点击阅读原文,免费预约直播!



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

评论