2. 规则引擎架构设计:整体架构图、模块划分
规则引擎是风控系统的核心决策组件,承担着将业务规则转化为可执行逻辑、在毫秒级完成风险判断的任务。一个生产级的规则引擎架构需要兼顾高性能、高可用与可扩展,通常采用分层解耦的设计思路。本节从整体架构切入,逐一拆解四个核心模块:规则管理、决策流、执行引擎、监控中心。
2.1 整体架构图
下图展示了规则引擎的宏观分层与模块间协作关系。请求从上游接入层进入,经过规则匹配、决策流编排、最终输出风险结果,同时所有运行时指标实时上报至监控中心。
架构要点:规则管理与决策流属于“编排层”,执行引擎属于“计算层”,监控中心属于“可观测层”。三层分离后,规则变更无需重启引擎,监控数据不阻塞主流程。
2.2 模块划分详解
四个模块各司其职,共同构成规则引擎的完整生命周期。下表从职责、核心能力、技术选型三个维度进行对比:
| 模块 | 核心职责 | 关键能力 | 推荐技术栈 |
|---|---|---|---|
| 规则管理 | 规则的增删改查、版本控制、灰度发布 | 可视化编辑器、规则克隆、生效时间窗、AB 测试 | MySQL + Redis + Git 式版本管理 |
| 决策流 | 策略编排、条件路由、优先级调度 | DAG 编排、熔断降级、并行/串行节点 | Drools / 自研 DSL + 流程引擎 |
| 执行引擎 | 规则匹配、表达式计算、结果聚合 | MVEL/SpEL 表达式、Rete 算法、缓存预热 | Java + 表达式引擎 + 本地缓存 |
| 监控中心 | 指标采集、链路追踪、实时告警 | QPS/延迟/错误率、规则命中率、慢查询追踪 | Prometheus + Grafana + Jaeger |
2.3 规则管理模块
规则管理是风控策略的“生产车间”,负责将业务语言转化为机器可执行的规则。其核心设计要点包括:
- 规则模型:每条规则包含规则编号、名称、优先级、条件表达式、动作、状态、生效时间、版本号等字段。
- 版本管理:每次规则变更生成新版本,支持版本回滚与差异对比,确保变更可追溯。
- 灰度发布:按流量比例或指定标签(如用户ID、设备指纹)灰度新规则,降低全量上线风险。
- 热加载:规则变更后通过配置中心推送或定时轮询,执行引擎无需重启即可生效。
生产建议:规则管理模块应提供 RESTful API 供外部系统调用,典型接口包括:
POST /rules(创建)、PUT /rules/{id}(更新)、POST /rules/{id}/publish(发布)。API 设计需包含幂等性与版本校验。
2.4 决策流模块
决策流负责将多条规则编排成有向无环图(DAG),支持条件分支、并行执行、熔断降级等高级策略。一个典型的决策流包含以下节点类型:
| 节点类型 | 说明 | 示例场景 |
|---|---|---|
| 开始节点 | 决策流的入口,接收请求上下文 | 接收风控请求参数 |
| 规则节点 | 执行单条或多条规则匹配 | “IP 黑名单”规则组 |
| 条件节点 | 根据表达式结果路由到不同分支 | 若风险分 > 80,走拒绝分支 |
| 聚合节点 | 合并多个并行分支的结果 | 取多个模型评分的加权值 |
| 结束节点 | 输出最终决策结果(通过/拒绝/人工审核) | 返回风险等级与处置建议 |
避坑提醒:决策流设计时需注意循环检测与死锁预防。DAG 中严禁出现闭环,否则执行引擎将陷入无限循环。建议在发布决策流时自动进行拓扑排序校验。
2.5 执行引擎模块
执行引擎是规则引擎的“心脏”,负责将规则与决策流转化为实际的计算任务。其核心设计要点包括:
- 规则匹配算法:采用 Rete 算法或线性匹配,根据规则条件快速筛选命中规则。Rete 算法适合规则多、条件重复的场景,可大幅减少重复计算。
- 表达式计算:支持 MVEL、SpEL、Groovy 等表达式语言,动态解析规则条件。表达式需预编译并缓存,避免运行时反复解析。
- 并发执行:决策流中的并行节点通过线程池执行,需设置合理的超时时间与拒绝策略,防止慢规则拖垮引擎。
- 缓存策略:规则定义、表达式 AST、频繁查询的外部数据(如 IP 库)应使用本地缓存(Caffeine)或分布式缓存(Redis),减少 I/O 开销。
性能指标参考:生产级执行引擎在单机 8 核 16G 配置下,应达到 QPS ≥ 5000,P99 延迟 ≤ 20ms。若低于此标准,需优先排查表达式解析开销与缓存命中率。
2.6 监控中心模块
监控中心是规则引擎的“仪表盘”,提供从宏观到微观的全方位可观测性。核心监控维度包括:
| 监控维度 | 关键指标 | 采集方式 | 告警阈值示例 |
|---|---|---|---|
| 流量 | QPS、TPS、请求量趋势 | Prometheus 埋点 | QPS 突降 > 50% 持续 1 分钟 |
| 延迟 | P50 / P90 / P99 延迟 | Micrometer + 链路追踪 | P99 > 100ms 持续 30 秒 |
| 错误 | 异常率、超时率、熔断次数 | 日志采集 + 指标聚合 | 错误率 > 1% 持续 1 分钟 |
| 规则命中 | 各规则命中次数、命中率分布 | 业务埋点 + 离线统计 | 某规则命中率突增 > 200% |
| 资源 | CPU / 内存 / GC 频率 | JMX + 操作系统指标 | CPU > 80% 持续 5 分钟 |
监控最佳实践:建议为每个规则和决策流分配唯一 ID,并在执行上下文中透传。监控中心通过该 ID 实现规则级链路追踪,快速定位“哪个规则导致延迟飙升”或“哪个决策流频繁熔断”。
2.7 模块间协作流程
一次完整的规则引擎调用,四个模块的协作顺序如下:
- 规则管理:运维人员通过管理后台配置规则与决策流,发布至配置中心。
- 执行引擎:启动时从配置中心拉取最新规则与决策流,构建内存中的规则网络与 DAG 拓扑。
- 接入层:风控请求到达,携带设备指纹、用户信息、行为数据等上下文。
- 执行引擎:根据请求上下文,按决策流 DAG 顺序执行规则节点,命中规则后执行对应动作(拒绝/通过/人工审核)。
- 监控中心:旁路采集每一步的耗时、命中结果、异常信息,聚合后写入时序数据库。
- 结果返回:执行引擎将最终决策结果返回给调用方,同时监控中心根据告警规则判断是否需要触发通知。
关键设计原则:监控中心必须旁路采集,不能阻塞主流程。推荐使用异步队列(如 Kafka)将指标数据与业务请求解耦,即使监控系统宕机,规则引擎仍可正常运行。