Skip to content

策略中台(yidun-mplatform-strategy) ​

判定链路的「总指挥」:决定一次检测该跑哪些策略集、按什么顺序调 checker、结果怎么融合。

1. 业务定位 ​

解决三个问题:

  1. 客户在控制台配置的策略,如何在线程内实时、一致、可观测地执行。
  2. 客户开通新业务/新产品时,如何自动搭建默认策略体系。
  3. 判定结果如何沉淀为检测记录,供离线验证与历史查询。

三路入口:execution(在线检测方调用)、management(内部运营后台,经 ShenYu 网关)、center(官网 SaaS 客户后台)。

2. 架构与模块划分 ​

模块类型职责
execution/dubbo-providerapp在线判定主链路,对外核心 RPC
management/dubbo-providerapp策略/规则/名单/指标/预处理的配置管理编排,策略数据唯一写入方
center/dubbo-providerapp官网 SaaS 数据聚合、业务事件驱动的策略初始化、命中统计
storageapp检测记录 Kafka 消费入库(ES/HBase)
offlineapp离线验证任务(Elastic-Job)
execution/contractjar执行契约 v1/v2/v4/v5 四套并行
service/base、service/businessjarDAO 与共享业务
history-datajar历史数据查询 API(独立发布)

分层:协议入口(三个 dubbo-api)→ 编排服务(management + service/business)→ 执行引擎(execution 的 engine/cache/remote)→ 存储(storage + service/base)。

3. 核心链路 ​

编排要点:

  • 通用集与私有集并发,单个策略集独立超时,超时只降级该集。
  • checker 通过 Dubbo 远程调用,顺序由策略过程配置决定。
  • 结果融合时,正式命中与试运行命中分离,处置只取正式命中。
  • 检测记录投递 Kafka 后由 storage 落 ES/HBase,不阻塞回包。

4. 关键数据模型 ​

对象关键字段说明
策略集 StrategySetDomode(NORMAL=1 常规 / POST=2 后置)、isPrivate决定执行阶段与是否客户私有
执行上下文 Contextinput、prepro、output、summaryv1/v2/v4/v5 多版本并存
规则集结果 StrategySetResult命中规则、试命中规则、失败规则融合的最小单位
检测记录输入、判定结果、耗时Kafka → ES/HBase

多版本契约是最大坑点:execution/contract 下 v1/v2/v4/v5 四套结构并行,改动必须保证 ContextConverter 转换正确。

5. 存储与中间件 ​

组件用途
MySQL + MyBatis策略、规则、策略集配置
Redis策略元数据缓存、分布式锁
Elasticsearch检测记录检索
HBase检测记录明细(大字段)
Kafka检测记录、命中统计、业务事件消费
Apollo各应用独立命名空间配置
Elastic-Job离线验证、命中统计、缓存刷新

6. 设计模式与扩展点 ​

扩展点位置说明
YAML 流水线center/pipeline用 condition + actionType(如 create_strategy_if_not_exist、online_rule)声明「业务开通时自动建什么」,不改 Java 即可扩展
策略集名称处理器BusinessPrivateStrategySetNameHandler私有策略集命名规约
验证任务offline离线回放历史数据验证规则效果
结果融合StrategySetProcess多策略集结果合并策略

7. 上下游依赖 ​

方向模块说明
上游intelligent-risk、device-fingerpint在线检测调用执行服务
上游api-gateway管理后台请求路由
上游mplatform-business订阅业务/产品/套餐事件,触发策略初始化
下游checker-preprocess / checker-namelist / checker-metrics / checker-rule四类判定能力
下游mplatform-meta字段、风险标签定义
下游mplatform-clickhouse命中统计数据源
下游union-admin权限与操作日志

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

  • execution 是判定主链路,任何改动必须评估对线上拦截率的影响,先在预上线验证。
  • 契约多版本不可混用:v1/v2/v4/v5 结构变更需同时改转换器,否则调用方反序列化失败。
  • 策略数据只能由 management 写入,其他应用禁止直写策略表。
  • 超时必须可降级:新增 checker 调用必须设置独立超时与降级分支。
  • 检测记录不允许阻塞主链路,写入异常只记日志。

9. 关键代码索引 ​

主题路径说明
在线判定入口yidun-mplatform-strategy/execution/dubbo-provider/src/main/java/.../OnlineCheckService.java判定编排起点
任务拆分yidun-mplatform-strategy/execution/dubbo-provider/src/main/java/.../TaskCreatorV5.java通用/私有集拆分
任务执行yidun-mplatform-strategy/execution/dubbo-provider/src/main/java/.../TaskExecutorV5.java并发执行与超时
策略元数据缓存yidun-mplatform-strategy/execution/dubbo-provider/src/main/java/.../OnlineCheckStrategyMetaCache.java策略集配置缓存
策略管理yidun-mplatform-strategy/management/dubbo-provider/src/main/java/.../StrategyManagementProvider.java策略/策略集 CRUD
规则管理编排yidun-mplatform-strategy/management/dubbo-provider/src/main/java/.../RuleInfoServiceImpl.java规则状态机与上线准则
业务事件流水线yidun-mplatform-strategy/center/dubbo-provider/src/main/java/.../EventTriggeredPipelineExecutor.java自动初始化策略
检测记录入库yidun-mplatform-strategy/storage/src/main/java/.../CheckRecordConsumer.javaKafka 消费落库

10. 排查要点 ​

现象定位结论
某业务完全不判定看策略集元数据缓存是否有该业务策略未绑定或业务未开通,execution 直接返回空结果
只有部分规则生效看规则状态与所属规则集预上线规则只产生试命中
判定耗时突增看各策略集执行耗时单个 checker 慢或未超时降级
新业务没有默认策略看业务事件是否被消费center 未收到事件或流水线条件不匹配
检测记录缺失看 Kafka 投递与 storage 消费与判定结果是否正确无关
最近更新

内部资料,请勿外传