多目标路由与故障转移
多目标模型使用一个面向调用方的别名承载多个目标模型。AISIX 为每个请求选择目标、重试符合条件的失败,并且可以在不要求应用更改模型名称的情况下执行故障转移。
该别名是面向调用方的模型名称,因此对于有权请求它的每个调用方 API Key,它都会显示在 GET /v1/models 中。将某个 Key 的作用域仅限定到该别名,即可把它作为调用方发现的唯一入口发布;此后可以更改别名的目标,而无需修改应用。
多目标模型包含 routing 块,而不是自身的服务提供方配置。每个目标都是一个已有的直接模型,具有自己的服务提供方密钥和上游模型名称。AISIX Cloud 通过模型 ID 引用这些目标,开源 AISIX 网关则在声明式资源文件中通过 display_name 引用它们。
路由模型选择一个直接目标,再由该目标使用自己的服务提供方密钥调用上游模型:
选择策略
请根据面向调用方的别名应如何分发流量来选择策略:
| 目标 | 策略 | 选择行为 |
|---|---|---|
| 保留一个主要目标和有序备用目标。 | failover | 按声明顺序尝试目标。 |
| 在相似目标之间轮转流量,可按比例分配。 | round_robin | 按目标 weight 做平滑加权轮询;权重相等或缺省时按声明顺序轮换。 |
| 将每个会话固定到同一目标。 | consistent_hash | 在加权哈希环上对每个请求的键做哈希,让相同键持续命中同一个健康目标。weight 改变的是哈希键的近似份额,而不是固定的请求百分比。适用于 A/B 测试和灰度发布以及会话亲和 + 池间故障转移。 |
| 优先选择预估价格最低的目标。 | least_cost | 按配置价格或 AISIX Cloud 目录定价对符合条件的目标排序。 |
| 优先选择近期观测到的最快目标。 | least_latency | 按近期上游延迟排序。 |
| 优先选择加权并发数最低的目标。 | least_busy | 按 (1 + 当前进行中的请求数) / max(weight, 1) 对符合条件的目标排序,数值最低者优先。 |
failover 是省略 strategy 时的默认值。你也可以使用路由标签按请求缩小符合条件的目标范围。
两个目标级属性对所有策略生效:
weight(默认1)在使用它的策略下决定目标的份额:round_robin的轮转份额、consistent_hash的哈希环份额、least_busy的并发折算系数。failover、least_cost和least_latency接受该字段但不使用。priority(默认0)将目标划分为层级——数值越大越优先,因此给备用目标配置-1。策略在每层内部对目标排序,只有当更高层的所有目标都失败或不健康时,较低层才会接收流量。请参阅会话绑定与池间故障转移。
AISIX 会先应用路由标签和 allowed_cidrs 过滤,再把剩余目标划分到各优先级层。因此,如果某个健康的高优先级目标因其中任一过滤条件而不适用于当前请求,较低优先级目标仍可为该请求提供服务。
原 weighted 策略已合并进 round_robin(现在按权重轮询),sticky 开关由 consistent_hash 策略取代。AISIX Cloud 会自动迁移已存储的路由模型;自管资源文件需要手动更新(weighted → round_robin 并保留权重;weighted + sticky → consistent_hash)。
AISIX 会在可重试的上游失败上执行重试和故障转移,例如 5xx 响应、请求超时和传输错误。大多数上游 4xx 响应会直接返回调用方。启用 retry_on_429 可处理上游限流,配置 fallback_on_statuses 可处理其他服务提供方特定的临时状态码。
AISIX 也会跳过超过自身模型限流的目标。它会将被跳过的目标记录为一次失败的 429 路由尝试,并按策略顺序继续尝试其余目标,不会重试该目标。当所有目标都超过限额时,请求返回 429。
如果目标自身的 allowed_cidrs 排除了调用方,该目标同样不会成为候选项。此检查在策略选择前执行,因此不会尝试该目标,也不会消耗 max_fallbacks 预算。当所有目标都排除调用方时,请求返回 403。
配置并测试故障转移模型
以下示例会构建并测试一个双目标模型:优先 使用 gpt-4o-primary,遇到符合条件的失败后改用 gpt-4o-secondary。本节同时提供 AISIX Cloud 和开源 AISIX 网关的操作说明。
准备工作
开始前,请准备以下资源:
- 两个或更多用作路由目标的直接模型。要执行故障测试,主要模型和备用模型必须使用不同的服务提供方密钥资源,但两个资源可以包含同一个上游凭据。
- 一个可以调用多目标模型的调用方 API Key,或创建该 Key 的权限。
- 用于执行 API 和验证命令的 cURL 和 jq。
- 对于 AISIX Cloud,需要一个已接入网关的环境,以及管理模型和调用方 API Key 的权限。
- 对于开源 AISIX 网关,需要有权访问声明式资源文件和网关进程。
创建模型
请先创建直接目标模型,再创建多目标模型。以下示例通过两种管理路径配置相同的故障转移行为:AISIX 先使用 gpt-4o-primary,在发生可重试失败后改用 gpt-4o-secondary。