Datavines 开动长桥证券在数据观测场景下的复兴号

367 阅读11分钟

导 读  本文主要介绍长桥科技(长桥证券背后的科技公司)通过引入 Datavines 来解决多租户场景下数据质检任务挤占资源和耗时过长的问题,重点介绍了 Datavines 与其现有的数据平台的集成方案和应对业务需求所进行的二开特性。

Githubgithub.com/datavane/da…
欢迎关注、Star、Fork,参与贡献!

供稿单位 | 长桥科技

文章作者 | 吕诺格

Longbridge Whale(长桥科技)是一家技术驱动的金融科技公司,为各类证券经纪公司、外部资产管理公司、家族办公室、私人银行和超高净值人士提供领先的数字化解决方案。通过领先的自研金融科技,推动证券交易及财富管理的数字化发展。

图片

业务背景与挑战

目前长桥数据平台是架在微众开源的 WeDataSphere 上,其一站式、全流程、全联通的数据开发理念与我们不谋而合,但组件里的数据质量 Qualitis 是 0.8.0 版本,底层强依赖 Spark 引擎(会使用 Yarn 资源)。我们集群在早高峰时 Yarn 的资源非常紧张,用 Spark On Yarn 去执行质检任务会导致任务延迟。在多租户的场景中,数据量可控但校验表数量却 N倍增长,Yarn 资源紧张的现象只会更加严重,所以急切需要将数据质量检查与 Spark On Yarn 剥离。我们意识到 DQC 在某种程度上类似即席查询,而公司目前 Trino 集群健壮,所以 DQC on Trino 势在必行。同时我们之前在 Qualitis 二开的 RDS 数据质量检测等功能依然需要保留,用户也已经习惯了 Qualitis 在 WeDataSphere 工作流中的页面配置。我们需要在短时间内开动一辆又快又稳的贴着"终极防线的数据质量"广告的复兴号,此过程并非一帆风顺,我们遇到了以下挑战:

  • DQC on Trino:DQC 可与 Trino 集群结合,快速响应数据质量需求。
  • 功能保留:保留在RDS数据质量检测、异源数据比对等功能的支持。
  • 用户习惯:用户已习惯在 WeDataSphere 工作中进行全链路包含数据质量节点的页面配置。
  • 实施目标:需快速上线。
  • 开源引入:需要有良好的扩展性,方便与 WeDataSphere 体系& DolphinScheduler 友好集成;且在需要的时候校验规则、告警机制和时间宏变量好扩展。

解决方案选型

选型依据:on Trino/Presto/OLK;开发语言;功能的完备性;部署&二开简单;社区活跃;界面友好

平台开源地址开源协议开发语言活跃时间执行引擎开源团队备注
Qualitisgithub.com/WeBankFinTe…Apache-2.0 licenseJava/Vue/Fes2024年spark/linkis微众二开需要改动linkis代码(Java/Scala)
Apache Griffingithub.com/apache/grif…Apache-2.0 licenseScala/Java/TypeScript2020年11月9日sparkeBay
Deequgithub.com/awslabs/dee…Apache-2.0 licenseScala2024年spark亚马逊
Great expectationsgithub.com/great-expec…Apache-2.0 licensePython2024年
DataCleanergithub.com/datacleaner…LGPL-3.0 licenseJava/前端基础三件套2022年2月10日
MobyDQgithub.com/ubisoft/mob…Apache-2.0 licensePython/Vue2022年5月10日
Soda Coregithub.com/sodadata/so…Apache-2.0 licensePython2024年
Datavinesgithub.com/datavane/da…Apache-2.0 licenseJava/TypeScript2024年local(trino/rds等)/sparkdatavane

经过初步分析和对比,我们把目标锁定在 Datavines 上,对此我们进行了深度的调研,Datavines 总体架构如下: 图片

以下是我们总结出来 Datavines 相比其他项目的优势:

1. 插件化设计

平台以插件化设计为核心,以下模块都支持用户自定义插件进行扩展

  • 数据源:已支持 MySQL、Impala、StarRocks、Doris、Presto、Trino、ClickHouse、PostgreSQL、Oracle、SqlServer、dm等
  • 检查规则:内置空值检查、非空检查、枚举检查等27个检查规则
  • 作业执行引擎:已支持SparkLocal两种执行引擎。Spark 引擎目前仅支持Spark2.4版本,Local 引擎则是基于JDBC开发的本地执行引擎,无需依赖其他执行引擎。
  • 告警通道:已支持 邮件、飞书、钉钉和企微
  • 错误数据存储:已支持MySQL本地文件(仅支持Local执行引擎)
  • 注册中心:已支持 MySQLZooKeeper
2. 支持多种运行模式
  • 提供Web页面配置检查作业、运行作业、查看作业执行日志、查看错误数据和检查结果
  • 支持在线生成作业运行脚本,通过datavines-submit.sh来提交作业,可与调度系统配合使用
3. 容易部署&高可用
  • 平台依赖少,容易部署
    • 最小仅依赖MySQL既可启动项目,完成数据质量作业的检查
  • 支持水平扩容,自动容错
    • 无中心化设计,Server节点支持水平扩展提高性能
    • 作业自动容错,保证作业不丢失和不重复执行
  1. 文档详细

Datavines 的插件式开发实践极具良好的扩展性,官方文档也提供了详细的插件开发步骤。

图片

最终毫无疑问,Datavines 脱颖而出!Datavines 不仅源码和技术栈现代化,而且它的定位不只是数据质量监控平台,它在不断打磨成新一代数据可观测性平台(包含数据目录管理、数据质量监控、数据趋势洞察、数据血缘等),给我们探索和理解数据开辟了广阔的想象空间。

落地实践

与现有系统集成

前面提到目前长桥数据平台是架在微众开源的 WeDataSphere 上,所以我们的第一步要做的是与 WeDataSphere 集成,考虑到用户习惯了 Qualitis 配置页面,我们依然沿用,但我们同样保留了 Datavines 原生页面供用户进一步观察与排查。下图展示了 Qualitis 数据质量节点在整个工作流中的位置(所有节点都是通过左侧节点模块拖动到右侧工作流画布中)

图片

双击数据质量节点,依然会出现 Qualitis 的配置页面,但背后对接的已经是 Datavines。

图片

关键实现:

实现皮是 Qualitis,核是 Datavines 的关键在于我们侵入 DataSphereStudio 的 qualitis-appjoint ,主要改写了其中的 submit 、state、result 等方法去调用 Datavines 二开暴露出来的 http 接口。同时历史质检任务迁移需要将 where 条件里的 spark 语法转为 trino 语法(初始化逻辑实现,不需要用户一个一个去转化)。我们依然提供了 Datavines 的 web 访问入口:

图片

在这个落地实践中,我们平滑地过渡到了 Datavines,可以看出来 Datavines 功能的完备性直接能对标上几近成熟的企业级数据质量解决方案 Qualitis ,当然各有千秋。

支持业务

多租户

公司处在 SaaS 化和租户化的业务环境中,所以会产生数据源&任务 1->n 的隔离复制(通过我们自研的 datapub 平台进行租户下发;数据源的命名规则上采取"团队_数据源类型_数据源名称_租户名"),可以发现界面的展示依然友好,也可以右上角切换为列表展示。

图片

后面与项目作者的交流过程中得知,Datavines 的 Workspace 是他为了支撑租户化而做,这种优雅的方式没被当时的我钻研到,实为憾事。Datavines 当然还有更多优秀的功能,很多时候我在应对公司业务场景时不免因为折中而错过。

阈值模版

阈值模版支持不同工作日不同阈值,因为每周一有社区活动,每周五有结单业务,所以会造成不同工作日不同阈值的需求。该功能将会与“支持港美股交易日历”共同应对质量校验的周期性。

图片

实现原理:

在上一步我们创建好阈值模版后,就可以在质检任务中进行阈值模版的选择;当你选择好阈值模版后,质检任务每次运行都会判断当天是周几,便从阈值模版取到相应星期的阈值,如果取值为空时,会取默认的校验阈值。

图片

阻塞功能

开启时当校验不通过会阻塞下游任务的运行且告警;关闭时不会阻塞下游任务,只会进行告警。

图片

补数时跳过质检

补数时提供数据质量跳过选项是借助 Redis 做个人全局限时的 skipDQC

图片

支持容器化

在公司应用资源收缩到 k8s 的大背景下,将 Datavines 进行了容器化,容器化的关键大多是 Dockerfile,简单如下:

图片

提交到公司的 Maersk 平台上便可轻松发布:
图片

注意⚠️:容器化的过程中注意改写 OSUtils 类中的 availablePhysicalMemorySize 和 loadAverage 方法。

借助开源反哺开源

知道 Datavines 是因为公众号文章《一站式数据可观测性平台 Datavines 正式开源啦》,标题上的可观测三个字夺人眼球,阅读文章后顿感这不正是我们想要的。在后面的部署和体验中发现 Datavines 的搭建很简单,页面很美观、上手很简单、操作很自然、功能很齐备,惊讶一个暂时没有 tag 的项目友好性&完整性上竟是如此恰到好处,时有惊艳。

加入社区

在我们将 Datavines 引入长桥数据平台的过程中遇到了一些 Bug ,比如 Sla related notification list error;同时结合公司业务需求,开发了飞书告警等功能,也积极回馈社区;其中一些 Feature 是做了普适性提交,比如飞书告警在我司层面需要@到专人,涉及到公司用户体系,与社区有一定差异。以下是提交的PR示例:

  • [Fix][SLA] Fix Sla related notification list error #194
  • [Feature][notification]Add Feishu Alarm #170

对社区的印象

Datavines 社区很活跃,主导者(GithubID:zixi0825)不仅是 Apache DolphinScheduler Committer,也是 Datavane 开源组织的创始成员,很明显的感受到他真是数年磨一剑的打磨 Datavines ,所以迟迟还没有正式 Release。在 Datavines 的用户交流群里,能很明显地感觉到越来越多的用户在调研和使用 Datavines、并有不少公司进行了投产。大家在群里积极反馈体验、改进、称赞和推广,作者和其他小伙伴积极及时响应。现在 Datavines 的贡献者来自全国各地,我相信很快也会来自全世界各地。

收益与期望

带来的收益:

  • Datavines 上线以后,数据质检达成 max40min 到 max1min 的运行时效;
  • 单纯数据质量的 web 板块 pv 降低 70% ,因为友好的告警内容足以排除质量问题;
  • 不再给 DolphinScheduler 展现容错能力的机会,因为 Datavines 本身具备合理的重试机制,当然数据质量问题导致的失败不会重试的;
  • 我们在实践中弱化了 Datavines 权限体系、Spark 执行引擎等功能,在后续的迭代中会逐渐打通,把 Spark 引擎作为大表质检的可选方案,收益 "on the way"

我们的计划:

  • 计划后续将 Datavines 作为业务数据字典的入口,实现"大小数据融合"场景中的元数据变更下放,push 下游自动化和自助化变更行为;
  • 为 text-to-sql 贡献一份力,与向量数据库能产生友好的元数据信息导入,比如枚举值的维护。
  • 接入公司的 promethus+grafana 大盘,让关键链路的质量告警被值班人员第一时间感知,特别是涉及到北极星指标&关键报表的数据

对 Datavines 进一步的期望:

  • 回到 Datavines 的初心——数据可观测:目前市面上有优秀的元数据产品如 odd-platform 、OpenMetadata 、Datahub 等,但我个人感觉不是很贴切国人的使用和交互方式,Datavines 有望在这一步上走出国人风采。

  • 告警机制:因为有时候数据质量的校验结果需要告知不同团队的成员,往往不会把他们拉到同一个告警群,所以还是期望 Datavines 能够设计一套用户体系,去关联飞书、钉钉或者企业微信。

  • 批量创建能力:比如针对同一张表可以选择多个字段对同类质检规则进行高效创建。

  • 运维能力:希望有个统一运维质检任务的地方,可以根据团队或者其他条件筛选,执行跳过、终止等资源紧张时的取舍操作。

  • 增加监控对象:是否能做一些指标监控或者对接BI平台做报表数据监控

  • 搞个 Datavines logo 的 svg 图吧哈哈~

加入我们

Datavines 的目标是成为更好的数据可观测性领域的开源项目,为更多的用户去解决元数据管理和数据质量管理中遇到的问题。在此我们真诚欢迎更多的贡献者参与到社区建设中来,和我们一起成长,携手共建更好的社区。

   图片