4. 规则引擎入门:规则引擎概念、Drools/Aviator简介、规则与切片的绑定关系

4.1 规则引擎核心概念

规则引擎(Rule Engine)是一种将业务决策逻辑从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策的组件。它接受数据输入,解释业务规则,并根据规则输出决策结果。

在实时交易风控场景中,规则引擎是“大脑”,负责对每一笔交易进行快速、准确的判断。其核心价值在于:

  • 解耦:风控策略人员可以独立修改规则,无需开发人员介入代码部署。
  • 高效:采用RETE算法等优化技术,能在毫秒级完成大量规则的匹配与执行。
  • 可维护:规则以结构化方式存储,便于审计、追溯和版本管理。
关键术语:
事实(Fact):输入引擎的数据对象,如一笔交易记录。
规则(Rule):由条件(LHS)和动作(RHS)组成的逻辑单元。
规则库(Rule Base):所有规则的集合。
工作内存(Working Memory):引擎运行时存放事实和中间结果的区域。
规则引擎核心工作流程 规则引擎核心工作流程 输入事实 规则库 模式匹配 冲突解决 执行动作 输出结果 说明:事实进入工作内存,与规则库中的规则进行模式匹配,匹配成功的规则进入冲突解决阶段,最终执行优先级最高的规则动作。

4.2 Drools 与 Aviator 简介

业界主流的规则引擎方案中,Drools 和 Aviator 代表了两种不同的设计哲学。Drools 是重量级的全功能规则引擎,而 Aviator 是轻量级的表达式求值引擎。在实时风控场景中,两者常被组合使用。

特性维度 Drools Aviator
定位 全功能规则引擎(BRMS) 高性能表达式求值引擎
规则语言 DRL(Drools Rule Language) AviatorScript / 自定义表达式
推理机制 RETE 网络 + 前向链推理 直接编译求值,无推理
性能 适合复杂规则集(百条以上) 单条表达式纳秒级执行
适用场景 复杂策略编排、规则间依赖 简单阈值判断、特征计算
学习成本 较高 较低

4.2.1 Drools 规则示例

以下是一个典型的 Drools 规则(DRL 文件片段),用于判断交易金额是否超过单笔限额:

package com.risk.rules;

import com.risk.model.Transaction;

rule "单笔交易金额限额检查"
    salience 100
    when
        $tx : Transaction(amount > 50000)
    then
        $tx.setRiskLevel("HIGH");
        $tx.addHitRule("单笔交易金额限额检查");
        System.out.println("触发规则:单笔交易金额超过50000元");
end

4.2.2 Aviator 表达式示例

同样的逻辑,使用 Aviator 表达式可以写为:

// Aviator 表达式字符串
String expression = "amount > 50000 ? 'HIGH' : 'LOW'";

// 执行求值
Map<String, Object> env = new HashMap<>();
env.put("amount", 68000);
Object result = AviatorEvaluator.execute(expression, env);
// result = "HIGH"
选型建议:在实时风控系统中,通常使用 Drools 管理核心的复杂规则(如设备指纹关联、历史行为模式匹配),而将简单的阈值规则(如金额、次数、频率)交由 Aviator 处理,以降低延迟。

4.3 规则与切片的绑定关系

人群切片(Segment)定义了“对谁做风控”,而规则(Rule)定义了“做什么判断”。两者必须通过绑定关系(Binding)才能形成完整的决策单元。绑定关系决定了:

  • 作用域:该规则仅对特定切片内的交易生效。
  • 优先级:同一切片内多条规则的执行顺序。
  • 生命周期:规则在切片内的生效时间、灰度比例等。
规则与切片的绑定关系 规则与切片的绑定关系 人群切片 Segment_A: 新注册用户 Segment_B: 高净值用户 Segment_C: 异地登录用户 Segment_D: 夜间交易用户 ... 更多切片 绑定关系 Segment_A → Rule_1, Rule_2 Segment_B → Rule_1, Rule_3, Rule_5 Segment_C → Rule_4 Segment_D → Rule_2, Rule_4 多对多映射 规则库 Rule_1: 单笔限额检查 Rule_2: 累计次数检查 Rule_3: 设备指纹检查 Rule_4: 黑名单检查 ... 更多规则 绑定关系是风控策略配置的核心:一个切片可以绑定多条规则,一条规则也可以被多个切片复用。

4.3.1 绑定关系的实现方式

在系统实现层面,规则与切片的绑定关系通常通过配置中心或数据库表来维护。以下是一个典型的绑定关系表结构:

字段名 类型 说明
id bigint 主键
segment_id varchar(64) 人群切片唯一标识
rule_id varchar(64) 规则唯一标识
priority int 规则在该切片内的执行优先级(数值越小越优先)
status tinyint 绑定状态:1-启用,0-禁用
effective_time datetime 绑定生效时间
expire_time datetime 绑定失效时间
注意:绑定关系变更后,需要触发规则引擎的热加载机制,确保新配置立即生效。对于生产环境,建议采用灰度发布策略,先在小比例切片上验证新绑定关系,再全量推送。

4.3.2 运行时决策流程

当一笔交易进入风控系统时,完整的决策流程如下:

  1. 交易入参:接收交易请求,提取关键字段(金额、用户ID、设备ID、IP等)。
  2. 切片匹配:根据用户画像和交易上下文,匹配所属的人群切片(可能命中多个切片)。
  3. 规则加载:根据绑定关系,加载命中切片所关联的所有规则,并按优先级排序。
  4. 规则执行:将交易事实注入规则引擎,依次执行规则,收集命中结果。
  5. 决策输出:综合所有规则的输出,生成最终决策(通过/拒绝/人工审核)。
实战要点:在实时风控系统中,规则与切片的绑定关系是策略配置的核心。建议将绑定关系存储在分布式配置中心(如 Apollo、Nacos)中,支持动态下发和版本回滚。同时,建立完善的绑定关系血缘图,便于复盘时快速定位“某个切片下的某条规则为何被触发”。