跨 LLM 供应商负载均衡
分配流量前先按能力分组LLM 提供商均衡
先按能力分组
只均衡能力等价的供应商,并验证约束、信号、公平性与故障行为。

速览
相同模型标签不保证上下文、工具、区域或策略等价。
权重、并发、延迟、配额与健康优化不同问题。
用配额、优先级与公平队列避免单一负载耗尽资源池。
正常路径均衡并不能证明熔断或恢复有效。
如何在多个 LLM 供应商间负载均衡:从目录到灰度发布
为每个端点登记不可变模型版本、输入与输出模态、上下文限制、工具和结构化输出行为、区域、策略、配额及健康来源。不能因为营销名称相似就把端点放入同一资源池;只有通过同一组契约 Fixture 后,才可建立面向具体工作负载的资源池。
随后选择与工作负载相符的最简单策略。轮询适合真正等价的批处理任务;最少负载策略依赖可信的进行中请求计数;延迟感知路由需要新鲜的区域测量,还要防止流量全部涌向暂时较快的端点。增加熔断,回放真实流量、注入故障,并在扩大范围前灰度发布策略变更。
设置选择
| 选择 | 最适合 | 选择前验证 |
|---|---|---|
| 加权 | 在等价容量间进行稳定分配。 | 维护权重,并与健康移除结合。 |
| 最少负载 | 并发能够预测该负载的排队。 | 定义可比负载单位并抑制噪声变化。 |
| 延迟感知 | 交互路径具有可信区域测量。 | 使用尾延迟并避免冷启动偏差。 |
| 配额感知 | 端点拥有独立限制或重置窗口。 | 尊重租户预算与原生重试信号。 |
运营保护
为每次决策使用的健康、负载、配额与熔断数据标记时间。
定义触发、冷却、半开探针与渐进回归。
限制租户并发与成本,并有意预留优先容量。
存储候选集、排除项、信号快照、策略与结果。
在真实负载下验证
均匀的压测请求很容易掩盖生产路由真正会遇到的问题。应根据实际 Prompt 长度、输出长度、流式持续时间、工具使用和租户分布构建回放集,并为回放保留期望输出或验证器,让测试既能发现传输失败,也能识别语义漂移。
- 回放负载组合、突发、长流以及“吵闹邻居”式租户竞争。
- 注入区域延迟、429、5xx、配额耗尽,以及过期或相互矛盾的健康信号。
- 按工作负载测量请求分布、队列年龄、首 Token 延迟、尾延迟、错误、成本与公平性。
- 验证长流式请求不会占满为短交互请求保留的全部容量。
- 按工作负载灰度策略变更,并保留携带旧注册表版本的固定路由回滚。
过滤、评分、派发、观测
版本化目录先产生候选项。硬过滤器首先剔除不满足模态、上下文大小、工具支持、区域、租户策略或剩余配额等强制要求的端点;选择器再根据新鲜的延迟、容量、成本和错误信号,只对合格集合评分。顺序非常重要:再高的分数也不能让不兼容路由变成合格路由。
派发一次有界尝试,并记录目录版本、候选集合、淘汰原因、评分输入和最终路由。健康状态与熔断器可在关键路径之外更新,但必须附带新鲜度时间戳,避免过期遥测被误认为当前容量。故障切换继续消耗同一个父请求截止时间和尝试预算,而不是启动新的请求生命周期。
生产规则:只在已证明对该工作负载等价的端点间均衡,并保留明确的固定路由用于诊断与回滚。
分别均衡推理与能力
网关负责均衡模型端点,而 QVeris 发现并调用外部 API、工具、服务与实时数据。二者属于不同的可用性域:模型路由健康,并不能证明市场数据源、搜索工具或交易 API 同样健康,也不能证明租户拥有权限或数据足够新鲜。
模型与能力应分别维护资源池、配额、熔断器和重试预算,只共享关联工作流所需的租户、父 Trace、截止时间、区域和策略快照。如果工具结果已经产生后推理才发生故障切换,应继续传递已验证结果;只有数据新鲜度契约明确要求刷新时,才再次调用工具。
先筛选健康且合格的路由,再做负载均衡
负载均衡不能把请求发给缺少所需功能或数据策略的低价路由。先按能力、区域、租户与当前健康状态过滤,再使用稳定选择方法,避免重试随机扩散。
def choose_route(request, routes):
eligible = [r for r in routes
if r.healthy
and request.capabilities <= r.capabilities
and request.region in r.allowed_regions]
if not eligible:
raise NoEligibleRoute(request.capabilities, request.region)
bucket = stable_hash(request.tenant_id, request.request_id) % sum(r.weight for r in eligible)
for route in eligible:
bucket -= route.weight
if bucket < 0:
return route
raise AssertionError("unreachable")- 健康状态应来自有界窗口,而不是单次错误。
- 限制每条路由并发,并逐步摘除,避免流量冲击。
- 按工作负载而不是全局测量合格质量、延迟分位、错误与成本。
实施参考已根据官方资料核验:OpenTelemetry GenAI conventions。
FAQ
只有工作负载契约接受其能力与质量差异时才可以。
简单加权或轮询加严格健康移除更易验证。
相关但不同:均衡在执行前选择,故障切换在失败后响应。
