2. Serving架构设计:整体架构图、请求链路、核心组件
实时风控Serving架构是风控系统从离线分析走向在线决策的关键桥梁。本章将围绕整体架构图、请求链路以及核心组件(网关、特征中心、模型引擎、决策流)展开,帮助您建立对实时风控Serving系统的全局认知。
2.1 整体架构图
实时风控Serving架构采用分层、解耦的设计原则,将请求接入、特征计算、模型推理与决策编排分离,以支持高并发、低延迟的在线风控场景。下图展示了核心架构层次与组件关系。
2.2 请求链路
一次完整的实时风控请求从客户端发起,到最终返回决策结果,经历以下核心步骤:
| 步骤 | 环节 | 说明 | 耗时参考 |
|---|---|---|---|
| 1 | 客户端请求 | 业务系统(如交易、登录)携带设备指纹、用户ID、行为参数等发送至网关 | — |
| 2 | 网关路由与鉴权 | API Gateway 校验签名、限流、解析请求,路由至对应的风控服务 | < 2ms |
| 3 | 特征中心计算 | 根据请求参数实时计算特征(如频次、金额统计、设备关联),并查询离线预计算特征 | 5~15ms |
| 4 | 模型引擎推理 | 加载对应模型(XGBoost / DNN / LR),传入特征向量,输出风险分数或标签 | 3~10ms |
| 5 | 决策流引擎 | 根据决策流配置(规则+模型阈值+策略组合)执行最终决策:通过/拒绝/人工审核 | < 5ms |
| 6 | 结果回写与返回 | 将决策结果写入日志、数据库,同时返回给业务系统 | < 3ms |
性能目标: 实时风控Serving端到端延迟通常要求 < 50ms,其中特征计算与模型推理是主要耗时环节,需重点优化。
2.3 核心组件详解
2.3.1 网关(API Gateway)
网关是风控系统的统一入口,承担以下职责:
- 协议适配: 支持 HTTP/REST、gRPC、Thrift 等多种协议,统一转换为内部 RPC 调用。
- 安全防护: 签名校验、IP 白名单、频率限制(Rate Limiting)、防重放攻击。
- 路由分发: 根据请求中的场景字段(如 payment、login)路由到对应的决策流。
- 流量治理: 熔断、降级、超时控制,保障后端服务稳定性。
实践建议: 使用 OpenResty(Nginx + Lua)或 Kong 作为网关层,可结合 Lua 脚本实现轻量级前置特征计算,减少后端压力。
2.3.2 特征中心(Feature Center)
特征中心负责为模型引擎提供实时、准确的特征数据。其核心能力包括:
| 能力 | 说明 | 技术选型 |
|---|---|---|
| 实时特征计算 | 基于滑动窗口(如过去5分钟交易次数)在内存中聚合计算 | Redis + Lua / Flink CEP |
| 离线特征加载 | 从 HBase / MySQL 加载预计算的用户画像、历史标签等 | HBase Client / JDBC Pool |
| 特征缓存 | 对高频特征(如设备指纹)设置本地缓存(Caffeine)或分布式缓存(Redis) | Caffeine / Redis Cluster |
| 特征版本管理 | 支持特征 Schema 演进,兼容新旧版本模型 | Avro / Protobuf + Schema Registry |
2.3.3 模型引擎(Model Engine)
模型引擎是风控决策的核心计算单元,负责加载并执行机器学习模型。其关键设计要点如下:
- 模型热加载: 支持不重启服务更新模型版本,通过文件监听或配置中心推送实现。
- 多框架支持: 统一封装 ONNX Runtime、XGBoost、TensorFlow、PyTorch 等推理引擎。
- 批处理与缓存: 对相同特征向量的请求进行结果缓存(Cache-Aside),减少重复计算。
- 模型版本路由: 根据请求中的模型版本号或 A/B 测试标识,路由到对应模型实例。
# 模型引擎核心接口示例(Python)
class ModelEngine:
def __init__(self):
self._models = {} # model_name -> model_instance
def load_model(self, model_name: str, model_path: str, framework: str):
# 根据 framework 选择加载方式
if framework == "onnx":
self._models[model_name] = onnxruntime.InferenceSession(model_path)
elif framework == "xgboost":
self._models[model_name] = xgboost.Booster(model_file=model_path)
# ...
def predict(self, model_name: str, features: dict) -> dict:
model = self._models.get(model_name)
if not model:
raise ModelNotFoundError(f"Model {model_name} not loaded")
# 特征转换与推理
result = model.predict(self._transform(features))
return {"score": float(result[0]), "label": int(result[0] > 0.5)}
2.3.4 决策流引擎(Decision Flow Engine)
决策流引擎将规则、模型输出、外部数据源组合成可编排的决策逻辑,是风控策略的“大脑”。
决策流引擎的核心特性:
- DAG 编排: 支持有向无环图(DAG)定义节点执行顺序,节点可并行或串行执行。
- 节点类型丰富: 规则节点(Groovy / Python 脚本)、模型节点、聚合节点(加权平均、投票)、外部服务节点(调用黑名单、第三方数据)。
- 策略热更新: 通过配置中心(如 Apollo / Nacos)动态下发决策流定义,无需重启服务。
- 可观测性: 每个节点记录执行耗时、输入输出快照,便于排查与调优。
注意: 决策流引擎的编排复杂度直接影响系统延迟。建议将高频路径(如直接拒绝)前置判断,避免不必要的模型调用。
2.4 核心组件对比总结
| 组件 | 核心职责 | 关键性能指标 | 典型技术栈 |
|---|---|---|---|
| 网关 | 统一接入、安全、路由 | QPS > 10万,P99延迟 < 5ms | OpenResty / Kong / Envoy |
| 特征中心 | 实时特征计算与缓存 | P99延迟 < 15ms,特征命中率 > 95% | Redis / Flink / Caffeine |
| 模型引擎 | 模型加载与推理 | 单模型推理 < 10ms,支持热加载 | ONNX Runtime / XGBoost / Triton |
| 决策流引擎 | 规则与模型组合决策 | 单节点执行 < 2ms,支持动态编排 | 自研 DAG 引擎 / Drools / Camunda |