大模型推理网关设计与实现
在一次面向大模型推理场景的技术笔试中,我用 2 小时完成了一个 HTTP 网关。本文记录设计思路、技术实现和 AI 协作体会。
一、背景与挑战
这次笔试的核心挑战是在提升 KV Cache 命中率和防止单机过载之间做动态平衡。
- 相同前缀路由:将相同前缀的请求路由到同一后端,复用 KV Cache,降低延迟。
- 热点防御:避免所有相同前缀请求堆到同一台机器导致过载排队。
如何在两者之间权衡是核心命题。
时间限制:2 小时
工具:网页内置 IDE + AI 辅助编程
技术栈:Java 17 + Spring Boot 3.2 + Maven
二、核心设计
整体架构
客户端请求 → 网关入口 → 路由决策层 → 负载均衡层 → 后端实例池
↓
指标采集层(命中率、延迟、负载分布)
模块拆解
| 模块 | 实现方案 | 设计考量 |
|---|---|---|
| 路由策略 | 前缀匹配 + 降级分流 | 优先让相同前缀请求打到同一实例;过载时自动降级 |
| 负载均衡 | 动态权重算法 | 综合命中率、当前负载、健康状态计算权重 |
| 健康检查 | 主动探测 + 熔断降权 | 后端不可用时自动摘除,恢复后重新加入 |
| 指标统计 | 滑动窗口 + P95 计算 | 实时统计成功率、延迟分布、命中率 |
三、核心亮点
1. 动态权重算法
如果只追求命中率,会把相同前缀请求都打到同一实例,导致过载。方案设计了联合打分函数:
实例权重 = (命中率权重 × 历史命中率) + (负载权重 × (1 - 当前负载率))
- 命中率权重和负载权重可配置,支持不同场景调优。
- 实例过载时(并发数 > 阈值),命中率权重动态降低。
- 支持策略切换,可与纯轮询策略对比。
阈值设定:默认并发阈值 100,压测发现超过后延迟明显上升,以此作为过载信号。
2. 工程化实践
虽然是限时开发,但特别注意了工程化要求:
- 配置与代码分离:后端列表、阈值、策略参数全部放在
application.yml,支持热加载。 - 异常处理与降级:后端超时(3 秒)自动降级到其他实例,全部失败时返回 503。
- 可观测性:实时输出请求总数、成功率、P95 延迟、命中率、负载分布。
- 代码可读性:核心类有职责注释,关键算法有设计说明,使用依赖注入便于测试。
3. 压测验证
设计了 4 类测试场景,验证系统鲁棒性:


