元数据中心(yidun-mplatform-meta)
全平台「字段、枚举、风险标签、风险等级」的统一定义处。改这里等于改所有下游的词汇表。
1. 业务定位
解决「同类元数据各服务各自维护、口径不一」的问题。它托管六类定义:
| 类别 | 内容 |
|---|---|
| 业务域 | 业务组(SKU)、业务类型、行业、适用层级 |
| 配置 | 配置项 ConfigDef、配置类型 ConfigType |
| 枚举 | 枚举类 EnumClass、枚举定义 EnumDef |
| 字段 | 字段集 FieldSet、字段定义 FieldDef |
| 风险等级 | RiskLevelSet / RiskLevelDef |
| 风险标签 | RiskTagSet / RiskTagDef |
下游所有服务(策略、规则、名单、指标、预处理、智能风控、SDK 接入)都通过 yidun-meta-*-client 消费这些定义。
2. 架构与模块划分
| 模块 | 类型 | 职责 |
|---|---|---|
management/front-dubbo-api | Dubbo | 面向控制台(经 ShenYu 网关) |
management/back-dubbo-api | Dubbo | 面向其他后端系统(批量导入等) |
management/management-server | app | 管理 API、同步调度、metaio 导出 |
service/business、service/base | jar | 13 个业务 Service、13 个 Manager + DAO |
event-client/core-client、config-client、field-client、risktag-client | jar | 下游消费端 SDK |
contract、common | jar | 跨库共享语义、通用工具 |
3. 核心链路
两条保证一致性的机制:
- 实时推送:变更后立即发事件。
- 兜底对账:定时任务按
modifyTime > lastSyncTime扫描补推,启动时回补 12 小时。
4. 关键数据模型
13 张核心表:business_group、business_group_industry、business_type、config_def、config_type、enum_class、enum_def、field_def、field_set、risk_level_def、risk_level_set、risk_tag_def、risk_tag_set。
每个实体带两个作用域字段:
suitableLevel(适用层级):决定能被哪些 SKU/业务类型复用。scope(作用域):决定可见范围(平台内置 / 业务自定义)。
5. 存储与中间件
| 组件 | 用途 |
|---|---|
| MySQL | 13 张元数据表 |
| Redis | 部分查询缓存、分布式能力 |
| 事件中台 | 变更分发唯一通道 |
| Apollo | 配置热刷新(ApolloRefresher) |
6. 设计模式与扩展点
| 扩展点 | 位置 | 说明 |
|---|---|---|
| 事件客户端 | event-client/* 四个 SDK | 下游按数据类型订阅 |
| 启动预热 | ApplicationPreHeater + ParallelPreheatTask | 启动并发预热元数据,避免首请求抖动 |
| 环境迁移 | metaio 子包 SqlCreator | 把一个 SKU 的全部元数据导出为 SQL insert |
| 批量导入 | provider/back/* | 逐条校验,code/type 为空则跳过 |
7. 上下游依赖
| 方向 | 模块 | 说明 |
|---|---|---|
| 上游 | mplatform-event | 事件发布 |
| 上游 | union-admin | 操作日志 |
| 下游 | mplatform-strategy、checker-rule、checker-namelist、checker-metrics、checker-preprocess、intelligent-risk、mplatform-business、irisk-sdk-server | 消费定义缓存 |
8. 工程约束与变更红线
- 实体字段/事件类型码/缓存 Key 不能随意改:所有下游都按此反序列化,改动等于破坏兼容。
- 禁止下游直读元数据 DB:只能通过 client 缓存或 back-dubbo-api。
scope与suitableLevel必须正确:配错会导致元数据「查不到」或「被不该用的业务用了」。- 模块版本固定
1.0.0-SNAPSHOT:父 POM 明确要求,破坏分层构建。 - 创建业务类型时字段集自动创建由
BusinessTypeProviderForFront.createFieldSet编排,人工干预需确认无重复。
9. 关键代码索引
| 主题 | 路径 | 说明 |
|---|---|---|
| 管理服务入口 | yidun-mplatform-meta/management/management-server/src/main/java/.../ManagementApplication.java | 可执行服务 |
| 缓存同步 | yidun-mplatform-meta/service/business/src/main/java/.../sync/CacheSyncService.java | 发事件 |
| 兜底对账 | yidun-mplatform-meta/service/business/src/main/java/.../sync/AbstractCacheSyncTask.java | 扫表补推 |
| 字段集业务 | yidun-mplatform-meta/service/business/src/main/java/.../FieldSetService.java | 字段集 CRUD |
| 字段事件 SDK | yidun-mplatform-meta/event-client/field-client/src/main/java/.../FieldEventListenerPlugin.java | 下游消费 |
| 迁移导出 | yidun-mplatform-meta/management/management-server/src/main/java/.../metaio/SqlCreator.java | 导出 SQL |
10. 排查要点
| 现象 | 定位 | 结论 |
|---|---|---|
| 新字段在规则里选不到 | 看字段集 suitableLevel/scope 与下游缓存 | 作用域不对或缓存未刷新 |
| 下游报字段不存在 | 比对 fieldCode 与 jsonPath | 字段定义未同步到该下游 |
| 风险标签 ID 冲突 | 看标签集作用域 | 不同业务自定义标签重名 |
| 改了元数据但列表不变 | 看事件是否发出、下游最后同步时间 | 事件漏发,等对账任务或手动触发 |
| 环境迁移后数据缺失 | 看导出 SQL 是否覆盖全部实体 | metaio 未包含该实体类型 |