Skip to content

数据预处理(yidun-checker-preprocess) ​

判定之前先把「脏数据」洗成「可比对的数据」:校验、归一化、富化,结果统一写进 prepro.*。

1. 业务定位 ​

策略与规则拿到的原始字段往往不可直接比较:

问题预处理动作
格式不统一(手机号带 +86、带空格)归一化
缺少判断依据(不知道 IP 归属地)富化(IP/号码/地址/画像/名单)
需要复杂变换Groovy 脚本
字段本身不可信校验(格式、证件校验位)

每套策略通过 预处理编码(prepareKey) 引用一组预处理配置,执行后结果合并回上下文 prepro.*。

2. 架构与模块划分 ​

模块类型职责
commonjar错误码、CommandTypeEnum、Groovy/号码/证件工具
domainjarDO/BO
service/base、service/businessjarDAO/缓存、配置 CRUD 业务
console/dubbo-api + dubbo-providerDubbo配置与脚本生命周期管理
execution/dubbo-api + dubbo-providerDubbo执行引擎 PreproExecutionProvider

分层:管理面(console → business → base)与执行面(execution → command → 外部数据源)分离,公共层 common。

3. 核心链路 ​

三条执行纪律:

  1. 执行期不查 DB:配置与脚本都来自本地缓存(PreprocessCache / PreprocessScriptCache)。
  2. 并发 + 总超时:多个预处理任务并发执行,单次执行有 300ms 上限,超时降级不阻塞判定。
  3. 统一转型:所有命令结果按元数据字段类型转换,避免类型错乱传到规则层。

4. 命令体系 ​

CommandTypeEnum 定义了 44 种命令类型,按语义分四类:

类别典型命令用途
校验手机号、身份证、邮箱格式校验过滤脏数据
变换截取、拼接、四则运算、脱敏构造新字段
富化IP 归属地、号码归属地、地址解析、画像查询、名单回查补足判断依据
脚本Groovy 脚本执行自定义逻辑

所有命令继承 AbstractPreChecker:统一参数解析(字段 code / 字段 path / 常量)→ 大小限制校验 → 执行 → 类型转换。

5. 存储与中间件 ​

组件用途
MySQL预处理配置、Groovy 脚本、模板
本地缓存配置与脚本(启动加载 + 变更刷新)
Redis部分命令的中间缓存
Groovy 引擎脚本沙箱编译执行(executeWithCache)

6. 设计模式与扩展点 ​

扩展点位置说明
命令类型CommandTypeEnum + *Command 类新增能力 = 新增枚举 + 实现类 + 前端配置项
外部数据源command/service/*新增数据源需实现统一查询接口
脚本PreprocessScriptManagementService脚本版本管理、操作日志
模板配置模板批量套用常见预处理组合

7. 上下游依赖 ​

方向模块说明
上游mplatform-strategy判定前按策略的 preproCodes 调用
上游checker-rule规则执行前置富化
上游device-fingerpint设备业务自建预处理配置
下游mplatform-meta字段定义(fieldCode → jsonPath、类型)
下游union-admin配置与脚本变更操作日志
下游Groovy 组件脚本沙箱执行

8. 工程约束与变更红线 ​

  • 超时是硬约束:任何命令都不能长时间阻塞,外部查询必须设超时。
  • 类型转换必须走元数据:绕过 MetaFieldTypeEnum 会造成规则条件类型不匹配。
  • 脚本必须沙箱执行:禁止在脚本中访问文件系统/网络。
  • 配置与脚本要留操作日志:预处理是最容易被误改的配置之一。
  • field/sql 版本化:表结构变更必须同步提交 SQL,否则部署建表失败。

9. 关键代码索引 ​

主题路径说明
执行入口yidun-checker-preprocess/execution/dubbo-provider/src/main/java/.../PreproExecutionProvider.javaDubbo 执行
执行核心yidun-checker-preprocess/execution/dubbo-provider/src/main/java/.../service/DataPreproChecker.java取配置、并发执行、合并
命令基类yidun-checker-preprocess/execution/dubbo-provider/src/main/java/.../command/AbstractPreChecker.java参数解析与转型
命令类型yidun-checker-preprocess/common/src/main/java/.../enums/CommandTypeEnum.java44 种命令字典
配置缓存yidun-checker-preprocess/execution/dubbo-provider/src/main/java/.../cache/PreprocessCache.java执行侧缓存
管理服务yidun-checker-preprocess/service/business/src/main/java/.../DataPretreatmentServiceImpl.java配置 CRUD

10. 排查要点 ​

现象定位结论
规则条件取值为空看 trace 里 prepro.* 是否产出预处理未配置、执行超时被降级,或字段 code 错
字段类型不匹配看元数据里字段类型定义命令输出类型与字段定义不一致
预处理整体变慢看任务耗时与外部数据源富化类命令超时,检查对外部服务的调用
脚本改动不生效看脚本缓存版本脚本缓存未刷新
改了配置但结果不变看配置缓存最后刷新时间执行侧未加载新配置
最近更新

内部资料,请勿外传