4. 回放系统原理:流量录制与回放的基本概念

回放系统是风控网关对比学习的核心数据引擎。其基本原理是将生产环境中的真实请求流量完整捕获、存储,并在测试或预发环境中按需重新发送,使新旧两套风控逻辑在同一批流量上并行执行,从而量化评估差异。

4.1 流量录制与回放的基本概念

  • 流量录制(Traffic Recording):在网关入口处通过旁路或镜像方式,将请求的完整上下文(Header、Body、Cookie、路由参数、时间戳等)序列化为不可变事件,写入持久化存储。
  • 流量回放(Traffic Replay):从存储中按指定条件(时间范围、用户ID哈希、接口路径)读取录制的事件,以原始时序或加速模式重新注入目标网关,驱动风控规则执行。
  • 对比基线(Baseline):回放时同时向旧版本(基线)和新版本(候选)发送相同请求,分别记录决策结果与中间特征,用于后续差异分析。
关键约束:录制端必须保证零侵入——不能修改请求内容、不能阻塞原请求链路、不能引入额外延迟抖动。通常采用内核级 eBPF 或 Sidecar 代理实现。

4.2 全量回放与差分回放的区别

根据回放的数据范围与目标,系统分为两种模式:

对比维度 全量回放(Full Replay) 差分回放(Diff Replay)
数据范围 指定时间窗口内的全部流量(如过去24h所有请求) 仅回放与历史基线存在差异的流量子集
存储开销 高,需保留完整请求/响应体 低,仅存储请求摘要 + 差异指纹
回放耗时 与流量规模线性增长 通常为全量的 5%–15%
适用场景 回归测试、全链路压测、合规审计 快速验证、灰度发布、A/B 对比
对比精度 高,可逐请求比对完整决策树 中等,仅关注差异路径
选型建议:在风控网关场景中,建议采用全量录制 + 差分回放的组合策略——录制阶段保留全量,回放阶段通过特征哈希自动过滤出与基线决策不一致的流量,大幅降低回放集群的负载压力。

4.3 回放数据存储:Kafka 与 Pulsar

回放系统对存储层有极高的吞吐与低延迟要求。主流方案为分布式消息队列,其中 Kafka 与 Pulsar 是两大代表。下表从回放场景的关键维度进行对比:

特性 Apache Kafka Apache Pulsar
存储模型 分区日志(Partition Log),数据持久化到 Broker 本地磁盘 分层存储:BookKeeper 负责持久化,Broker 无状态
延迟(P99) 2–5 ms(SSD + 页缓存) 3–8 ms(BookKeeper 写入确认)
吞吐量 单分区 10 MB/s,可水平扩展分区数 单 Topic 可达 1 GB/s(Segment 并行写入)
消息回溯 支持按 Offset 或时间戳回溯,但受限于日志保留策略 原生支持任意时间点回溯(BookKeeper Ledger 不可变)
回放重试 需客户端管理 Offset,重放时重置 Consumer Group 支持 Cursor 重置,可精确到单个 Subscription
运维复杂度 中,需关注分区再均衡与磁盘水位 高,需维护 BookKeeper 与 ZooKeeper 双集群

4.4 回放数据存储架构图

下图展示基于 Pulsar 的回放数据存储架构,录制端将流量写入 Pulsar Topic,回放端通过 Subscription 机制实现多版本并行消费:

基于 Pulsar 的回放数据存储架构 流量录制端 Pulsar Broker BookKeeper 集群 写入 Topic 持久化 Segment 回放端(基线) 回放端(候选) 对比引擎 Subscription A Subscription B 说明: Pulsar 通过 Subscription 隔离实现多版本并行回放,BookKeeper 提供不可变 Ledger 支持任意时间点回溯。 录制端写入延迟 < 1ms(异步刷盘),回放端通过 Cursor 管理实现精确重试。

4.5 回放流程与关键设计

一个完整的回放任务包含以下步骤:

  1. 任务定义:指定录制 ID、回放时间窗口、目标接口列表、基线版本与候选版本标识。
  2. 数据加载:从 Kafka/Pulsar 中按分区并行拉取消息,反序列化为内部事件对象。
  3. 流量整形:对时间戳进行归一化处理(可选加速倍率),过滤掉非目标接口或黑名单请求。
  4. 双发执行:将同一请求同时发送至基线网关与候选网关,记录各自的响应与特征快照。
  5. 结果收集:将对比结果(一致/不一致/超时/异常)写入结果 Topic,供下游分析引擎消费。
常见陷阱:回放时若未正确处理幂等性(如重复支付请求),可能导致候选环境产生脏数据。建议在回放请求中注入 X-Replay-Id 头,下游风控系统据此跳过幂等校验。

4.6 流量录制与回放流程

下图展示从录制到回放对比的完整数据流,突出存储层在其中的核心中转作用:

流量录制与回放完整流程 生产流量 录制代理 Kafka / Pulsar 回放调度器 拉取消息 基线网关 候选网关 对比引擎 差异报告

4.7 存储选型要点

  • 延迟敏感场景:优先选择 Kafka,利用页缓存与零拷贝技术将 P99 延迟控制在 3ms 以内。
  • 大规模回溯场景:Pulsar 的 Segment 级回溯能力可避免全量重放,节省 70% 以上的计算资源。
  • 多版本并行回放:Pulsar 的 Subscription 隔离机制天然支持多消费组独立消费同一 Topic,无需重复存储数据。
  • 数据压缩:录制时启用 Snappy 或 Zstandard 压缩,可将存储体积压缩至原始大小的 20%–30%。
生产实践:某头部支付公司采用 Pulsar 作为回放存储层,单 Topic 承载 50 万 TPS 的录制流量,通过 BookKeeper 的 Ledger 自动滚动与分级存储(SSD + HDD),将 30 天内的全量流量回溯延迟控制在 5 秒以内。