Skip to content

数据中台全阶段交付:Phase 1-4 七大业务服务 + 安全修复(升级见 #19) - #20

Merged
jackluo2012 merged 12 commits into
mainfrom
phase1/data-platform
Oct 10, 2026
Merged

jackluo2012 merged 12 commits into
mainfrom
phase1/data-platform

Conversation

@jackluo2012

@jackluo2012 jackluo2012 commented Oct 10, 2026 •

Copy link
Copy Markdown
Owner

Closes #14
Closes #15
Closes #16
Closes #17
Closes #22
Closes #23
Part of #13
Fixes #18(P0/P1;P2 pb 清理随下次重生成)
Ref #21(job-rpc 代码就绪,真实 DolphinScheduler 3.x 联调待实例)

基于升级分支 #19,合并顺序:先 #19 后本 PR。

交付总览(10 个 rpc 服务 + 网关 13 组路由)

Phase 1:数据中台最小闭环 ✅(实测)

服务 端口 实测亮点
datasource-rpc :8085 密码 AES-GCM 加密/探活 1ms
metadata-rpc :8086 采集 35表383列;检索含中文 comment(实测修复"投票"盲点)
datasvc-rpc :8087 OneService 执行链:签名→限流→授权→缓存→脱敏(实测 sname→"****"、cache_hit)
catalog-rpc :8088 资产目录/申请审批状态机

Phase 2 ✅(实测)

quality-rpc :8089 6 种规则防注入,RunJob 实测 2 规则 2 通过
metric-rpc :8090 原子/派生指标,非法聚合实测拒绝
tag-rpc :8091 打标画像实测正确(1001→yes/1002→no),分号注入拒绝

Phase 3/4 ✅(代码+单测就绪,外部引擎联调待实例)

job-rpc :8092 DS OpenAPI 管控面(httptest 22 用例锁协议);部署无 DS 实测返回明确配置指引;触发前置校验实测拒绝
ide-rpc :8093 脚本版本自增实测 1→2;RunScript 真实 SELECT 返数据 3ms;非 SELECT 实测拒绝
ai-rpc :8094 语义层路线:检索元数据+指标→打分排序→可选 LLM(OpenAI 兼容/失败降级)→全程审计;实测"投票相关的表"命中 votecount 等实体

安全(#18)

  • P0 鉴权恢复:Usercheck 防越权 + Admincheck BasicAuth fail-closed,无 token 实测 401
  • P1 微信 SDK:chanxuehong→silenceper/v2,签名官方向量锁定;修 3 处存量 bug

质量数字

  • 14 个包 100+ 单元测试全绿(含 -race),新代码 vet 零告警
  • 16 张 dc_ 表(phase1/2/3.sql),13 组网关路由(.api 真源同步)
  • 冒烟矩阵 30+ 步全通(11 服务并行拉起)

待真实环境联调(均有 TODO 标注 + issue)

- Go 1.17→1.26,grpc 1.84 / protobuf 1.36,jwt 迁 golang-jwt/v4(修 CVE-2020-26160)
- 七牛 SDK 迁 go-sdk/v7(旧仓库已归档);olivere/elastic v7.0.32
- redis.NewRedis 新签名修复(3 处);合并 user/votes/common 三组重复 main
- 参数解析适配新版 tag 规则:GET 类型补 form tag(.api 与 types.go 同步)
- 全部 .api 补 syntax="v1" 并适配新版 goctl 语法
- server.sh 镜像升级:MySQL 8.4 / Redis 8 / etcd 3.5.21 / 官方 ES 7.17.28
- sql.sql 全库统一 utf8mb4,修复 3 处导入报错的存量语法问题
- 修复存量 bug:按次数计票 SQL 参数错位(Sprintf 参数不匹配)、ES 日志占位符、占位 URL 测试
- 新增 docs/UPGRADE.md(升级明细与验证记录)、docs/ROADMAP.md(数据中台演进路线图)
- 4 个 proto 契约定稿(数据源/元数据/数据服务API/资产目录)
- goctl 1.10.2 生成 rpc 骨架(pb+_grpc 分离,config/example yaml 就绪)
- docs/schema/phase1.sql:9 张 dc_ 前缀表 DDL(utf8mb4,beid 多租户)
- docs/PHASE1.md:并行开发契约(目录/端口/架构约定/交付清单)
- datasource-rpc(:8085):数据源登记/探活,密码 AES-GCM 加密存储,with_secret 供内部服务换取 DSN
- metadata-rpc(:8086):information_schema 采集(24表276列实测),contains/lineage 关系,BFS 血缘,定版快照与版本对比
- datasvc-rpc(:8087):OneService 模式数据 API 执行器——HMAC 签名→IP白名单→限流→授权→参数白名单→:name 占位→Redis 缓存→field_mask 出口脱敏(实测脱敏+cache_hit 全通过)
- catalog-rpc(:8088):资产分类/登记(快照冗余)/申请审批状态机(乐观锁防并发重复审批)
- 网关:4 个 .api 契约 + 30 个路由 + 28 个编排 logic + ServiceContext 装配
- 修复 4 处 RawFieldNames 反引号失配(新 go-zero 对少列查询扫宽 struct 严格校验)
- 新增 42 个单元测试全部通过;docs/PHASE1.md 契约文档

Closes #14
Closes #15
Closes #16
Closes #17
- 3 个 proto 契约定稿 + goctl 骨架 + config/yaml
- docs/schema/phase2.sql:7 张 dc_ 表(质量规则/任务/结果、指标/关系、标签对象/定义/值)
- 端口 :8089/:8090/:8091
- quality-rpc(:8089):6 种质量规则(行数/非空/唯一/值域/一致性/波动),标识符正则白名单+数值占位符防注入,RunJob 真实跑库校验并落结果(实测 2 规则 2 通过)
- metric-rpc(:8090):原子/派生指标体系,聚合白名单校验(非法 agg_type 实测拒绝),派生引用原子绑定与级联删除保护
- tag-rpc(:8091):标签对象/定义/打标/画像;规则 SQL 强校验(仅 SELECT 单语句+as object_id/as tag_value 别名,分号注入实测拒绝);打标实测 1001→yes/1002→no 画像正确
- 网关:3 个 .api 契约 + 21 路由 + 21 编排 logic + ServiceContext 装配
- docs/schema/phase2.sql:7 张 dc_ 表
- UsercheckMiddleware:恢复 x-user-id 与 JWT claims uid 的防越权比对(此前整段注释直接放行)
- AdminCheckMiddleware:恢复 BasicAuth,凭据读 ADMIN_USER/ADMIN_PASS 环境变量,未配置 fail-closed 拒绝所有
- 新增 8 个单测;注意:客户端调用 votes/questions 等接口需携带 x-user-id 头
…P1)

- JS-SDK ticket+签名与 OAuth2 登录迁移,jsapi 签名以微信官方向量锁定单测
- 修复存量 bug:Country 误取 City(2 处)、GetUserInfo 错误被掩盖、ticket 缓存 key 多租户串写
- TODO(回归):需真实公众号凭据验证 OAuth 与 JS-SDK(代码已标注)
- README:新增数据中台能力区块与快速体验指引
@jackluo2012 jackluo2012 changed the title Phase 1:数据中台 MVP——数据源/元数据/数据服务API/资产目录四大服务 数据中台 Phase 1 + Phase 2:七大服务(数据源/元数据/数据服务API/资产目录 + 质量/指标/标签)+ 安全修复 Oct 10, 2026
- 3 个 proto 契约 + goctl 骨架 + config(ai 含可配置 LlmConf)
- docs/schema/phase3.sql:dc_sync_task/dc_ide_script/dc_ask_log 三表
- 端口 :8092/:8093/:8094
- job-rpc(:8092):同步任务管控面(DolphinScheduler OpenAPI 客户端以 httptest 22 用例锁定协议),DS 未配置/不可达部署返回明确原因(实测),触发/状态聚合/调度器运维视图
- ide-rpc(:8093):SQL 脚本版本管理(保存自动 version+1,实测 1→2),RunScript 安全闸(仅 SELECT 单语句,非 SELECT 实测拒绝,行数保护截断),经 DSN 真实执行(实测返回 base_app 数据 3ms)
- ai-rpc(:8094):AI 问数语义层——关键词提取(停用词)→检索元数据+指标→打分排序→可选 LLM(OpenAI 兼容/可配置)→LLM 失败降级纯检索→全程 dc_ask_log 审计(实测:'投票相关的表'命中 votecount/viewcount 等实体)
- 元数据检索增强:keyword 增加 comment 匹配(中文场景按表/列注释命中,实测修复'投票'检索盲点)
- docs/schema/phase3.sql:dc_sync_task/dc_ide_script/dc_ask_log
- 网关:3 个 .api + 13 路由 + 13 编排 logic

Closes #22
Closes #23
Part of #13(#21 job-rpc 代码就绪,真实 DolphinScheduler 联调待实例)
@jackluo2012 jackluo2012 changed the title 数据中台 Phase 1 + Phase 2:七大服务(数据源/元数据/数据服务API/资产目录 + 质量/指标/标签)+ 安全修复 数据中台全阶段交付:Phase 1-4 七大业务服务 + 安全修复(升级见 #19) Oct 10, 2026
- 10 个 .api 的 @server 增加 jwt: Auth(datasvc 拆管理组与 execute 外部入口,后者由 app_key+HMAC 签名保护)
- 14 组路由重新生成挂 WithJwt;无 token 实测 401、带 token 实测 200
- 中台管理接口(删数据源/执行质量任务/打标/IDE 等)不再匿名可调
- ai-rpc 新增 AskAndRun:检索→LLM 生成 SQL→经 ide 安全闸自动执行→返回数据(执行失败降级业务态,9 单测);网关 /ai/ask_and_run 路由与编排
- CI:GitHub Actions(build/vet 存量告警过滤/test -race/go mod verify)
- 部署:docker-compose 一键全栈(11 服务+依赖 healthcheck+initdb 自动导表)+ 多阶段 Dockerfile + deploy/docker 11 份容器化配置
- Postman 中台集合:11 组 67 请求(自动 Bearer token + login Tests 联动)
- 存量修复:etc/datacenter-api.example.yaml 的 questions.rpc 与 DataSourceRpc 连行(原文件复制即坏)
首跑失败原因:存量 pb 值传递告警有两种措辞('lock by value' 与 'copies lock value'/'copies lock'),
原过滤只匹配前者,导致 15 条存量告警误报为新增。本地复现验证过滤后零残留。
@jackluo2012
jackluo2012 merged commit c89d003 into main Oct 10, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment