3. Risk Gateway 架构:整体架构、数据流与处理节点与样本采集模块设计

Risk Gateway 作为样本偏差校验的核心引擎,其架构设计直接决定了校验的实时性、准确性与可扩展性。本章从整体架构、数据流与处理节点、样本采集模块三个层次展开,帮助学员建立从宏观到微观的系统认知。

3.1 Risk Gateway 整体架构

Risk Gateway 采用分层解耦 + 事件驱动的微服务架构,自上而下分为四层:

层级 核心职责 关键组件
接入层 统一接收外部请求,协议转换与限流 API Gateway、负载均衡、限流器
决策层 执行样本偏差校验规则与模型推理 规则引擎、模型服务、样本缓存
数据层 样本存储、特征计算与偏差统计 样本库、特征仓库、偏差计算器
监控层 全链路监控、告警与可视化 指标采集、日志聚合、Dashboard
架构设计要点: 接入层与决策层之间通过异步消息队列解耦,避免高并发场景下校验逻辑阻塞上游请求;数据层采用读写分离,样本写入走独立管道,不影响在线查询性能。
Risk Gateway 整体架构分层图 接入层 API Gateway | 负载均衡 | 限流器 决策层 规则引擎 | 模型服务 | 样本缓存 数据层 样本库 | 特征仓库 | 偏差计算器 监控层

3.2 数据流与处理节点

一条完整的样本偏差校验请求,在 Risk Gateway 内部经过 5 个核心处理节点,形成请求入站 → 样本采集 → 特征提取 → 偏差计算 → 结果回写的闭环数据流。

3.2.1 核心处理节点清单

节点名称 输入 输出 处理耗时(P99)
N1:请求解析 原始 HTTP/消息体 标准化样本元数据 < 2ms
N2:样本采集 样本元数据 + 原始特征 结构化样本记录 < 5ms
N3:特征提取 结构化样本 特征向量 + 统计指标 < 10ms
N4:偏差计算 特征向量 + 参考分布 偏差分数 + 告警级别 < 15ms
N5:结果回写 偏差结果 样本标签 + 审计日志 < 3ms
性能基线: 全链路 P99 耗时控制在 50ms 以内,其中偏差计算节点是唯一可能触发模型推理的环节,建议单独部署 GPU 资源池。
数据流与处理节点流程图 N1 请求解析 N2 样本采集 N3 特征提取 N4 偏差计算 N5 结果回写 各节点之间通过异步消息队列(Kafka/RocketMQ)解耦,支持背压与重试 全链路埋点:每个节点输出延迟、吞吐量、错误率到监控层

3.3 样本采集模块设计

样本采集模块(N2)是偏差校验的第一道关卡,其设计质量直接影响后续特征提取与偏差计算的准确性。模块内部包含三个子组件:

  • 采集策略器: 支持全量采集、按比例采样、按标签分层采样三种模式,通过配置中心动态下发。
  • 样本格式化器: 将异构输入(JSON、Protobuf、CSV)统一转换为内部样本结构,包含样本 ID、时间戳、特征字段、业务标签。
  • 样本缓冲池: 基于 RingBuffer 实现无锁写入,批量刷入样本库,避免高频采集时 IO 抖动。

3.3.1 样本结构定义

// Sample 是样本采集模块的核心数据结构
type Sample struct {
    SampleID    string            `json:"sample_id"`     // 全局唯一样本ID
    Timestamp   int64             `json:"timestamp"`     // 采集时间戳(毫秒)
    Features    map[string]float64 `json:"features"`     // 特征字段:key=特征名, value=数值
    Labels      map[string]string  `json:"labels"`       // 业务标签:key=标签名, value=标签值
    Source      string            `json:"source"`        // 数据来源:online/batch/replay
    CollectMode string            `json:"collect_mode"`  // 采集模式:full/ratio/label
}

3.3.2 采集策略对比

策略模式 适用场景 存储开销 偏差检测灵敏度
全量采集 新模型上线、A/B 测试 高 最高
按比例采样 稳态业务、流量较大 中 中
按标签分层采样 长尾分布、关注特定群体 低 按层可控
避坑提示: 按比例采样时,如果业务流量存在明显的周期性波动(如白天/夜间差异),建议叠加时间窗口自适应采样率,避免高峰时段样本过载、低谷时段样本稀疏。

3.3.3 样本缓冲池写入流程

  1. 采集器接收格式化后的样本,写入 RingBuffer 当前写指针位置。
  2. 写指针自增,当缓冲区达到批量阈值(默认 512 条)或超时(默认 100ms)时触发刷盘。
  3. 刷盘线程将批量样本以事务方式写入样本库,写入成功后更新读指针。
  4. 若样本库写入失败,样本进入重试队列,最多重试 3 次,超过则丢弃并记录告警。

通过 RingBuffer 无锁设计,样本采集模块在 8 核机器上可支撑 50,000 TPS 的写入吞吐,P99 写入延迟低于 2ms。