最佳实践 | 联通数科基于 DolphinScheduler 的二次开发
点击上方
蓝字关注我们

✎ 编 者 按
数据时代下,井喷的数据量为电信行业带来新的挑战。面对每日数百 TB 的新增数据,稳定可靠的调度系统必不可少。
中国联通旗下的联通数字科技有限公司(以下简称“联通数科”),其数据智能事业部原来十分依赖商业调度系统。但随着公司业务规模扩大,和新场景需求的挑战下,事业部经过调研和多方考量,决定将调度系统替换为 Apache DolphinScheduler。从 2020 年 10 月上线首个版本以来,Apache DolphinScheduler 在联通数科已经过一年的实践检验,处理着中国联通来自各省市公司的日常数据。

背景

联通数科的数据智能事业部是中国联通全网数据商业运营的统一出口,有着大量的数据加工作业需求,因此,大数据调度系统对于这样一个重要部门来说必不可缺,而且由于其复杂独特的业务场景,公司内部对于调度系统的要求也较高。
在采用 DolphinScheduler 之前,联通数科使用原商业调度系统支撑着全域数据平台加工与调度,以接口机+Shell(HiveSQL)为主的开发编排运维模式,处理日均数万的流程实例和日均数十万的 Job 作业。但由于原调度系统承载业务量巨大,作业编排的控件类型又很多样化,作业定义与调度策略复杂,给部门的调度任务带来不小的难度。联通数科开始设想,是否可以用一款开源框架直接替换掉这套系统。

对新调度系统的要求

因为面对的业务量巨大,业务场景复杂,联通数科数据智能事业部对于调度系统的采用有着较高的要求:
1. 满足业务需求
联通数科已经沉淀了一些应对特有业务场景的解决方案,对调度系统的期望是需要能够适配现有方案的要求,或提出更好的方案。
2. 满足大数据量要求
支持日均两万流程实例,十万的任务实例。
3. 用户使用成本低
因为联通数科调度平台的用户不仅有技术人员,还包括生产运营、产品等其他部门人员,所以需要有直观的可视化工作流的定义,工作流实例的监控和问题排查功能。
4. 调度功能要求
需要满足复杂的调度策略和干涉策略,满足高稳定性,能够应对突发情况时作业量激增的情况。

Dolphin Scheduler恰好满足痛点需求

当时,国内外已经有不少开源的调度系统可供联通数科选择,如 Oozie、Azkaban 等流行调度产品。但是 Oozie 存在着配置工作流过程需要编写大量 xml 语言配置,社区活跃度低,代码复杂度比较高等问题,Azkaban 也存在创建 job 需要手动完成固定格式文件,任务执行中信息存储在内存中并没有持久化,一旦失败会丢失所有工作流等问题,这些缺点都不易于二次开发。

Airflow 与 DolphinScheduler 对比
经过综合对比分析,从学习和使用成本、任务规模支持程度、社区支持程度,以及社区活跃度角度出发,联通发现可以在其之上进行二次开发的最合适的开源调度系统,是 Apache DolphinScheduler。
这是因为 DolphinScheduler 满足了联通数科对调度系统的几个痛点需求:
其一,完美的无中心化架构设计,确保调度平台稳定性。
DolphinScheduler 分布式去中心化的架构优于其他流行调度系统的架构设计,能够满足其对于稳定性的要求。

DolphinScheduler 的 MasterServer 为无中心设计,它主要负责 DAG 任务切分、任务提交监控,并同时监听其它 MasterServer 和 WorkerServer 的健康状态。MasterServer 服务启动时向 Zookeeper 注册临时节点,通过监听 Zookeeper 临时节点变化来进行容错处理。
WorkerServer 同样也是无中心设计,主要负责任务的执行和提供日志服务。WorkerServer 服务启动时向Zookeeper注册临时节点,并维持心跳。
去中心化的多 Master 和多 Worker, 自身支持 HA 功能, 采用任务队列来避免过载,不会造成机器卡死,保证了系统的高可靠性。
其二,图形化的页面设计,降低使用成本。
当时市场上常用的调度系统都需要用户编写脚本文件定义流程,对于核心调度系统的多部门用户来讲,使用成本较高。而维护页面的成本小于脚本,联通数科需要的是一个具备图形化数据流数据器设计的调度系统。这是其采用 DolphinScheduler 的重要原因,可视化的页面编排方式很好地切合了联通数科的场景需求。
其三,DolphinScheduler 支持多策略负载均衡。
DolphinScheduler 支持并行、串行、干涉多种调度方式,相较轮巡导致任务运行过慢甚至服务器宕机的情况,其支持多种策略自动化资源负载均衡,从服务器层面做到任务分发负载均的方式让联通数科很是惊喜,可实现高效调度,如任务调度分组、并发控制,以及根据资源动态调整优先级,在界面直观地看到CPU、内存、Worker、Master 等的负载情况。
其四,DolphinScheduler 支持多种调度机制。
1)任务调度机制,支持时间触发,包括定时触发、循环触发、间隔触发;
2)事件触发机制,支持前置触发和后置触发。
第五,DolphinScheduler 支持数据分析。
通过流程实例数据统计,时间分布甘特图,统计运行时间,流程数量,可视化分析运行时间分布和项目数量,工作流节点状态统计等数据的统计分析,可以更好地监控任务进行状况。


昨日流程数据统计

时间分布甘特图

工作流/节点状态统计

工作流运行时统计
第六,直观的可视化监控功能。
DolphinScheduler 的特色之一是 DAG 监控界面,所有流程定义都是可视化的,通过拖拽任务定制 DAG,通过 API 方式与第三方系统对接,可实现一键部署。

第七,完善的告警模块。
DolphinScheduler 有完善的系统服务监控,智能预警机制可根据保留数据计算当前执行节点是否超时,超时则触发预警。
另外不可忽略的一点是,当时联通团队已经对 DolphinScheduler 的源码做了深入研究和分享,也与原始开发团队建立了紧密沟通渠道,在研发方案层面可获得外部专家支持,并看好 DolphinScheduler 开源社区的项目支持、贡献和发展,于是果断决定将原有系统替换为 DolphinScheduler。在系统替换过程中,DolphinScheduler 活跃的社区也为联通数科使用和后期改造提供了很多帮助。

应用场景&二次开发解决方案

采用 DolphinScheduler 之后,联通数科根据实际业务需求进行了二次开发,很好地解决了一些特殊挑战,包括以下几个典型应用场景:
1.全局变量
记录 shell 的输出日志,进行解析后获取用户定义的输出变量,并通过 netty 返回给 master,记录在 task Instance 中,下游节点在已完成节点集合中取出上游节点,得到变量池,获取所需变量,实现变量传递。
2. Switch节点
当时 DolphinScheduler 的 condition 节点只支持判断上游节点的成功失败状态,增加全局变量后需要判断变量的值执行不同的下游分支。将表达式格式化为脚本后进行解析,能够解析逻辑表达式。
3. 任务组

能够控制跨工作流节点并发的功能,在节点从 master 发送到 worker 之前判断资源池是否满足要求,如果不满足则等待,满足则继续执行,节点执行结束后将资源释放。在节点等待期间会根据用户设置的优先级争取资源,并且用户可以选择节点在等待期间强制启动,绕过资源池的限制。

用户反馈


Dolphinscheduler 为大数据调度产品新增了全新的选择,提供了优秀的、多方面可扩展的底层架构设计,我们也和 DolphinScheduler 一起在不断进步的社区环境中共同成长。
——联通数字科技数据智能事业部高级专家 谭晟中

满怀期待,不断进化

在经过一年多的生产环境检验后,DolphinScheduler 仍在联通数科平稳运行,处理其 7000+ 的流程实例和数万的任务实例,以及 70 台的 worker 节点。未来,联通数科表示还将根据生产运维方面的需求,在系统自身监控和告警功能优化等方面投入更多精力。

左:联通数科生产运维工程师 程鸣,右:联通数科软件开发工程师 王兴杰

联通数科大数据开发工程师 范伟强
DolphinScheduler 虽然很好地满足了联通数科的调度需求,但任何产品都贵在精益求精,联通数科也表达了对 DolphinScheduler 的期待,希望未来可以增加一些强大的功能,如角色权限管理、血缘功能、对历史数据的处理,以及优化工作流实例、任务实例页面的响应速度等。
带着用户的信任和期待,DolphinScheduler 将在未来版本中逐渐实现这些用户所迫切需求的功能,秉持“大道至简”的原则,在简单易用的基础上,把简单带给用户,将复杂留给自己,打造一个更加好用的大数据工作流任务调度平台!
社区官网
https://dolphinscheduler.apache.org/
代码仓地址
https://github.com/apache/dolphinscheduler
您的 Star,是 Apache DolphinScheduler 为爱发电的动力️ ~
添加社区小助手微信
(Leonard-ds)



☞DolphinScheduler 荣获 2021 中国开源云联盟优秀开源项目奖!
☞议题征集令 | Apache DolphinScheduler Meetup 2021 来啦,议题征集正式开启!
☞Apache DolphinScheduler 1.3.9 发布,新增 StandaloneServer
☞美女亲自带你快速上手 DolphinScheduler
☞手把手教你 Apache DolphinScheduler 本地开发环境搭建 | 中英文视频教程
☞Apache DolphinScheduler使用规范与使用技巧分享
点击阅读原文,加入开源!

点个在看你最好看
最佳实践 | 联通数科基于 DolphinScheduler 的二次开发的更多相关文章
- [github项目]基于百度地图二次开发实现的车辆监管(包含车辆定位、车辆图片和方向控制,电子围栏,图形绘制等功能)前端实现(不包含后端实现)
前言:基于百度地图javascript版本开发,百度地图中所用的key已承诺仅用于测试,不用于商业用途 注:本文所有代码可以到github上进行下载,github地址:http://map.eguid ...
- 深入理解基于selenium的二次开发
对于做web端自动化测试的人来说,可能接触selenium比QTP还要多,但是我们在做基于selenium的二次开发的时候,经常会说到二次开发是为了易于维护,很多人可能不懂得维护的价值是什么,和到底要 ...
- EntityFramework Core进行读写分离最佳实践方式,了解一下(二)?
前言 写过上一篇关于EF Core中读写分离最佳实践方式后,虽然在一定程度上改善了问题,但是在评论中有的指出更换到从数据库,那么接下来要进行插入此时又要切换到主数据库,同时有的指出是否可以进行底层无感 ...
- 《.NET最佳实践》与Ext JS/Touch的团队开发
概述 持续集成 编码规范 测试 小结 概述 有不少开发人员都问过我,Ext JS/Touch是否支持团队开发?对于这个问题,我可以毫不犹豫的回答:支持.原因是在Sencha官网博客中客户示例中,有不少 ...
- Qt4.8.6+mingw+Qgis2.4.0基于QGis的二次开发
关于QGis的二次开发,大致看了一下,基本都是在VC+QT的环境下做环境部署,并且QGis的版本号很老.在mingw下直接开发搭建好开发环境的样例少之又少.基于最新的Qgis2.4.0版本号做了对应的 ...
- C#基于AE组件二次开发常见问题
由于本人从事的是在.net平台下进行GIS的二次开发,所以第一篇博文就说一下:我最近在项目中出现的常见的问题,如果能够给大家增加一点点便利,也是我的荣幸,如果大家对于这次博文有什么意见和建议,欢迎大家 ...
- 基于Django+celery二次开发动态配置定时任务 ( 一 )
需求: 前端时间由于开发新上线一大批系统,上完之后没有配套的报表系统.监控,于是乎开发.测试.产品.运营.业务部.财务等等各个部门就跟那饥渴的饿狼一样需要 各种各样的系统数据满足他们.刚开始一天一个还 ...
- Linux基于webRTC的二次开发(一)
最近在做Linux平台下webRTC的二次开发,一路摸索,中间踩了不少坑,这一篇博客先来简单介绍下Linux上如何使用GCC编译webRTC. 为什么使用GCC编译? 这其实是无奈之举,Linux下w ...
- POLARDB · 最佳实践 · POLARDB不得不知道的秘密(二)
前言 POLARDB For MySQL(下文简称POLARDB)目前是阿里云数据库团队主推的关系型数据库.线上已经有很多企业用户在使用并且稳定运行了很久.当然,由于POLARDB是为云上环境专门打造 ...
随机推荐
- MongoDB 各项命名规范
每日一句 Progress is the result of a bunch of failures. 进步是不断失败的成果. 概述 MongoDB涉及到的一些比如集合啥的命令规范. 集合的命名规范 ...
- 【Java面试】如何理解Spring Boot中的Starter?
一个工作了3年的Java程序员,遇到一个Spring Boot的问题. 他对这个问题有一些了解,但是回答得不是很好,希望参考我的高手回答. 这个问题是:"如何理解Spring Boot中的S ...
- Spring中的Bean作用域
概述 scope用来声明容器中的对象所应该处的限定场景或者说该对象的存活时间,即容器在对象进入其 相应的scope之前,生成并装配这些对象,在该对象不再处于这些scope的限定之后,容器通常会销毁这些 ...
- 七牛云创建存储空间并绑定自定义域名-https协议
七牛云创建存储空间并绑定自定义域名-https协议 一.准备 0.绑定自定义域名的前提:你起码拥有过一个备案过的域名[一级域名] 1.在七牛云创建一个存储空间 2.存储空间绑定自定义域名(cdn加速) ...
- 【Spring】AOP实现原理(二):Advisor获取
@EnableAspectJAutoProxy @EnableAspectJAutoProxy注解可以用来开启AOP,那么就从@EnableAspectJAutoProxy入手学习一下Spring A ...
- 2.如何正确理解古典概率中的条件概率《zobol的考研概率论教程》
写本文主要是帮助粉丝理解考研中的古典概率-条件概率的具体定义. "B事件发生的条件下,A事件发生的概率"? "在A集合内有多少B的样本点"? "在B约 ...
- 面试突击61:说一下MySQL事务隔离级别?
MySQL 事务隔离级别是为了解决并发事务互相干扰的问题的,MySQL 事务隔离级别总共有以下 4 种: READ UNCOMMITTED:读未提交. READ COMMITTED:读已提交. REP ...
- 你真的会python中的for循环吗
for 循环是 Python 中的通用序列迭代器:它可以单步遍历任何有序序列中的元素.for 语句适用于字符串.列表.元组.其他内置可迭代对象和类创建的新对象. for 通常比 while 循环更容易 ...
- 女朋友说:你要搞懂了MySQL三大日志,我就让你嘿嘿嘿!
1. 背景 MySQL实现事务.崩溃恢复.集群的主从复制,底层都离不开日志,所以日志是MySQL的精华所在.只有了解MySQL日志,才算是彻底搞懂MySQL. 今天一灯就带你深入浅出的学习MySQL的 ...
- HBuilderX配置外部服务器(tomcat)查看编辑jsp界面
HBuilderX配置外部服务器(tomcat)查看编辑jsp界面 一.第一种方法,通过启动本地tomcat,查看jsp 在tomcat的webapps目录下创建文件夹HBuilderX 打开HBui ...