2、特征服务架构基础:在线特征服务与离线特征服务的区别、特征存储引擎(Redis/HBase)介绍
2.1 在线特征服务 vs 离线特征服务
特征服务是机器学习推理管线的核心数据层,根据服务时效与数据来源可划分为在线特征服务与离线特征服务。两者在延迟要求、数据新鲜度、存储选型与访问模式上存在本质差异,理解这些差异是构建批次偏移监控的前提。
| 对比维度 | 在线特征服务 | 离线特征服务 |
|---|---|---|
| 服务延迟 | 毫秒级(P99 < 50ms) | 分钟级~小时级 |
| 数据新鲜度 | 秒级~分钟级(近实时) | T+1 或小时级批量产出 |
| 存储引擎 | Redis / HBase / 内存 KV | HDFS / Hive / 对象存储 |
| 访问模式 | 点查(Get by Key) | 全量扫描 / 分区扫描 |
| 数据量级 | 热数据(GB~TB) | 全量历史(TB~PB) |
| 典型用途 | 实时推理、AB 实验 | 训练样本生成、离线评估 |
| 批次偏移风险 | 特征更新延迟 / 版本不一致 | 数据回溯 / 分区遗漏 |
关键认知:批次偏移监控的核心矛盾在于——在线特征与离线特征来自同一上游数据源,但经过不同的处理链路与存储引擎后,特征值可能产生系统性偏差。监控系统必须同时比对在线快照与离线批次,才能发现偏移。
2.2 在线特征服务架构
在线特征服务通常采用写时复制 + 缓存加速的架构。实时流(Kafka → Flink)将特征写入在线存储,推理服务通过 SDK 或 gRPC 接口按 entity_key 点查。典型组件包括:
- 特征写入层:Flink/Spark Streaming 消费上游事件,聚合后写入 Redis/HBase。
- 特征存储层:高性能 KV 引擎,支持 TTL 自动过期。
- 特征读取层:轻量级 SDK 或代理网关,提供 GetFeature 接口。
- 版本管理:特征时间戳或版本号,用于回滚与比对。
2.3 离线特征服务架构
离线特征服务以批量调度 + 分区存储为核心。上游原始数据经过 ETL 清洗后,按日期/小时分区写入离线数仓,再由特征工程任务生成宽表或特征视图。典型流程:
- 数据接入:Kafka / 日志文件 → HDFS 原始层。
- 特征计算:Spark / Hive 按分区执行 SQL 或 UDF,产出特征列。
- 特征存储:Hive 分区表 / ORC 列存 / Parquet。
- 特征发布:将离线特征导出为训练样本(TFRecord / CSV)或同步至在线存储。
2.4 特征存储引擎:Redis
Redis 是在线特征服务的首选内存 KV 引擎,核心特性:
- 数据结构:String / Hash / Sorted Set,特征通常用 Hash 存储(field = 特征名,value = 特征值)。
- TTL 机制:自动过期冷特征,控制内存水位。
- 高并发:单线程模型 + 多实例分片,QPS 可达 10 万+。
- 持久化:AOF / RDB,用于故障恢复。
实践建议:特征 key 设计为
feature:{entity_type}:{entity_id},value 使用 Hash 存储多个特征字段,避免大 key 热读。监控 Redis 的 used_memory 与 evicted_keys,防止因内存不足导致特征丢失。
2.5 特征存储引擎:HBase
HBase 适用于在线 + 近线特征场景,尤其适合特征维度多、需要版本回溯的场景:
| 特性 | 说明 |
|---|---|
| RowKey 设计 | entity_id + 时间戳 或 entity_id + 特征组,支持范围扫描 |
| 列族 | 按特征类别拆分(如:user_profile / user_behavior) |
| 版本控制 | 每个 cell 可保留 N 个历史版本,用于回滚与比对 |
| TTL | 列族级别自动过期,清理冷数据 |
| 读写路径 | 写:MemStore → HFile;读:BlockCache + BloomFilter |
注意:HBase 的批次偏移监控需要关注 Region Server 的负载均衡与 Major Compaction 对查询延迟的影响。特征版本过多会导致 HFile 膨胀,建议设置合理的 VERSIONS 参数(通常 3~5 个版本)。
2.6 存储引擎选型对比
| 选型维度 | Redis | HBase |
|---|---|---|
| 延迟 | < 5ms(内存) | 10~50ms(依赖 HDFS) |
| 容量 | 受内存限制(GB~TB) | PB 级(依赖 HDFS) |
| 特征版本 | 需业务层实现 | 原生支持多版本 |
| 范围查询 | 不支持(仅点查) | 支持(RowKey 前缀扫描) |
| 运维复杂度 | 低(主从 / Cluster) | 高(Region 管理 / Compaction) |
| 批次偏移监控 | 需采样在线快照 | 可直接扫描历史版本 |
在实际生产环境中,Redis 负责热特征的高速读取,HBase 承担冷特征与版本回溯,两者通过特征同步管道保持数据一致性。批次偏移监控系统需要同时对接这两种存储,分别提取在线快照与离线批次特征,才能完成全链路的偏差检测。