2. Serving架构设计:整体架构图、请求链路、核心组件

实时风控Serving架构是风控系统从离线分析走向在线决策的关键桥梁。本章将围绕整体架构图、请求链路以及核心组件(网关、特征中心、模型引擎、决策流)展开,帮助您建立对实时风控Serving系统的全局认知。

2.1 整体架构图

实时风控Serving架构采用分层、解耦的设计原则,将请求接入、特征计算、模型推理与决策编排分离,以支持高并发、低延迟的在线风控场景。下图展示了核心架构层次与组件关系。

实时风控Serving整体架构图 实时风控Serving整体架构图 接入层(API Gateway) 特征中心 实时特征计算 · 特征缓存 模型引擎 模型加载 · 推理 · 版本管理 决策流引擎 规则编排 · 策略组合 存储层(Redis / MySQL / HBase / 对象存储) 监控与日志(Prometheus + ELK + 链路追踪) 说明: 请求经网关统一接入,并行调用特征中心与模型引擎,最终由决策流引擎组合规则与模型结果输出最终决策。

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)

决策流引擎将规则、模型输出、外部数据源组合成可编排的决策逻辑,是风控策略的“大脑”。

决策流引擎内部结构 决策流引擎内部结构 输入(特征 + 模型分数) 规则节点 if-then-else / 决策表 模型节点 调用模型引擎获取分数 聚合节点 加权 / 投票 / 级联 输出(通过 / 拒绝 / 审核) 决策流支持 DAG 编排,节点类型包括规则、模型、聚合、外部API调用等,可灵活组合。

决策流引擎的核心特性:

  • 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