多通道负载均衡是什么?请求在通道之间到底是怎么分配、健康检查与自动切换又是靠什么触发的

多通道负载均衡是把多个可互相替代的上游通道注册到同一调度组,由调度层按权重、并发或标识哈希把每个请求分派到其中一条,并用主动探测加被动统计判定通道健康度;通道连续失败会被自动摘除,请求改投其他通道,探针确认恢复后再经半开状态放回。它不适用于不允许重试的非幂等请求。

多通道负载均衡指的是把多个可互相替代的上游通道注册到同一个调度组,由调度层为每个进入的请求选出一条可用通道转发,通道异常时自动改投其他通道。它的前提是这些通道提供同类能力、彼此可以互换;如果请求本身不允许重试,例如已扣款又没有幂等键的写操作,负载均衡就只能做前置分流,不能做失败后的自动改投。 通道配置决定了负载均衡能做到哪一步。每条通道记录通常包含上游地址、鉴权凭证、支持的模型或接口集合、权重、并发上限、超时阈值和分组标签。权重决定静态分配比例,并发上限决定单条通道最多承接多少在途请求,分组标签则让调度层先把请求匹配到能力相符的一组通道,再在组内做选择。 分配算法没有唯一最优解,选哪种取决于请求特征与通道差异。轮询适合各通道能力接近的场景,加权轮询适合通道容量不一致的场景,最少连接把请求优先给当前在途请求最少的通道,一致性哈希则在需要会话稳定时把同一标识的请求固定到同一条通道。多算法并存时,要先判断哪一类请求对稳定性更敏感,再给不同接口绑定不同策略。 是否需要会话粘性,是分配策略里最容易被忽略的分岔点。无状态的纯文本推理调用通常不需要粘性,随机或最少连接就够;如果上游对上下文有缓存,或者某条通道持有专属会话状态,就必须按用户或会话标识做哈希,否则缓存命中率会明显下降,延迟反而变高。 健康检查分主动和被动两条腿。主动检查由调度层按固定间隔向通道发轻量探测请求,连续失败到阈值就把通道标记为不可用,连续成功到恢复阈值再标记为可用。被动检查依据真实业务的错误率、超时率和状态码分布,在不额外发请求的前提下发现主动探测覆盖不到的问题,两者结合才不至于漏判或误判。 健康判定必须区分错误来源,否则会把正常限流当成故障。客户端参数错误、鉴权失败这类 4xx 属于请求侧问题,不该扣通道的健康分;上游限流、连接超时、5xx 才是通道侧问题。把限流一律判成宕机,会造成所有通道被同时摘除,反而把局部故障放大成整体不可用。 自动切换由摘除、重投、恢复三个动作组成。通道被判为不健康后先从候选池摘除,正在途的请求按超时策略结束,后续请求改投同组的其他通道;探针确认恢复后,通道先进半开状态放少量流量观察,再转回正常。少了半开这一步,恢复瞬间的流量回灌很容易把刚缓过来的通道再次打挂。 重试次数和幂等性是自动切换的硬边界。只有确认可重试的请求才应在通道间重投,重试次数要有上限并配合整体超时预算,否则一次慢请求会连锁占用多条通道的并发额度。对写操作类请求,要么由业务层提供幂等键,要么只在请求尚未发出前做通道切换,不能把重投当成通用兜底手段。 容量保护往往比选路策略更影响稳定性。每条通道的并发上限、排队队列长度和限流阈值需要显式配置,调度层在候选通道全部接近上限时应当直接拒绝,而不是无限排队。权重调整也要配合真实余量,把权重加在已经没有空闲容量的通道上,只会让它最先被熔断。 可观测性决定调度策略的调整是否有依据。需要按通道维度记录请求量、成功率、平均与长尾延迟、超时次数、被摘除次数,并保留单次请求经过了哪条通道的追踪信息。没有这些数据时,策略改动只能靠猜,也分不清某条通道被摘除是它自身故障还是上游整体波动。 几个常见误区需要提前避开。一是把故障切换当成万能,通道之间如果共用同一上游或同一出口,切换并无意义;二是健康检查过于激进,探针本身会把通道打出限流;三是忽略成本差异,不同通道计费不同,优先选便宜通道时必须给稳定性留权重,否则省下的成本会被重试和排障吃掉。 落地顺序建议是先对齐通道能力集合,再配置权重与并发上限,然后定义健康判定规则,明确哪些状态码扣分、哪些不扣,最后接上自动切换与半开恢复,并用监控验证切换是否真的发生过。顺序反过来做,等于在没有基准数据的情况下调策略,一旦出问题会非常难定位。