2. 特征服务架构设计:微服务架构下的特征计算、存储与分发

在金融风控场景中,特征服务是连接原始数据与决策模型的桥梁。本章将深入剖析基于微服务架构的特征服务平台,涵盖特征计算、存储与分发的核心设计原则与技术选型。一个高可用、低延迟的特征服务,是保障回测坏账率哨兵系统实时性与准确性的基石。

架构目标: 支撑每日亿级特征请求,P99 延迟 < 50ms,支持在线实时计算与离线批量回放,特征数据一致性达到 99.99%。

2.1 整体架构分层

特征服务采用经典的四层微服务架构,每一层职责清晰,通过轻量级 API 网关与消息队列解耦。

特征服务微服务架构分层图 接入层 (API Gateway) 请求路由 · 限流熔断 · 鉴权 · 协议转换 (gRPC/HTTP) 计算层 (Feature Compute) 实时计算 (Flink/Spark Streaming) · 离线批计算 (Spark/Hive) 特征衍生 · 聚合窗口 · 时间序列 · 外部数据源接入 存储层 (Feature Store) 在线 KV 存储 (Redis/Tair) · 离线列存 (HBase/Parquet) 特征血缘 · 版本管理 · 数据 TTL · 冷热分层 分发层 (Feature Distribution) 实时推送 (Kafka) · 批量导出 (HDFS/S3) · 哨兵订阅 数据流:请求 → 接入层 → 计算层 → 存储层 → 分发层 → 下游哨兵/模型

2.2 核心组件与职责

下表详细列出各层核心组件及其在特征生命周期中的关键职责:

层级 核心组件 职责描述 技术选型
接入层 API Gateway 统一入口,协议转换(gRPC ↔ HTTP),请求限流,身份鉴权,灰度路由 Kong / Envoy / Spring Cloud Gateway
计算层 实时计算引擎 毫秒级窗口聚合、滑动平均、比率计算、外部数据实时关联 Apache Flink / Kafka Streams
计算层 离线计算引擎 T+1 批量特征衍生、历史回放数据准备、大规模特征回溯 Apache Spark / Hive
存储层 在线特征库 高并发低延迟读取,支持 TTL 自动过期,特征快照 Redis Cluster / Tair
存储层 离线特征库 海量历史特征存储,支持时间旅行查询,列式压缩 HBase / Parquet on HDFS
分发层 消息队列 实时特征变更推送,哨兵系统订阅,异步解耦 Apache Kafka / Pulsar
分发层 批量导出通道 每日特征快照导出至数据湖,供模型训练与回测使用 S3 / HDFS / Airflow

2.3 特征计算策略:实时 vs 离线

特征计算需根据时效性要求与计算复杂度选择不同策略。实时计算追求低延迟,离线计算追求高吞吐与复杂逻辑。

关键决策: 对于坏账率哨兵系统,实时特征用于在线拦截,P99 延迟必须控制在 50ms 以内;离线特征用于回测与模型迭代,允许分钟级延迟。
实时计算 vs 离线计算对比 实时计算 (Online) 延迟:毫秒级 (P99 < 50ms) 窗口:滑动窗口 / 会话窗口 场景:在线决策、实时拦截 离线计算 (Offline) 延迟:分钟级 ~ 小时级 窗口:固定窗口 / 全量回溯 场景:回测、模型训练、报表 数据同步 混合计算架构最佳实践 1. 实时计算负责简单聚合(如近 7 天逾期次数、近 1 小时申请频率) 2. 离线计算负责复杂衍生(如多头借贷网络评分、收入稳定性指数) 3. 离线预计算结果定期同步至在线 KV 存储,实现“离线计算、在线使用” 4. 哨兵回测时,优先使用离线特征库进行时间点精确回放

2.4 特征存储设计:在线与离线协同

特征存储采用冷热分离架构,在线存储追求极致性能,离线存储追求低成本与高压缩比。

  • 在线存储 (Hot Tier): 使用 Redis Cluster 或 Tair,数据全量内存化,支持毫秒级 KV 查询。Key 设计为 feature:{entity_id}:{feature_name},Value 为序列化后的特征值及元数据(时间戳、版本号)。设置合理的 TTL(通常 7~30 天),避免内存膨胀。
  • 离线存储 (Cold Tier): 使用 HBase 或 Parquet 格式存储于 HDFS/S3。按天分区,列族设计按特征主题划分(如 cf:credit、cf:behavior)。支持 Snappy 压缩,存储成本降低 60% 以上。
  • 特征血缘与版本: 每个特征记录其衍生 SQL/代码版本、上游数据源、计算时间戳。使用 Feature Registry 统一管理,确保回测时可精确复现历史特征。

2.5 特征分发与哨兵集成

特征分发是连接特征服务与坏账率哨兵系统的关键环节。分发策略需保证数据实时性、顺序性与至少一次语义。

  1. 实时推送通道: 特征计算完成后,通过 Kafka 将特征变更事件推送给哨兵系统。每条消息包含 entity_id、feature_name、feature_value、event_timestamp。哨兵消费端按 entity_id 分区,保证同一实体的特征顺序消费。
  2. 批量回放通道: 回测场景下,哨兵从离线特征库按时间范围批量拉取历史特征快照。支持指定时间点(As-Of Join)精确还原当时特征状态,避免未来数据泄露。
  3. 一致性保障: 采用“离线批计算 + 在线流计算”双链路校验。每日离线特征与实时特征进行比对,差异超过阈值触发告警。哨兵系统在回测时优先使用离线特征,确保结果可复现。
注意: 特征分发必须处理“迟到数据”问题。实时流中可能出现乱序事件,建议在哨兵侧设置 watermark 机制,允许一定时间窗口内的数据修正,避免因数据延迟导致误判。

2.6 架构关键指标与 SLA

下表汇总特征服务架构的核心 SLA 指标,作为系统设计与运维的基准:

指标项 目标值 测量方式
在线特征查询 P99 延迟 < 50 ms APM 工具(如 SkyWalking)采样统计
实时特征计算延迟 < 200 ms (端到端) 事件时间戳与消费时间戳差值
离线特征产出时间 T+1 08:00 前完成 调度系统(Airflow)DAG 完成时间
特征数据一致性 99.99% 离线 vs 在线特征日对账
系统可用性 99.95% 月度无故障时间 / 总时间
特征存储容量 支持 100TB+ 离线存储 HDFS/S3 使用量监控

2.7 架构设计要点总结

  • 分层解耦: 接入、计算、存储、分发四层独立部署,任一层的升级不影响其他层。
  • 混合计算: 实时计算处理简单高频特征,离线计算处理复杂批量特征,通过定期同步实现“离线计算、在线使用”。
  • 冷热分离: 在线 KV 存储保证低延迟,离线列存保证低成本与高压缩,特征血缘保障可追溯。
  • 双路分发: 实时 Kafka 推送 + 离线批量导出,满足哨兵系统在线监控与离线回测的双重需求。
  • 可观测性: 全链路追踪、延迟监控、数据一致性对账,确保架构健康运行。