4. 在线特征存储选型与搭建:Redis Cluster、HBase、DynamoDB 等 KV 存储对比、TTL 策略、热点 Key 解决方案

在线特征存储是金融 Feature Store 的核心执行层,负责在毫秒级延迟内为实时推理、规则引擎和在线模型提供特征数据。本章聚焦主流 KV 存储引擎的选型对比、TTL 生命周期管理以及热点 Key 的治理方案,帮助架构师在金融场景下做出合理的技术决策。

4.1 在线特征存储的核心需求

金融级在线特征存储需同时满足以下约束:

  • 低延迟:P99 延迟 < 10ms,通常要求 1-5ms 内完成单 Key 读取。
  • 高并发:支持每秒数万至数十万 QPS,且能应对秒杀、行情波动等突发流量。
  • 高可用:集群可用性 ≥ 99.99%,故障切换时间 < 30s。
  • 数据一致性:特征数据最终一致性可接受,但需避免脏读和过期数据。
  • TTL 自动过期:特征具有时效性,需自动清理过期数据以控制存储成本。

4.2 主流 KV 存储引擎对比

下表从架构、性能、运维复杂度、金融适用性四个维度对比 Redis Cluster、HBase 和 DynamoDB:

对比维度 Redis Cluster HBase DynamoDB
数据模型 纯 Key-Value,支持丰富数据结构(Hash、List、Sorted Set) 宽表模型,RowKey + 列族 + 时间戳 文档 + KV,支持分区键 + 排序键
延迟 (P99) < 1ms(纯内存) 5-20ms(依赖 HDFS 和 RegionServer 缓存) 1-5ms(取决于 WCU/RCU 配置)
吞吐扩展 水平扩展,无中心化代理,但槽位迁移有感知 通过 Region 分裂扩展,依赖 HMaster 协调 自动分区,按 WCU/RCU 预置或按需扩展
持久化 AOF + RDB,异步复制,主从切换可能丢数据 WAL + HFile,强持久化,依赖 HDFS 多副本 SSD 自动多 AZ 复制,持久化可靠
TTL 机制 原生支持,Key 级别过期,惰性 + 定期删除 列族级别 TTL,基于时间戳自动删除 原生支持 TTL,按秒精度自动过期
热点 Key 处理 需客户端侧分片或本地缓存,无自动均衡 Region 热点可通过预分区 + RowKey 散列缓解 分区热可通过读写分离 + DAX 缓存缓解
运维复杂度 中等,需管理哨兵/集群模式,内存规划敏感 高,需维护 HDFS、ZooKeeper、RegionServer 低,全托管服务,无需运维基础设施
金融适用场景 实时风控、规则引擎、用户画像缓存 历史特征回溯、大宽表特征、时序特征存储 高弹性在线特征、全球化部署、无服务器架构
选型建议:若团队具备 Redis 运维能力且延迟要求极高,优先选择 Redis Cluster;若特征数据量大且需与 Hadoop 生态集成,选择 HBase;若追求弹性伸缩和免运维,选择 DynamoDB。金融核心链路建议采用 Redis Cluster + 本地缓存双层架构。

4.3 TTL 策略设计

特征数据的时效性直接影响模型效果和存储成本。TTL 策略需根据特征类型差异化设计:

  • 实时特征(如用户最近 5 分钟点击次数):TTL = 10 分钟,过期后自动删除,避免脏数据。
  • 离线计算特征(如日频用户信用分):TTL = 48 小时,覆盖两个计算周期,确保在线推理时可用。
  • 基础画像特征(如用户年龄、注册时间):TTL = 30 天或更长,通过定期刷新机制更新。
  • 事件序列特征(如最近 100 笔交易记录):TTL = 7 天,同时限制 List 长度防止内存膨胀。
注意:Redis 的 TTL 基于惰性删除 + 定期采样删除,若大量 Key 同时过期,可能造成瞬时 CPU 飙升和延迟抖动。建议在业务低峰期设置过期时间,或对过期时间添加随机偏移(±10%)。

4.4 热点 Key 解决方案

金融场景中,热点 Key 通常由高净值用户、热门股票、秒杀活动引发。若不治理,会导致单节点 CPU 打满、集群雪崩。以下是三种主流解决方案:

方案 原理 适用场景 优缺点
本地缓存 + 分布式缓存 客户端侧缓存热点数据(如 Caffeine),回源时加锁防穿透 读多写少、热点相对固定 优点:延迟极低;缺点:本地缓存一致性难保证
Key 散列 + 分片 将热点 Key 拆分为多个子 Key(如 user_123 → user_123_0~9),分散到不同节点 写入和读取均热的场景 优点:均衡负载;缺点:需客户端改造,读时需合并
读写分离 + 副本读取 Redis Cluster 中为热点 Key 所在 Slot 增加只读副本,读请求分散到副本 读热点远高于写热点 优点:对业务透明;缺点:副本数据有秒级延迟
金融实践案例:某支付平台风控系统每日处理 10 亿+ 特征请求,其中 Top 100 用户 Key 贡献了 30% 的流量。团队采用本地缓存(Caffeine,TTL=1s)+ Redis Cluster 回源方案,将 P99 延迟从 8ms 降至 1.2ms,集群 CPU 使用率下降 40%。

4.5 在线特征存储架构图

下图展示了一个典型的金融在线特征存储架构,包含多级缓存、KV 存储集群和 TTL 管理组件:

金融在线特征存储架构 金融在线特征存储架构 特征请求入口 本地缓存 (Caffeine) Redis Cluster HBase / DynamoDB TTL 管理组件 热点 Key 治理 架构说明: 1. 特征请求优先命中本地缓存,延迟 < 1ms; 2. 本地缓存未命中则查询 Redis Cluster,延迟 1-3ms; 3. Redis 未命中则回源 HBase/DynamoDB,延迟 5-20ms,并异步回填缓存; 4. TTL 管理组件定期扫描过期 Key,热点 Key 治理模块动态调整分片策略。

4.6 搭建步骤与关键配置

以 Redis Cluster 为例,搭建在线特征存储的典型步骤:

  1. 集群规划:至少 6 个节点(3 主 3 从),每节点内存预留 30% 给复制和 AOF 缓冲区。
  2. 配置优化:设置 maxmemory-policy allkeys-lru,开启 activedefrag yes 防止内存碎片。
  3. TTL 配置:在客户端写入时统一设置 TTL,避免使用 Redis 默认的永不过期。
  4. 热点 Key 检测:使用 redis-cli --hotkeys 或监控工具(如 Prometheus + Redis Exporter)识别热点。
  5. 客户端改造:集成本地缓存(Caffeine/Guava),实现回源加锁和缓存预热逻辑。
  6. 压测验证:使用 Redis-benchmark 或自研压测工具,模拟金融场景的读写比例(通常 95% 读 + 5% 写)。
# Redis Cluster 节点配置示例(redis.conf)
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
appendfsync everysec
maxmemory 8gb
maxmemory-policy allkeys-lru
activedefrag yes
生产建议:金融场景建议关闭 Redis 的 save 持久化(RDB),仅使用 AOF + 主从复制。若需强持久化,可考虑将特征数据同时写入 HBase 作为冷备,Redis 仅作为热缓存层。

4.7 本章小结