Skip to content

规则引擎(yidun-checker-rule) ​

把「客户配置风控条款」的诉求,翻译成一次请求上的布尔判定 + 异步处置动作。

1. 业务定位 ​

规则(Rule)= 若干条件(Condition)+ 命中后的动作(Action);规则归入规则集(RuleSet),按优先级执行。

  • 上游:策略中台按 ruleSetCode 调用执行面 Dubbo(execute / executeV2 / executeV3 / executeRulesBatched);执行上下文中的 prepro.* 已由预处理准备好。
  • 下游:命中结果三分类回传;带动作的规则经 Kafka 触发加名单、点水任务、信用评分;命中明细进 ClickHouse 做统计。

2. 架构与模块划分 ​

模块类型职责
common、domainjar枚举/常量、DO/BO/上下文
service/base、service/businessjarDAO/Manager/缓存、业务服务
management/dubbo-api + dubbo-providerDubbo规则/条件/动作/规则集 CRUD 与状态流转
execution/dubbo-api + dubbo-providerDubbo执行入口、规则集缓存、结果组装
cache/dubbo-providerDubbo把 DB 配置转成可执行模型 ClientRuleSet 并缓存
rulesdk/rule-clientjar内嵌求值 SDK:条件组合、QLExpress
mqappKafka 消费执行异步动作
schedulerapp命中统计任务
yidun-mplatform-rule-contractjar跨层共享契约

3. 核心链路 ​

执行侧的三条纪律:

  1. 执行期不查 DB:规则集配置全部来自 cache 模块推送的可执行模型。
  2. 求值有硬超时:QLExpress 沙箱单次 100ms,避免一条复杂表达式拖垮整个请求。
  3. 动作不阻塞判定:命中后的处置一律走 Kafka,判定线程只负责算出结果。

4. 关键数据模型 ​

对象说明
RuleInfo规则主体,含状态、优先级、所属规则集
RuleCondition条件,支持 AND / OR / 命中 N 条 / 自定义表达式
RuleAction动作:加名单(ListSourceEnum.RULE_HIT)、点水任务、信用评分
RuleSet规则集合,按优先级排序执行
ClientRuleSet缓存层的可执行模型,由 RuleSetCacheService 生成

规则状态机:未上线(1) → 预上线(2) → 已上线(3) → 已失效(4) / 已锁定(5) / 已失效·熔断(6)。

5. 存储与中间件 ​

组件用途
MySQL规则/条件/动作/规则集配置与快照
Redis + 本地缓存可执行规则集模型(common/validate 两套 Guava 缓存)
Kafka命中明细、统计、异步动作
ClickHouse命中统计与报表
QLExpress条件表达式求值(沙箱)

6. 设计模式与扩展点 ​

扩展点位置说明
条件组合模式RuleSetHandler → RuleHandler → ConditionHandler新增组合方式需扩展 handler
表达式引擎QlExpressServiceV2单例沙箱,操作符集中管理
动作处理器AbstractRuleActionExecuteHandler新增动作类型实现子类并注册
快照TakeSnapShot / SnapShotInterceptor规则变更留痕,支持对比与回滚

7. 上下游依赖 ​

方向模块说明
上游mplatform-strategy按 ruleSetCode 调用执行面
上游checker-preprocess提供 prepro.* 富化字段
上游策略中心 / 客户自定义规则控制台经 operatorSite 区分管理入口
下游checker-namelist加名单动作写名单库
下游mplatform-clickhouse命中统计
下游mplatform-metafieldCode → jsonPath、风险标签/等级缓存
下游union-admin配置变更操作日志

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

  • 规则状态流转必须校验:删除前校验 deleteAbleStatusList,上线依赖命中率与验证时长准则。
  • 执行期禁止直查数据库,缓存未命中时降级而非回源。
  • 动作必须幂等:Kafka 至少一次投递,重复消费不能重复加名单。
  • 表达式改动需回归:条件语义变化会直接改变线上拦截率,必须用试运行验证。
  • 多入口权限隔离:operatorSite 决定是策略中心还是客户自定义,越权修改是安全事故。

9. 关键代码索引 ​

主题路径说明
规则管理yidun-checker-rule/management/dubbo-provider/src/main/java/.../RuleInfoMgmtServiceImpl.javaCRUD 与状态流转
执行核心yidun-checker-rule/execution/dubbo-provider/src/main/java/.../RuleExecuteService.java取缓存、并行执行、组装、投递
规则集缓存yidun-checker-rule/cache/dubbo-provider/src/main/java/.../RuleSetCacheService.javaDB → ClientRuleSet
条件求值yidun-checker-rule/rulesdk/rule-client/src/main/java/.../v2/QlExpressServiceV2.java沙箱表达式引擎
动作消费yidun-checker-rule/mq/src/main/java/.../RuleActionConsumer.java异步处置
状态枚举yidun-checker-rule/yidun-mplatform-rule-contract/src/main/java/.../RuleStatusEnum.java规则状态机

10. 排查要点 ​

现象定位结论
规则配了但不命中看条件引用的字段在执行上下文里是否有值多为预处理未产出该字段,或字段 code 写错
命中但没动作看动作消息是否投递、消费是否堆积动作异步执行,回包不含结果
命中率突然下降看规则集缓存版本与规则状态缓存未刷新或规则被下线
执行慢看单条规则表达式耗时表达式过于复杂触及 100ms 超时
试运行规则不生效确认规则状态预上线只产生试命中,不参与处置
最近更新

内部资料,请勿外传