背景
● 公司数据源多种多样,互相依赖也多,全靠文档(文档搜索能力极差)以及大脑记忆
● 强依赖经验(老员工),对新人极度不友好
● 不知道本部门的数据走向 下游有哪些数据引用,比如 ogg/redis/es/mq/数据同步任务等
以上问题,导致发版时经常遗漏脚本(比如mysql新增了字段 es或者oracle表没有加等)
基于以上原因,决定做一个系统,将所有数据源以及数据流向进行维护,方便查看血缘关系,但是苦于无人理解这个项目要做什么,以及要怎么做,导致没人支持去做,也就意味着没有对应的开发资源给我
最后决定自己去做一个,做出来了,如果觉得还行,再进行推广;反之,就当是自己学习的一个项目
技术选型
前面也提到了,没有人支持,以及对应的开发资源给我,但是本人又非常想尝试一下,决定前后端自己做(java后端开发,不会前端,海豚的前端还是有些深度的)
之前一直有在了解dolphinscheduler(海豚调度)项目,看过一部分源码,并且在阿里云搭建过集群,将其中一部分功能用到之前做过的项目中(比如基于mysql的注册中心/调度/DAG等等)
在想做这个项目之前,就决定参考dolphinscheduler(海豚调度)的任务形式去做,前端可拖拽
,并且形成DAG图
,可以使数据流向一目了然
,也是我认为最适合的方式
该项目非常依赖前端,前端体验差,也就意味着没人愿意用
最后决定前后端都参考dolphinscheduler的架构,进行开发
前端
- vite
- vue3
- jsx
- AntV X6(图编辑)
- echarts
- naive-ui
- pinia
- vue-router
- axios
- typescript
…
海豚调度的前端确实很有深度,看懂还是有点困难的,特别是没做过前端的,但是结构设计很不错,我很喜欢,扩展性很强
后端
- jdk17(新项目采用17先做出基础功能,后续准备尝试jdk21)
- springBoot(单体架构足够)
- mybatis/mybaits-plus
…
规划
采用海豚调度的架构,先做第一版
首页
汇总维护的信息 进行数据资产/血缘大盘展示
安全中心
维护租户/用户/告警组等基础信息
监控中心
- 监控服务器/数据库指标信息
- 审计日志
数据源中心
- 维护数据源信息(mysql/oracle等)
- 可以根据源信息 获取数据库schema信息
- 进行后续的字段级展示/探测/分析/
项目管理
- 以项目为维度进行维护(一个部门可以是一个或多个项目,只有管理员可以创建项目(防止维护的到处都是,不知道采用哪一个))
- 创建血缘基本信息
- DAG图展示/图谱展示
血缘探测
- 探测所有项目维护的信息,进行探测,分析
- 未维护的信息 比如触发器/存储过程等
- 告警
DBMS管理
为什么希望有DBMS功能?
- 每次都需要开发手写DDL语句,
繁琐
浪费时间
规范不统一
,比如强制要求有创建时间,创建人等字段以及注释- 测试环境创建完脚本后 可能N天/N月后才会发布到生产,目前是开发自己
记录脚本信息
(记事本/语雀/飞书文档等)- 手动记录,血缘系统
无法自动感知到数据变更
虽然99.99%的概率会被老板否决,但是还是决定做一个,自己尝试一下,自己用,用来记录自己开发的脚本,减少自己漏发脚本可能导致的生产事故
SQL血缘解析(还没考虑好要不要做)
可以先看下下面的开源项目
● SQLLineage
● sqlflow
openAPI
● 对外提供查询接口 输入目标表 ,返回所有依赖的任务 发布时校验脚本
● …
演示
采用海豚调度的架构
创建节点
mysql
oracle
redis
es
其他
- 触发器
- 存储过程
- link
- clickhouse
- doris
- spark
- flink
- cdc
- http
- shell
- 数据同步任务(datax/sqoop/seatunnel)
- xxlJob
- kafka
- rabbitmq
● …
总结
主要希望解决公司数据资产维护以及数据血缘问题,当然最后大概率成为自己学习的一个项目