2. 特征存储选型:内存KV存储 vs 嵌入式存储 vs 远端存储

特征存储是模型Serving系统的数据基座,其选型直接决定特征获取的延迟、吞吐与一致性。不同存储引擎在访问模式、数据生命周期、一致性要求上存在本质差异,本章从架构视角给出系统化的对比与选型策略。

选型核心原则: 特征存储选型不是“哪个更好”,而是“哪个更适合当前场景”。延迟敏感的特征走内存,大吞吐的离线特征走远端,需要持久化与低延迟平衡的走嵌入式引擎。

2.1 三类存储引擎的架构定位

根据数据访问距离与存储介质,特征存储可分为三个层级:

  • 内存KV存储(Redis / Memcached): 纯内存、网络访问、毫秒级延迟,适合高频实时特征。
  • 嵌入式存储(RocksDB): 本地磁盘+内存缓存、进程内调用、微秒级延迟,适合中等规模、需要持久化的特征。
  • 远端存储(S3 / HDFS): 远端对象存储、百毫秒级延迟,适合大规模离线特征与模型文件。
特征存储三层架构 内存KV存储层 Redis / Memcached 延迟:<1ms | 容量:GB~TB | 访问:网络 嵌入式存储层 RocksDB / LevelDB / SQLite 延迟:10~100μs | 容量:GB~TB | 访问:进程内 远端存储层 S3 / HDFS / GCS / OSS 延迟:50~500ms | 容量:PB+ | 访问:远端RPC 延迟逐层递增,容量逐层增大

2.2 核心维度对比

对比维度 Redis / Memcached RocksDB S3 / HDFS
访问延迟 0.1~1ms(网络RTT) 10~100μs(进程内) 50~500ms(远端RPC)
吞吐能力 10万~100万 QPS 100万~1000万 QPS 千~万级 QPS
数据持久化 可选(RDB/AOF) 强(LSM-Tree + WAL) 强(多副本)
容量上限 GB~TB(受内存限制) GB~TB(受磁盘限制) PB+(弹性扩展)
一致性模型 最终/强(取决于配置) 强(单机) 最终(S3) / 强(HDFS)
运维复杂度 中(需管理集群) 低(嵌入应用) 高(需管理存储集群)
成本模型 高(内存昂贵) 中(SSD适中) 低(对象存储便宜)

2.3 选型策略矩阵

根据特征的生命周期与访问模式,推荐以下选型策略:

选型决策流程:
  1. 特征是否要求亚毫秒级延迟? → 是 → 选内存KV存储
  2. 特征是否需要持久化且容量较大? → 是 → 选嵌入式存储
  3. 特征是否用于离线批处理或模型训练? → 是 → 选远端存储
  4. 特征是否同时需要实时与离线访问? → 采用分层混合架构

2.4 典型场景与推荐方案

场景 特征特点 推荐存储 理由
实时推荐特征 用户实时行为、上下文 Redis 毫秒级延迟,支持TTL自动过期
模型Embedding查找 大规模、只读、持久化 RocksDB 进程内访问,低延迟,支持大容量
离线特征批处理 全量数据、周期性更新 S3 / HDFS 低成本、高吞吐、弹性扩展
特征缓存加速 热点特征、短生命周期 Memcached 简单高效,纯缓存场景
多级特征获取 实时+近线+离线混合 Redis + RocksDB + S3 分层缓存,兼顾延迟与成本

2.5 混合架构实践:三级特征获取流水线

生产环境中,单一存储引擎往往无法满足所有特征需求。推荐采用三级流水线架构:

三级特征获取流水线 Serving请求 L1: 内存KV Redis / Memcached 延迟:<1ms L2: 嵌入式 RocksDB 延迟:~100μs L3: 远端 S3 / HDFS 延迟:~100ms 逐级回退,命中即返回 策略:L1命中直接返回 → L1未命中查L2 → L2未命中查L3并异步回填L1/L2

2.6 选型避坑指南

常见误区:
  • 过度依赖Redis: 所有特征都放Redis会导致内存成本爆炸,且大Key会阻塞其他请求。
  • 忽略RocksDB的写放大: 频繁写入场景下,RocksDB的Compaction会消耗大量CPU和IO。
  • 远端存储当实时存储用: S3的List操作延迟高,不适合在线Serving的实时特征获取。
  • 缺乏缓存失效策略: 特征更新后,内存缓存未失效会导致模型拿到过期数据。

2.7 选型决策总结

决策条件 推荐存储 不推荐
延迟要求 < 1ms,数据量 < 100GB Redis S3 / HDFS
延迟要求 < 1ms,数据量 100GB~1TB RocksDB + 本地缓存 Redis(内存成本过高)
延迟容忍 10~100ms,数据量 > 1TB S3 + 本地缓存层 纯Redis / 纯RocksDB
需要强一致性、持久化 RocksDB / HDFS Memcached(无持久化)
需要TTL自动过期 Redis RocksDB(需手动清理)
最佳实践: 在模型Serving系统中,推荐采用“Redis(热数据)+ RocksDB(温数据)+ S3(冷数据)”的三级存储架构。通过异步预热与缓存淘汰策略,可以在延迟、成本、容量之间取得最优平衡。