2. Serving 架构基础:同步推理与异步推理、在线 Serving 与离线 Batch Serving
模型部署后的 Serving 架构直接决定了推理延迟、吞吐量、资源利用率以及业务场景的适配性。本章从两个核心维度拆解 Serving 架构:推理交互模式(同步 vs 异步)与任务执行模式(在线 vs 离线 Batch)。理解这两组概念及其组合方式,是设计回测灰度系统的基础。
2.1 同步推理与异步推理
同步推理与异步推理的核心区别在于:客户端发出请求后是否需要阻塞等待完整响应。两种模式在延迟敏感度、资源调度、错误处理上存在显著差异。
| 对比维度 | 同步推理 (Sync Inference) | 异步推理 (Async Inference) |
|---|---|---|
| 请求-响应模型 | 请求发出后,连接保持,等待完整结果返回 | 请求发出后立即返回一个任务 ID 或回调凭证,结果后续获取 |
| 延迟特征 | 端到端延迟 = 网络 + 排队 + 推理 + 返回 | 客户端感知延迟极低(仅提交请求),实际推理延迟被异步化 |
| 适用场景 | 实时 API、在线推荐、低延迟交互 | 批量处理、长文本生成、视频分析、非实时决策 |
| 资源占用 | 推理期间独占连接/线程/GPU 上下文 | 请求可排队,资源可复用,支持背压 |
| 错误处理 | 超时或异常直接返回给客户端 | 通过回调、轮询或消息队列重试 |
架构决策要点: 同步推理适合 p99 延迟 < 200ms 的场景;异步推理适合 推理时长 > 1s 或 请求量波动剧烈 的场景。回测灰度中,灰度流量通常走同步推理以保持体验一致性,而回测任务走异步推理以解耦计算。
2.2 在线 Serving 与离线 Batch Serving
在线 Serving 与离线 Batch Serving 的区别在于数据到达方式和时效性要求。在线 Serving 处理实时到达的单个请求,离线 Batch Serving 处理预先准备好的批量数据。
| 对比维度 | 在线 Serving (Online Serving) | 离线 Batch Serving (Offline Batch Serving) |
|---|---|---|
| 数据输入 | 实时流式请求(HTTP/gRPC/WebSocket) | 批量文件、消息队列、数据湖分区 |
| 延迟要求 | 毫秒级 ~ 秒级 | 分钟级 ~ 小时级 |
| 吞吐模式 | 按需弹性扩缩,关注 QPS 和 p99 延迟 | 批量吞吐最大化,关注总处理时间和资源利用率 |
| 资源调度 | 常驻服务,GPU/CPU 预热,低延迟冷启动 | 按需拉起任务,可抢占式实例,支持 checkpoint |
| 典型框架 | Triton Inference Server, TorchServe, BentoML | Spark ML, Ray Serve Batch, Airflow + MLflow |
| 回测灰度角色 | 承载灰度流量,实时对比新旧模型 | 承载大规模回测任务,离线评估模型效果 |
实践建议: 在回测灰度系统中,在线 Serving 负责灰度流量路由和实时指标采集;离线 Batch Serving 负责历史数据回放和离线评估。两者通过统一的模型仓库和特征存储共享模型版本与特征数据。
2.3 四种组合模式与架构选型
将同步/异步与在线/离线交叉组合,得到四种典型的 Serving 架构模式。不同模式适用于不同的回测灰度阶段。
| 组合模式 | 交互方式 | 任务方式 | 典型场景 | 回测灰度用途 |
|---|---|---|---|---|
| 同步 + 在线 | 请求-响应阻塞 | 实时单请求 | 在线推荐、实时风控 | 灰度流量实时推理,对比延迟和效果 |
| 异步 + 在线 | 请求-回调/轮询 | 实时单请求但非阻塞 | 语音识别、图像生成 | 灰度流量中长耗时模型的分流推理 |
| 同步 + 离线 | 批量请求-批量响应 | 批量同步处理 | 小批量数据验证 | 回测数据的小规模快速验证 |
| 异步 + 离线 | 提交-回调/轮询 | 大规模批量处理 | 全量回测、模型评估 | 大规模历史数据回放与离线评估 |
2.4 回测灰度中的架构组合策略
在实际的回测灰度系统中,通常不会只使用单一模式,而是根据流量阶段和评估目标组合使用多种架构:
- 灰度发布阶段:使用 同步 + 在线 模式,将小比例实时流量路由到新模型,与基线模型同步对比延迟和效果指标。
- 回测评估阶段:使用 异步 + 离线 模式,将历史数据批量提交到回测任务队列,异步完成大规模推理和评估。
- 长尾模型验证:对于推理耗时较长的模型(如大语言模型、视频模型),使用 异步 + 在线 模式,避免阻塞灰度流量。
- 快速回归验证:在模型迭代过程中,使用 同步 + 离线 模式对小批量测试集进行快速验证。
常见陷阱: 不要将所有回测任务都设计为同步在线模式。大规模回测(百万级样本)如果走同步在线推理,会导致服务连接耗尽、超时雪崩,甚至影响线上灰度流量。务必为回测任务设计独立的异步离线通道。
2.5 架构选型决策树
以下决策树可以帮助你在设计 Serving 架构时快速选择正确的组合模式:
输入:推理场景需求
│
├─ 是否需要实时返回结果?
│ ├─ 是 → 在线 Serving
│ │ ├─ 推理耗时 < 1s?
│ │ │ ├─ 是 → 同步 + 在线(实时 API)
│ │ │ └─ 否 → 异步 + 在线(回调/轮询)
│ │ └─ 是否需要灰度流量对比?
│ │ └─ 是 → 同步 + 在线 + 流量路由
│ │
│ └─ 否 → 离线 Batch Serving
│ ├─ 数据量 < 10K 条?
│ │ ├─ 是 → 同步 + 离线(快速验证)
│ │ └─ 否 → 异步 + 离线(大规模回测)
│ └─ 是否需要 checkpoint 和断点续跑?
│ └─ 是 → 异步 + 离线 + 分布式任务调度
│
输出:Serving 架构组合模式
核心原则: 回测灰度系统的 Serving 架构设计应遵循 隔离性(回测与灰度流量隔离)、可观测性(全链路指标采集)、弹性(按需扩缩容)三大原则。同步/异步、在线/离线的选择本质上是延迟、吞吐、资源成本三者之间的权衡。