金融任务实例实时、离线跑批Apache DolphinScheduler在新网银行的三大场景与五大优化
在新网银行,每天都有大量的任务实例产生,其中实时任务占据多数。为了更好地处理任务实例,新网银行在综合考虑之后,选择使用 Apache DolphinScheduler 来完成这项挑战。如今,新网银行多个项目已经完成了实时与准实时的跑批,指标管理系统的离线跑批,应用于离线数据开发和任务调度、准实时数据开发和任务调度,以及其他非 ETL 用户定义数据跑批三类场景中。
为了更好地适应业务需求,新网银行是如何基于Apache DolphinScheduler 做改造的呢?在 Apache DolphinScheduler 4 月Meetup上,来自新网银行大数据中心的高级大数据工程师 陈卫,为我们带来了《 Apache DolphinScheduler 在新网银行的实践应用》。
本次分享分为四个环节:
-
新网银行引入 Apache DolphinScheduler 的背景介绍
-
Apache DolphinScheduler 的应用场景
-
对新网银行的优化与改造
-
新网银行使用 Apache DolphinScheduler 的后续计划
陈卫
新网银行 大数据中心 高级大数据工程师
11 年工作经验,早期从事数据仓库建设,后转向大数据基础平台、调度系统等建设,有传统金融行业、互联网数据仓库、数据集市建设经验,多年的调度系统建设经验,咪咕文化分析云调度系统设计,报表平台设计,目前主要负责新网银行 DataOps 体系相关系统建设(离线开发,指标系统,标签系统)。
01背景介绍
我们选择使用 Apache DolphinScheduler 主要基于三大需求:研发场景的统一、测试场景的优化,以及投产部署场景优化。
01研发场景
过去,我们在数据开发过程中无统一的开发工具,因此新网银行在开发工作过程中,需要在多个工具间来回切换,导致过高的开发成本;
另一方面,我们在开发过程中的参数替换需求无法满足,无法进行即席调试,无现成工具支持开发态与生产态离线任务。
02测试场景
在测试场景的部署的过程中,当我们的开发人员将脚本提供给测试,返回的文档却相当不友好。尤其是需要在多个版本多个场景中部署的时候,测试人员的任务量骤增,可视化的部署也相对较弱,无法进行较友好的自动化测试。
03投产部署
-
当前调度系统配置复杂,可视化效果差;
-
开发与生产环境网络物理隔离,因此开发环境代码部署至生产环境流程长,易出错。测试环境无法充分体现生产环境配置,手动配置文件易出错,易漏配;
-
运维监控能力不足,可视化效果差,无法在线查看日志,故障排除进入监控机房须登录物理机器,流程复杂。
02应用场景
我们应用 Apache DolphinScheduler 的场景主要有以下离线数据开发以及任务调度、准实时数据开发以及任务调度以及其他非 ETL 用户定义数据跑批三类。
01离线数据开发以及任务调度
在离线数据开发以及任务调度中,主要应用于我们的银行业的数据仓库、数据集市等,数据包括一些离线数据,按日按月的离线加工的数据等。
02准实时数据开发以及任务调度
在新网银行中准实时的数据是通过 Flink 从上游的消息队列数据库的日志里面进行融合计算,补全相关维度信息后,把数据推送到 Clickhouse 内进行处理。但按分钟级进行跑批计算,但相对于日常的按日跑批的调度,会有一些特殊的需求。
03其他非ETL用户定义数据跑批
我们有这部分的应用是通过一些内部的低代码平台来实现功能,我们将应用系统开放给业务人员,他们可以自助分析应用数据,不需要开发人员处理。业务人员定义好后,可以自助对这部分数据进行跑批。
1、离线数据开发以及任务调度
其中,我们在离线数据开发和任务调度场景中应用 Apache DolphinScheduler ,主要涉及任务开发调式、历史的任务集成、工作流与任务分离、项目环境变量、数据源查找五个板块。
1、任务开发调式(SQL,SHELL,PYTHON,XSQL等),在线开发调式(在下查看日志,在线查看 SQL 查询返回结果)。WEBIDE 可以自动对弹窗变量替换,会根据用户的设置以及默认的处理进行动态替换。
2、历史的任务集成
银行业大部分数仓已经建立了四五年,有很多的历史任务,因此,我们不希望我们新的系统上线的时候,用户需要自主改造代码,因为这样会导致用户的使用成本相对过高。
3、工作流与任务分离
开发直接开发任务并调式、测试,工作流直接引用已开发任务,这样我们的任务开发与我们的任务编排就进行了相应的切割。
4、项目环境变量
新增项目环境变量,项目环境变量默认适配项目内的所有作业,这样我们不需要在每一个工作流内配置,每个项目可以直接引用。
5、数据源
我们按数据源名称查找数据源,支持 phoenix 等数据源。后续我们希望任务可以导入导出,但在导入导出的过程中,我们任务中的参数定义,数据源等不能进行改变,这样从测试就可以直接导向直接投产,在生产方面就会较为简单。
2、准实时的任务
-
任务开发调式(SQL),在线开发调式(在线查看日志,在线查看 SQL 查询返回结果),WEBIDE 中弹窗替换脚本变量。
-
Clickhouse 数据源 HA 配置集成支持。但在离线跑批中会出现一个小问题,即如果当前端口不可用,可能直接报错,在这一块,需要进行额外的处理。
-
准实时工作流单实例运行,如已有初始化实例,或存在正在进行的工作流实例,即使触发了下一批次,也不会触发工作流的运行。
3、其他非ETL用户定义数据跑批
1、我们目前有来自指标管理平台推送的模型数据计算任务,这些用户自定的简单报表,平台会动态生成 SQL ,随后直接推送到离线调度中。未来这一过程将不会有开发人员参与。
2、在标签管理系统中,我们主要通过生成特殊的插件任务来配适。
03优化改造
1、新网银行现状
在新网银行,每天都有大约 9000+ 的任务实例产生,其中实时任务占据多数。如今,我们已经使用 Apache DolphinScheduler ,在很多项目中完成实时与准实时的跑批,指标管理系统的离线跑批等,包括对集成的支持 XSQL 内部 SQL 工具进行跑批。
在右侧的截图中我们可以看到,我们其实完成了任务独立,将参数进行二次替换。另外,在任务血缘方面,尤其是 SQL 类的任务,我们可以做到自动解析,也可以手动增加。这主要用于我们工作流的自动编排,如公司内部的任务地图等。
为了满足以上的业务需求,我们对 Apache DolphinScheduler 进行了如下五大优化,同时也列出了相应的在改造过程中必须要注意的修改。
-
项目通过环境进行认为在不同场景下的各类(开发、测试);
-
环境变量与项目、环境进行隔离,但不同环境环境变量名称保持一致;
-
数据源通过项目、环境进行隔离,但不同环境数据源名称保持一致;
-
新增非 JDBC 数据源,ES,Livy等。因为在内部透明的应用中,需要 Livy 作为数据服务框架,对接 Spark job 进行数据脱敏。
2、独立任务
-
开发独立的任务开发,调试,配置页面,能够支持项目环境变量
-
JDBC,XSQL 的任务能够通过数据源名称引用数据源
-
开发交互式 WEBIDE 调试开发
-
完成参数优化,支持用户${参数}并引用系统内置时间函数
-
完成独立 SQL、XQSL 自动血缘解析
-
完成 SQL 自动参数解析
3、工作流启动逻辑优化
-
准实时工作流单实例运行,如已存在正在运行的工作流实例,则忽略本次运行
-
增加环境控制策略,工作流根据不同的环境引用不同的环境变量、数据源访问连接,比如如果提前配置了灾备环境和生产环境,一旦生产环境出现问题,可以一键切换到灾备环境中。
-
优化由于工作流、任务分离带来的调度问题,主要包括异常的检测
4、导入导出优化
-
新增导入导出任务、任务配置及其资源文件等
-
由于银行业和金融业有许多开发测试环境网络和生产网络是不一致的,所以需要在多个环境中处理数据时,导出一个相对友好的资源脚本工作流以及资源文件信息。
-
新增工作流导入导出逻辑,处理由于不同数据库实例自增ID存在的数据冲突问题
-
导航式导入导出,版本管理,主要应对紧急情况时,部分代码的回退等等
5、告警体系改进与优化
-
对接新网银行内部告警系统,默认对任务创建人员订阅告警组用户进行告警
-
增加策略告警(启动延迟、完成延迟),对重点任务进行启动、完成延迟告警
6、对接内部系统
-
模型类任务运行以及监控
-
报表推送类任务运行以及监控
-
对接内部 IAM SSO 统一登录认证系统
-
按网络不同,限定特定功能(代码编辑,工作流运行,任务运行等)
金融行业有一个特殊的现象,就是我们的投产需要在特定的机房去做,我们必须限定某些操作只能在机房中完成,但我们也需要减少修改一次的成本,我们希望开发在看到日志以后,直接在办公网络中进行修复,修复完成后再去机房进行投产。
如上图所示,我们主要基于这种维度模型理论自动创建报表。配置后,我们根据配置报表逻辑,进行多个表的代码合并计算。聚合计算完成后推送到报表服务器。这样业务用户可以按照我们提供的一些基础功能。直接进行数据聚合,不需要去写 SQL ,也避免了业务端用户不安给我们提出临时的需求。
04后续计划
-
向更多的项目组推广离线数据研发平台
-
逐步替换行内已有调度系统,实现所有离线任务平稳迁移
-
调度系统下沉,对接行数据研发管理系统
技术目标
-
更加智能化、自动化的任务调度、编排系统,降低调度系统在用户侧的使用门槛
-
运行监控、预测,面相与运维人员提供更加友好的运维监控,任务完成时间预测等功能
-
全局视图功能,面向开发、运维人员提供离线任务的全局视图,提供数据血缘、影响分析功能
-
进一步集成行内定制的配置模块化,降低开发人员的开发成本
-
与数据质量管理平台进行整合集成
-
用户定义木板任务支持
谢谢大家,我今天的分享就到这里。
参与贡献
随着国内开源的迅猛崛起,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"volunteer+wanted"
如何参与贡献链接:https://dolphinscheduler.apache.org/zh-cn/docs/development/contribute.html
来吧,DolphinScheduler开源社区需要您的参与,为中国开源崛起添砖加瓦吧,哪怕只是小小的一块瓦,汇聚起来的力量也是巨大的。
参与开源可以近距离与各路高手切磋,迅速提升自己的技能,如果您想参与贡献,我们有个贡献者种子孵化群,可以添加社区小助手微信(Leonard-ds) ,手把手教会您( 贡献者不分水平高低,有问必答,关键是有一颗愿意贡献的心 )。
添加小助手微信时请说明想参与贡献。
来吧,开源社区非常期待您的参与。