2. 金融特征存储核心架构设计
金融特征存储平台(Feature Store)的核心架构需要同时满足高并发、低延迟、强一致性与可治理性。本章从分层架构、组件选型、高可用与低延迟设计三个维度展开,为后续搭建提供架构决策依据。
2.1 整体架构分层
金融 Feature Store 采用四层架构:存储层、计算层、服务层、治理层。各层职责清晰,通过标准接口解耦,支持独立扩缩容。
架构设计原则: 存储层负责持久化与多模态数据管理;计算层负责特征工程与离线/实时计算;服务层负责在线特征获取与高并发路由;治理层负责元数据管理、血缘追踪与质量监控。
2.2 各层详细设计
2.2.1 存储层
存储层是 Feature Store 的基石,需要同时支撑在线低延迟查询与离线大规模分析。采用多模态混合存储策略:
- 在线 KV 存储: Redis Cluster / TiKV,用于实时特征查询,P99 延迟 < 5ms。
- 离线 OLAP 存储: ClickHouse / StarRocks,用于特征回溯、批量导出与训练集生成。
- 对象存储: MinIO / S3 兼容存储,用于特征快照、历史版本与原始日志归档。
- 消息队列: Kafka / Pulsar,用于实时特征事件流转与流计算衔接。
- 时序存储: InfluxDB / TimescaleDB,用于监控指标与特征时效性追踪。
| 存储类型 | 典型组件 | 核心用途 | 延迟要求 |
|---|---|---|---|
| 在线 KV | Redis Cluster | 实时特征获取 | < 5ms |
| 离线 OLAP | ClickHouse | 特征回溯/批量导出 | < 1s (批) |
| 对象存储 | MinIO | 快照/归档 | 秒级 |
| 消息队列 | Kafka | 实时事件流 | < 100ms |
2.2.2 计算层
计算层负责将原始数据加工为特征,分为离线批处理与实时流处理两条链路:
- 离线批处理: Apache Spark 执行 T+1 特征计算,支持窗口聚合、滑动窗口、特征回溯。输出写入离线 OLAP 与对象存储。
- 实时流处理: Apache Flink 执行毫秒级特征计算,支持事件时间语义、状态管理与精确一次语义。输出写入在线 KV 与消息队列。
- 特征变换引擎: 内置常用变换算子(归一化、分箱、One-Hot、时序差分),支持 UDF 扩展。
金融场景注意: 实时特征计算必须保证事件时间有序,避免因数据乱序导致特征值错误。建议在 Flink 中设置 allowedLateness 与 watermark 策略。
2.2.3 服务层
服务层是 Feature Store 的流量入口,需要提供高性能、高可用的特征获取服务:
- 在线特征 API: 基于 gRPC/HTTP2 协议,支持批量特征获取(单次请求最多 100 个特征)。
- 缓存加速: 本地缓存(Caffeine)+ 分布式缓存(Redis)两级缓存,缓存命中率目标 > 90%。
- 限流与熔断: 基于令牌桶算法限流,基于滑动窗口熔断,防止下游存储被打爆。
- 批量导出: 支持按时间范围、实体 ID 列表导出特征数据到训练集群。
2.2.4 治理层
治理层是金融 Feature Store 区别于通用 Feature Store 的关键,满足合规与审计要求:
- 元数据管理: 特征名称、类型、来源、版本、Owner、标签等统一注册。
- 血缘追踪: 记录特征从原始数据到最终值的完整加工链路,支持回溯。
- 质量监控: 特征空值率、分布漂移、延迟监控,异常时自动告警。
- 访问审计: 记录谁在什么时间获取了哪些特征,满足金融监管要求。
2.3 组件选型原则
组件选型需遵循以下原则,确保平台在金融场景下的稳定性与可维护性:
| 选型维度 | 原则 | 金融场景特殊要求 |
|---|---|---|
| 成熟度 | 优先选择 Apache 基金会或 CNCF 毕业项目 | 避免使用 Beta 或社区活跃度低的组件 |
| 性能 | 在线组件 P99 延迟 < 10ms,离线组件吞吐 > 10GB/s | 必须支持 TLS 加密传输与 RBAC 权限 |
| 一致性 | 支持最终一致性或强一致性(按特征类型选择) | 风控特征必须强一致,推荐特征可最终一致 |
| 可观测性 | 原生支持 Prometheus + Grafana 集成 | 需要自定义业务指标(特征延迟、命中率) |
| 成本 | 优先选择存算分离架构,支持独立扩缩容 | 对象存储作为冷数据层,降低存储成本 |
2.4 高可用与低延迟设计
金融场景对 Feature Store 的可用性与延迟有极高要求,通常要求可用性 > 99.99%,P99 延迟 < 10ms。以下是关键设计策略:
2.4.1 高可用设计
- 多副本部署: 服务层无状态化,至少 3 副本跨可用区部署;存储层采用 Raft 协议(如 TiKV)或 Redis Cluster 主从切换。
- 故障自动转移: 使用 Kubernetes + Istio 实现服务网格级别的健康检查与流量切换。
- 数据冗余: 在线 KV 存储采用 N+2 副本策略,离线存储采用 EC 纠删码。
- 容灾演练: 每季度执行一次 Chaos Engineering 实验,模拟节点宕机、网络分区、存储故障。
2.4.2 低延迟设计
- 两级缓存: 本地堆内缓存(Caffeine)用于热点特征,分布式缓存(Redis)用于次热点特征,冷特征直接查询存储层。
- 预加载与预热: 根据历史访问模式,在业务低峰期预加载高频特征到缓存。
- 连接池与多路复用: gRPC 长连接 + HTTP/2 多路复用,减少连接建立开销。
- 数据本地性: 计算层与存储层尽量同机房部署,避免跨机房网络延迟。
2.5 架构设计检查清单
在进入具体搭建前,建议对照以下清单确认架构设计是否完整:
| 检查项 | 验收标准 | 状态 |
|---|---|---|
| 存储层多模态支持 | 在线 KV、离线 OLAP、对象存储、消息队列均已选型 | ☐ |
| 计算层双链路 | 离线批处理与实时流处理链路均已定义 | ☐ |
| 服务层缓存策略 | 两级缓存方案已确定,预热机制已设计 | ☐ |
| 治理层元数据 | 特征注册、血缘追踪、质量监控方案已明确 | ☐ |
| 高可用部署 | 多副本、跨可用区、故障转移方案已确认 | ☐ |
| 延迟预算 | 在线特征获取 P99 延迟 < 10ms | ☐ |
架构决策记录: 建议在架构设计阶段同步维护 ADR(Architecture Decision Records),记录每个关键选型的原因、备选方案与权衡。这在金融审计中可作为技术合规性证明。