2. 实时拦截系统架构

实时拦截系统是保险风控的核心战场。当用户提交投保、理赔或核保请求时,系统必须在毫秒级内完成风险判定并返回决策。本章从整体架构、数据流、决策引擎、规则引擎与模型引擎五个维度,拆解一套生产级实时拦截系统的设计原理。

2.1 整体架构图

实时拦截系统采用分层解耦架构,从上到下依次为:接入层、决策编排层、引擎层与数据层。各层职责清晰,通过异步消息与同步 RPC 协同工作。

实时拦截系统整体架构(分层解耦) 接入层 HTTP API 网关 | 消息队列(Kafka/RocketMQ) | 协议适配 决策编排层 流量分发 | 上下文构建 | 策略路由 | 结果聚合 引擎层 规则引擎 模型引擎 名单引擎 数据层 Redis 缓存 | MySQL/PostgreSQL | HBase | 特征存储
架构要点:接入层负责协议转换与流量缓冲;决策编排层是“大脑”,决定走规则还是模型;引擎层执行具体计算;数据层提供高速缓存与持久化。四层之间通过超时熔断与降级策略保障稳定性。

2.2 数据流

一次实时拦截请求的完整数据流分为 6 个阶段,每个阶段都有明确的输入输出与耗时约束。

阶段 输入 处理逻辑 输出 目标耗时
1. 请求接入 HTTP POST / JSON 参数校验、签名验签、反爬 标准化请求对象 < 5 ms
2. 上下文构建 请求对象 + 设备指纹 关联用户画像、历史行为、黑名单 完整特征上下文 < 20 ms
3. 策略路由 特征上下文 根据产品线、渠道、金额路由到对应策略 策略 ID 列表 < 2 ms
4. 规则执行 特征 + 策略 ID 命中规则集,计算风险标签 规则命中结果 < 10 ms
5. 模型推理 特征向量 ONNX/TensorRT 推理,输出风险分数 模型分数 + 解释 < 30 ms
6. 结果聚合 规则结果 + 模型分数 加权融合、阈值判定、决策输出 拦截/放行/人工 < 3 ms
性能红线:全链路耗时必须控制在 100 ms 以内,其中模型推理不超过 30 ms,规则执行不超过 10 ms。超出阈值的请求直接降级为“放行+异步复核”。

2.3 决策引擎

决策引擎是编排层的核心组件,负责将规则引擎与模型引擎的输出进行融合决策。它不直接执行计算,而是扮演“裁判”角色。

  • 策略路由:根据请求的 product_code、channel、amount 三个维度,从策略配置中心拉取对应的策略 ID 列表。
  • 并行调用:规则引擎与模型引擎同时执行,决策引擎等待两者返回(或超时)。
  • 融合逻辑:支持三种模式——一票否决(规则命中直接拦截)、加权评分(规则标签 + 模型分数加权)、级联决策(先规则后模型)。
  • 结果回写:将决策结果、命中规则、模型分数写入消息队列,供离线分析使用。
# 决策引擎核心伪代码
def decide(context: FeatureContext) -> DecisionResult:
    # 1. 策略路由
    strategy = strategy_router.route(context.product_code, context.channel)
    
    # 2. 并行执行规则与模型
    rule_future = executor.submit(rule_engine.evaluate, context, strategy.rule_ids)
    model_future = executor.submit(model_engine.predict, context.features)
    
    # 3. 等待结果(带超时)
    rule_result = rule_future.result(timeout=0.01)  # 10ms
    model_result = model_future.result(timeout=0.03) # 30ms
    
    # 4. 融合决策
    if rule_result.hit_block_rules:
        return DecisionResult(action="BLOCK", reason=rule_result.hit_rules)
    
    score = model_result.score * strategy.model_weight + rule_result.risk_score * strategy.rule_weight
    action = "BLOCK" if score > strategy.threshold else "PASS"
    
    return DecisionResult(action=action, score=score)

2.4 规则引擎

规则引擎负责执行由风控专家配置的“if-then”逻辑。它要求高吞吐、低延迟,并支持热更新。

  • 规则结构:每条规则包含条件(Condition)、动作(Action)、优先级(Priority)。条件支持 AND/OR 嵌套。
  • 执行模式:采用 RETE 算法或线性扫描,根据规则数量选择。少于 500 条时线性扫描更快。
  • 热更新:规则存储在 Redis 或配置中心,引擎定期拉取版本号,增量更新规则树。
  • 常用规则类型:
规则类型 示例 响应时间
黑名单匹配 身份证号命中黑名单库 < 1 ms
频次控制 同一 IP 1 分钟内请求 > 10 次 < 2 ms
金额阈值 投保金额 > 100 万且年龄 < 25 岁 < 0.5 ms
设备异常 设备指纹为模拟器或 Root 设备 < 1 ms
关联网络 手机号与 3 个以上身份证关联 < 5 ms
避坑指南:规则引擎不要做复杂计算(如字符串正则解析、循环遍历大列表)。复杂逻辑应前置到特征工程阶段,或交由模型引擎处理。规则引擎只做“是与非”的快速判断。

2.5 模型引擎

模型引擎负责加载预训练的机器学习模型(XGBoost、LightGBM、DNN 等),并提供高性能推理服务。它是实时拦截系统的“智能大脑”。

  • 模型部署:使用 ONNX Runtime 或 TensorRT 将训练好的模型转换为推理格式,加载到 GPU 或 CPU 内存中。
  • 特征输入:接收来自上下文构建阶段的特征向量(通常为 100~500 维浮点数)。
  • 推理输出:输出风险概率(0~1)以及可选的 SHAP 解释值。
  • 版本管理:支持 A/B 测试,同一请求可同时调用新旧两个模型,对比效果。
模型引擎推理流程 特征向量输入 特征预处理 ONNX 推理 后处理 & 校准 风险分数输出 模型引擎关键指标:P99 延迟 < 30 ms | 吞吐 > 2000 QPS/GPU | 模型更新 < 5 min 支持 XGBoost / LightGBM / DNN 混合部署,自动 fallback 到 CPU 模式
生产建议:模型引擎必须配置 预热(Warm-up)机制,在服务启动时用模拟数据推理一次,避免冷启动导致首次请求超时。同时开启 模型版本灰度,新模型先承接 5% 流量,观察无异常后再全量切换。

2.6 本章小结