3. Feature Store 核心架构:在线存储与离线存储、特征注册中心、特征服务层、元数据管理

金融 Feature Store 的架构设计需要同时满足离线批处理(模型训练)与在线实时推理(风控、交易)两种截然不同的性能与一致性要求。本章深入剖析四大核心组件:离线存储、在线存储、特征注册中心与特征服务层,以及贯穿全流程的元数据管理。

架构原则:金融场景下,离线存储追求高吞吐与历史回溯能力;在线存储追求毫秒级延迟与高可用;特征注册中心作为“单一事实来源”确保线上线下特征定义一致;特征服务层负责统一路由与高性能 Serving。

3.1 离线存储与在线存储

离线存储与在线存储承担着不同的数据生命周期角色。下表对比了二者的核心差异:

维度 离线存储 在线存储
典型技术 Apache Hive / Iceberg / Delta Lake / Parquet on HDFS / S3 Redis / Aerospike / Cassandra / TiKV
数据格式 列式存储(Parquet / ORC),高压缩比 Key-Value 结构,支持 TTL 与过期策略
写入模式 批量写入(Spark / Flink 批作业),不可变快照 实时 Upsert / 流式写入(Kafka → 在线表)
查询延迟 秒级到分钟级(全表扫描 / 分区裁剪) 毫秒级(< 10ms P99)
主要用途 训练数据集生成、历史回溯、特征回溯验证 实时推理、线上特征获取、低延迟决策
数据一致性 最终一致性,支持时间旅行(Time Travel) 强一致性或最终一致性(取决于存储选型)
金融合规要求 审计日志、数据保留策略、不可变历史 数据加密、访问控制、实时审计
金融实践:某头部支付机构使用 Iceberg 作为离线存储,保留 7 年全量特征快照用于模型回溯与监管审计;在线存储采用 Redis Cluster,单 Key 平均大小 2KB,P99 读取延迟控制在 3ms 以内。

离线存储与在线存储之间的数据同步通常通过批流一体管道实现:离线作业每日生成特征快照写入离线表;流式作业(如 Flink)实时计算最新特征值并 Upsert 到在线存储。Feature Store 需要保证同一特征在离线与在线两侧的计算逻辑完全一致,避免训练/推理偏差。

3.2 特征注册中心(Feature Registry)

特征注册中心是 Feature Store 的“大脑”,负责管理所有特征的定义、版本、血缘、权限与生命周期。它确保数据科学家、工程师与业务方对同一特征有统一理解。

特征注册中心的核心实体包括:

  • Feature Group(特征组):逻辑上相关的特征集合,例如“用户基础画像特征组”包含年龄、性别、注册时长等特征。
  • Feature(特征):单个特征的定义,包括名称、类型、描述、来源表、计算逻辑(SQL / Python UDF)、版本号。
  • Feature View(特征视图):面向特定模型或场景的特征组合,是训练/推理时实际使用的特征集合。
  • Transformation(转换逻辑):特征从原始数据到最终值的计算过程,支持窗口聚合、时间差计算、编码映射等。

注册中心通常提供 REST API 或 gRPC 接口,供上下游系统进行特征的注册、检索、版本对比与废弃。金融场景下,注册中心还需记录特征的数据敏感等级(如 PII、财务数据)与审批流状态。

常见陷阱:特征注册中心与在线存储之间若缺乏强一致性校验,可能导致线上使用的特征版本与训练时不一致,引发模型效果下降甚至线上事故。建议每次特征发布都触发“离线-在线一致性校验”流水线。

3.3 特征服务层(Feature Serving Layer)

特征服务层是 Feature Store 面向在线推理的高性能网关。它屏蔽底层存储细节,提供统一的特征获取接口,并承担缓存、降级、限流等治理职责。

特征服务层的核心能力:

  • 统一 API:提供 GetOnlineFeatures(entity_keys, feature_refs) 接口,支持单实体与批量实体查询。
  • 多级缓存:本地缓存(Caffeine / Guava)→ 分布式缓存(Redis)→ 在线存储,逐级回退。
  • 特征路由:根据特征元数据自动路由到对应的在线存储或实时计算引擎。
  • 降级与熔断:当在线存储故障时,自动降级到离线快照或默认值,保障业务连续性。
  • 监控与可观测性:记录每次特征获取的延迟、命中率、错误率,输出 Prometheus 指标。
// 特征服务层核心接口示例(伪代码)
public interface FeatureServingService {
    // 获取单个实体的多个特征
    Map<String, Object> getOnlineFeatures(
        String entityId,
        List<String> featureRefs,
        RequestContext context
    );

    // 批量获取多个实体的特征
    Map<String, Map<String, Object>> getOnlineFeaturesBatch(
        List<String> entityIds,
        List<String> featureRefs,
        RequestContext context
    );
}
性能目标:金融风控场景下,特征服务层 P99 延迟通常要求 < 20ms(含网络开销)。建议使用 gRPC + Protobuf 替代 REST/JSON,可降低 30%-50% 的序列化开销。

3.4 元数据管理

元数据管理是 Feature Store 的“神经系统”,贯穿离线存储、在线存储、注册中心与服务层。它负责记录数据从哪里来、如何计算、存储在哪里、被谁使用。

元数据管理的关键维度:

元数据类型 内容示例 金融场景要求
技术元数据 存储路径、分区信息、数据格式、Schema 版本 支持数据生命周期管理(TTL、归档策略)
业务元数据 特征业务含义、所属部门、合规标签、审批人 必须记录 PII/PCI 标识,支持数据脱敏策略
血缘元数据 特征 ← 转换逻辑 ← 原始表 ← 上游系统 支持全链路血缘追踪,满足监管审计要求
运行元数据 特征计算时间、数据新鲜度、在线存储命中率 实时监控数据延迟,触发告警与自动修复

元数据管理通常基于 OpenMetadata、Apache Atlas 或自研元数据服务实现。在金融 Feature Store 中,元数据服务需要与数据治理平台、模型管理平台深度集成,形成从数据源到模型推理的完整闭环。

架构要点:元数据管理不应成为性能瓶颈。建议将元数据读写分离:高频查询(如特征检索)走缓存(Redis),低频写入与血缘更新走异步消息队列(Kafka),避免元数据操作阻塞在线特征服务。

3.5 核心架构总览

下图展示了 Feature Store 四大核心组件之间的协作关系:

Feature Store 核心架构总览 离线存储 Hive / Iceberg / Parquet 在线存储 Redis / Aerospike 特征注册中心 定义 / 版本 / 血缘 特征服务层 统一 API / 缓存 / 降级 元数据管理 技术 / 业务 / 血缘 / 运行 定义推送 定义推送 离线特征 在线特征 运行指标 元数据同步 数据流向 离线/在线 → 特征服务层 → 模型推理

上图展示了核心组件之间的数据流与元数据流:特征注册中心向离线与在线存储推送特征定义;特征服务层从两侧拉取特征值,并向上层模型提供统一接口;元数据管理贯穿所有组件,记录全链路信息。

3.6 架构设计要点总结

金融 Feature Store 架构设计需重点关注以下要点:

  • 一致性保障:离线与在线特征计算逻辑必须一致,建议通过注册中心统一管理转换代码,并自动生成离线批处理与在线流处理两套执行计划。
  • 高可用设计:在线存储与特征服务层必须多机房部署,支持跨机房故障切换;缓存层需设置合理的过期时间与降级策略。
  • 数据新鲜度:金融场景对特征新鲜度要求极高(如实时交易特征延迟需 < 1s),需监控在线存储的写入延迟,并设置延迟告警阈值。
  • 审计与合规:所有特征的定义变更、数据访问、模型使用记录必须留存审计日志,元数据管理需支持全链路血缘追溯。
  • 成本控制:离线存储采用列式压缩格式与分区裁剪策略降低存储成本;在线存储合理设置 TTL 与淘汰策略,避免冷数据占用热存储资源。
金融级要求:在线特征服务层必须支持幂等查询与请求去重,防止因网络重试导致重复扣费或重复计算。建议在 API 网关层实现基于实体 ID + 时间戳的请求去重机制。