3. 决策引擎架构设计:模块组成、输入输出层、规则执行层、数据存储层
决策引擎是信贷策略编排的核心执行单元,其架构设计直接决定了策略的响应速度、可维护性与扩展性。一个生产级的决策引擎通常采用分层解耦的架构模式,将数据接入、规则计算、结果输出与持久化存储分离为独立模块。本节从模块组成、输入输出层、规则执行层、数据存储层四个维度展开架构设计详解。
3.1 决策引擎模块组成总览
决策引擎由以下核心模块构成,各模块通过标准化接口通信,形成可插拔的组件体系:
| 模块名称 | 职责说明 | 关键组件 |
|---|---|---|
| 输入适配层 | 接收外部请求,完成协议转换、参数校验与数据标准化 | API Gateway、请求解析器、字段映射器 |
| 规则执行层 | 编排并执行策略节点,驱动规则链、决策表、评分卡、模型调用 | 策略调度器、规则引擎(Drools/自研)、表达式计算器 |
| 数据存储层 | 持久化决策上下文、规则元数据、运行日志与结果快照 | 关系库、缓存、对象存储、时序库 |
| 输出适配层 | 封装决策结果,触发后续动作(拒绝、通过、人工审核、外部通知) | 结果组装器、事件发布器、回调处理器 |
| 监控与治理层 | 采集运行时指标、告警、链路追踪与灰度切换 | Metrics Collector、Tracer、Feature Flag |
架构原则:输入层与输出层完全对称,规则执行层无状态设计,数据存储层按读写分离与冷热分层规划。任何模块的变更不应影响其他模块的接口契约。
3.2 输入输出层设计
3.2.1 输入层:标准化请求与上下文构建
输入层负责将外部异构请求(HTTP、RPC、MQ)转换为引擎内部统一的决策上下文(Decision Context)。核心设计要点包括:
- 协议适配:支持 RESTful、gRPC、消息队列三种接入方式,由 API Gateway 统一路由。
- 参数校验:对必填字段(如身份证号、申请金额、产品编码)进行非空、格式与范围校验,拒绝无效请求。
- 字段映射:将外部字段名映射为内部标准名称(如
apply_amt→loan_amount),消除多产品线差异。 - 上下文构建:将校验后的参数封装为
DecisionRequest对象,携带请求 ID、时间戳、渠道标识等元信息。
最佳实践:输入层应实现“请求幂等校验”,通过请求 ID 去重,防止重复进件导致策略重复执行或额度超发。
3.2.2 输出层:结果封装与动作路由
输出层将规则执行层产生的决策结果(通过/拒绝/人工审核)封装为标准响应,并根据决策码触发后续动作:
| 决策码 | 含义 | 典型动作 |
|---|---|---|
APPROVED |
审批通过 | 调用放款接口、发送通过通知、更新授信额度 |
REJECTED |
拒绝 | 返回拒绝原因码、写入黑名单候选、发送拒绝通知 |
MANUAL_REVIEW |
人工审核 | 创建工单、推送审核队列、标记高优先级 |
ESCALATION |
升级处理 | 触发风控复核流程、通知高级审批人 |
输出层同时负责事件发布:将决策结果以异步消息形式发送至下游系统(如催收、报表、数据湖),实现决策与动作的解耦。
3.3 规则执行层架构设计
规则执行层是决策引擎的“大脑”,负责按照策略编排顺序执行规则节点。其核心架构包含以下组件:
- 策略调度器(Strategy Scheduler):解析策略 DAG(有向无环图),按拓扑序依次执行节点,支持并行分支与条件跳转。
- 规则引擎(Rule Engine):执行原子规则(如“年龄 > 18”),支持规则优先级、命中后短路(short-circuit)与规则组聚合。
- 表达式计算器(Expression Evaluator):处理复杂数学运算、字符串拼接、日期计算,通常集成 Groovy、MVEL 或自研 DSL。
- 模型调用器(Model Invoker):调用外部评分卡、机器学习模型(如 XGBoost、神经网络),通过 RPC 或本地 ONNX 推理。
性能关键:规则执行层必须保持无状态设计,所有运行时数据均从输入上下文或缓存读取。每次决策完成后立即释放线程资源,避免上下文残留。
3.4 数据存储层架构设计
数据存储层为决策引擎提供持久化与缓存能力,按数据特性分为三个子层:
3.4.1 存储分层策略
| 存储层级 | 存储内容 | 选型建议 | 访问模式 |
|---|---|---|---|
| 热存储(缓存层) | 高频规则元数据、产品参数、用户画像摘要 | Redis / Memcached | 读多写少,毫秒级响应 |
| 温存储(关系库) | 决策上下文快照、规则版本、策略编排定义 | MySQL / PostgreSQL | 读写均衡,支持事务 |
| 冷存储(对象/时序库) | 全量决策日志、历史快照、审计轨迹 | MinIO / HDFS / InfluxDB | 写多读少,批量归档 |
3.4.2 关键数据模型
决策上下文快照是存储层的核心实体,其简化结构如下:
-- 决策上下文表
CREATE TABLE decision_context (
request_id VARCHAR(64) PRIMARY KEY,
product_code VARCHAR(32) NOT NULL,
channel VARCHAR(32),
input_params JSON NOT NULL, -- 原始入参
feature_values JSON, -- 衍生特征
rule_results JSON, -- 每条规则的命中结果
final_decision VARCHAR(32), -- 最终决策码
decision_reason VARCHAR(256), -- 决策原因
created_at DATETIME(3) NOT NULL,
updated_at DATETIME(3) NOT NULL,
INDEX idx_product_created (product_code, created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
注意:冷存储中的决策日志应设置合理的生命周期策略(如 90 天归档、180 天清理),避免存储膨胀影响查询性能。缓存层必须设置 TTL,防止脏数据长期驻留。
3.5 架构设计要点总结
- 分层解耦:输入层、执行层、存储层、输出层职责单一,通过接口契约通信,任一层的内部重构不影响其他层。
- 无状态执行:规则执行层不持有会话状态,所有数据从输入上下文或缓存读取,便于水平扩展与故障恢复。
- 读写分离:热存储承载高频读取,温存储承载事务写入,冷存储承载海量归档,避免单一存储瓶颈。
- 可观测性:监控治理层横切所有模块,通过 Metrics、Tracing、Logging 三支柱保障引擎运行时健康。
架构决策记录(ADR):在早期设计阶段,建议将规则执行层与数据存储层之间的交互限制为“执行层只读缓存+异步写库”,避免规则执行过程中阻塞等待数据库写入,从而将单次决策 P99 延迟控制在 50ms 以内。