2. 回放对比需求分析

在风控系统演进过程中,每一次模型升级、策略调整或架构变更都伴随着不可忽视的风险。回放对比(Replay & Compare)正是为了在灰度或全量上线前,用历史真实流量验证新版本的正确性与性能。本章从业务场景和对比维度两个层面,拆解为什么需要回放对比。

2.1 为什么需要回放对比?

风控网关作为流量入口,任何变更都可能影响数亿笔交易。回放对比的核心价值在于:用历史数据模拟未来,用对比结果量化风险。以下三个业务场景最能说明其必要性。

业务场景 核心诉求 回放对比解决的问题
模型迭代 新模型效果是否优于旧模型? 对比新旧模型在同一批请求上的评分分布、拒绝率、AUC 等指标,避免回退风险。
策略验证 新策略规则是否误杀或漏过? 逐笔对比策略命中结果,发现规则冲突或阈值漂移,确保策略一致性。
故障排查 线上异常是代码 bug 还是数据问题? 回放故障时段流量,对比正常时段与异常时段的响应差异,快速定位根因。
关键洞察: 回放对比不是简单的“跑两遍数据”,而是通过结构化对比,将隐性风险显性化。在金融风控场景中,一次未被发现的策略偏差可能导致千万级损失。

2.2 对比维度:从请求到结果的全链路校验

回放对比需要覆盖风控网关处理的完整链路。我们将其拆解为三个核心维度:请求/响应、耗时、结果一致性。每个维度对应不同的校验目标。

2.2.1 请求/响应维度

校验新老版本在输入输出层面的差异。包括:请求参数是否被正确解析、响应字段是否完整、异常码是否一致。

  • 请求侧: 字段映射、参数类型、缺失值处理。
  • 响应侧: 决策码、拒绝原因、附加标签(如模型分数、策略命中列表)。
  • 边界情况: 超长字段、特殊字符、空值请求的处理是否一致。

2.2.2 耗时维度

性能退化是上线后最常见的回滚原因。回放对比需要精确到每个子环节的耗时变化。

  • P50/P99 耗时对比: 新版本是否引入额外延迟?
  • 超时比例: 是否因资源竞争导致更多请求超时?
  • 耗时分布: 通过直方图对比,发现长尾请求的变化。

2.2.3 结果一致性维度

这是最严格的维度,要求新老版本对同一请求输出完全相同的决策结果。

  • 严格一致: 决策码、拒绝原因、模型分数完全相等。
  • 宽松一致: 允许分数有微小浮动(如 ±0.01),但决策方向不变。
  • 不一致分类: 将不一致结果按严重程度分为“高危”“中危”“低危”,便于人工审核。
实践建议: 在结果一致性对比中,建议先做“严格一致”校验,再对不一致样本做“宽松一致”降噪。这样可以快速过滤掉因浮点精度或随机种子导致的微小差异,聚焦真正的逻辑偏差。

2.3 回放对比流程架构

下图展示了回放对比在风控网关中的整体流程。历史流量从消息队列或日志存储中回放,经过新老两套网关处理后,由对比引擎输出差异报告。

回放对比流程架构图 回放对比流程架构 历史流量存储 流量复制/分流 旧版本网关(基线) 新版本网关(候选) 对比引擎(Spark 作业) 差异报告 / 告警 对比维度:请求/响应、耗时、结果一致性

2.4 对比维度与校验粒度

在实际工程中,不同维度的校验粒度差异很大。下表总结了每个维度的典型校验字段和对比方法。

对比维度 校验字段示例 对比方法 常见差异类型
请求/响应 requestId, userId, decision, reasonCode, modelScore 字段级精确匹配 + 空值校验 字段缺失、类型转换错误、枚举值不一致
耗时 totalTime, modelInferTime, ruleEvalTime 分位数对比 + 耗时分布直方图 P99 升高、超时比例增加、长尾请求变多
结果一致性 decision, riskLevel, hitRules 严格相等 / 宽松阈值 / 不一致分类 决策翻转、规则命中差异、分数漂移
注意: 结果一致性对比中,如果发现“决策翻转”(即旧版本拒绝、新版本通过,或反之),必须标记为高危差异,并触发人工审核。这类差异往往意味着策略逻辑存在根本性变化。

2.5 回放对比的典型输出

一次完整的回放对比作业,最终会输出以下三类结果,用于指导上线决策:

  • 通过率对比: 新版本通过率 vs 旧版本通过率,偏差超过阈值则告警。
  • 不一致样本明细: 列出所有决策不一致的请求 ID、差异字段、差异值,支持下钻分析。
  • 性能对比报告: 包含 P50/P90/P99 耗时、平均耗时、超时比例,以及耗时分布对比图。

下图展示了不一致样本在回放对比中的分类与处理流程。

不一致样本分类处理流程 不一致样本分类处理流程 对比引擎输出不一致样本 按差异严重程度自动分类 高危 决策翻转 中危 规则命中差异 低危 分数漂移 < 0.01 必须人工审核 抽样人工审核 自动忽略或记录

2.6 小结