4、特征Serving核心概念:在线Serving与离线Serving、低延迟要求、高并发设计

特征Serving(Feature Serving)是特征平台连接特征生产与模型推理的关键桥梁。本章聚焦Serving阶段的核心概念,帮助架构师理解在线与离线Serving的本质差异、低延迟的技术约束以及高并发下的设计策略。

4.1 在线Serving与离线Serving

特征Serving根据使用场景可分为在线Serving和离线Serving两种模式。两者在延迟要求、数据源、计算方式和存储选型上存在显著差异。

对比维度 在线Serving 离线Serving
使用场景 实时推理、在线推荐、风控拦截 批量打分、离线训练、数据回刷
延迟要求 毫秒级(P99 < 50ms) 分钟~小时级
数据源 实时流(Kafka/Flink)+ 在线存储 离线数仓(Hive/Spark)
计算模式 点查 + 轻量聚合 批量扫描 + 大规模Join
存储选型 Redis / Memorystore / 本地缓存 HDFS / 对象存储 / 列式存储
典型框架 Feast Online Store / TFServing Spark / Flink Batch / Hive
架构要点:在线Serving必须保证特征数据的实时一致性,即特征值在写入后能立即被推理请求读取;离线Serving则更关注数据完整性和回溯能力,允许一定的数据延迟。

4.2 低延迟要求

在线Serving的核心挑战是低延迟。模型推理的端到端延迟通常要求P99在50ms以内,其中特征获取环节的耗时必须控制在10ms以内。低延迟设计需要从存储、计算和网络三个层面进行优化。

  • 存储层:使用内存级存储(Redis / Memcached),避免磁盘I/O;特征数据按实体ID + 特征名称的扁平Key结构存储,减少查询路径。
  • 计算层:预计算聚合特征,避免在线实时聚合;使用特征预取(Feature Prefetch)机制,在模型推理前批量获取所需特征。
  • 网络层:特征Serving服务与模型推理服务尽量同机部署或同机房部署,减少网络跳转;使用gRPC协议替代HTTP/1.1,降低序列化开销。
实践建议:对于高频特征,使用本地缓存(如Caffeine / Guava Cache)作为L1缓存,Redis作为L2缓存,可进一步降低P99延迟至5ms以内。
在线Serving低延迟架构 推理请求 模型推理服务 特征Serving网关 特征存储 本地缓存(L1) 特征预取模块 低延迟关键路径: 1. 特征预取:模型推理前批量获取特征,减少串行等待。 2. 本地缓存(L1)命中率 > 90%,避免频繁访问远程存储。

4.3 高并发设计

在线Serving需要应对高并发场景,例如推荐系统在流量高峰时每秒处理数万次请求。高并发设计需要从架构层面解决资源竞争、连接管理和弹性扩缩容问题。

4.3.1 连接池与复用

特征Serving服务与下游存储(如Redis)之间使用连接池管理TCP连接,避免每次请求都新建连接。连接池大小需根据QPS和平均响应时间动态调整。

// 连接池配置示例(Java)
RedisPoolConfig config = new RedisPoolConfig();
config.setMaxTotal(200);          // 最大连接数
config.setMaxIdle(50);            // 最大空闲连接
config.setMinIdle(10);            // 最小空闲连接
config.setMaxWaitMillis(100);     // 获取连接最大等待时间(ms)
config.setTestOnBorrow(true);     // 借用时检测连接有效性

4.3.2 无状态水平扩展

特征Serving服务设计为无状态,所有实例对等,通过负载均衡器(如Nginx / Envoy)分发请求。水平扩展时只需增加实例数量,无需迁移数据。

4.3.3 缓存策略

  • 本地缓存:每个实例维护独立缓存,减少对远程存储的并发压力。
  • 分布式缓存:使用Redis Cluster或Memcached,通过一致性哈希分散热点Key。
  • 缓存淘汰:采用LRU或TTL策略,防止缓存膨胀导致内存溢出。
避坑提示:高并发场景下,缓存穿透(请求大量不存在的Key)会导致存储层压力骤增。建议使用布隆过滤器(Bloom Filter)或空值缓存来防御。
高并发Serving架构 客户端 高并发请求 负载均衡器 Serving实例1 Serving实例2 Serving实例N 本地缓存 本地缓存 本地缓存 分布式缓存 Redis Cluster 高并发设计要点: 1. 无状态实例 + 负载均衡,支持水平扩展至数百节点。 2. 本地缓存(L1) + 分布式缓存(L2) 两级缓存,降低存储层并发压力。 3. 连接池复用TCP连接,避免频繁创建/销毁连接的开销。

4.4 在线与离线Serving的协同

在实际特征平台中,在线Serving和离线Serving并非孤立存在,而是通过特征存储和特征元数据实现协同。离线Serving产出的批量特征数据会定期同步到在线存储,供实时推理使用;在线Serving产生的实时特征也会回流到离线数仓,用于模型训练和回刷。

协同环节 离线→在线 在线→离线
数据流向 批量特征写入在线存储 实时特征写入离线数仓
同步频率 小时级 / 天级 分钟级 / 流式写入
一致性保证 最终一致性 至少一次语义
典型工具 Dataflow / Airflow + 批量导入 Kafka Connect / Flink CDC
架构原则:在线Serving和离线Serving共享同一套特征定义和特征版本,确保训练和推理时使用的特征逻辑一致,避免训练/推理偏差(Training-Serving Skew)。