1. 负载均衡算法概述
在分布式系统架构中,负载均衡技术扮演着至关重要的角色。它就像交通指挥中心,将海量的请求合理地分配到各个服务器节点,避免某些节点过载而其他节点闲置的情况。轮询算法是最基础的负载均衡策略之一,它按照固定的顺序将请求依次分配给后端服务器。但这种简单粗暴的方式存在明显缺陷——它没有考虑服务器的实际处理能力差异。
假设我们有三台服务器:ServerA配置最高,能处理1000QPS;ServerB中等配置,处理600QPS;ServerC是老旧设备,只能承受300QPS。传统轮询算法会平均分配请求(比如各33%),这显然会导致ServerA资源闲置而ServerC不堪重负。加权轮询算法应运而生,它通过给每台服务器分配不同的权重值(如ServerA权重5,ServerB权重3,ServerC权重1),让性能更强的服务器承担更多流量。
但传统加权轮询也有其局限性。它会在权重耗尽前持续将请求分配给同一服务器,导致流量分配不够平滑。比如权重5:3:1的分配可能呈现AAAAABBB C这样的序列,短时间内给ServerA带来请求突增。平滑加权轮询算法正是为解决这一问题而设计的,它能产生更均匀的请求分布序列(如AABABAABA),在保持权重比例的同时实现流量的平稳过渡。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 算法核心原理剖析
2.1 数据结构设计
平滑加权轮询算法的核心在于动态调整的权重体系。每个服务器节点需要维护三个关键参数:
- 静态权重(Weight):反映服务器的基准处理能力,配置后通常不变
- 当前权重(Current):动态值,每次选择时参与计算
- 有效权重(Effective):根据健康状态动态调整,初始等于静态权重
算法执行流程中,会循环执行以下步骤:
- 累加所有节点的当前权重(Total = ΣCurrent)
- 选择当前权重最大的节点处理本次请求
- 被选节点的当前权重减去总权重(Current -= Total)
- 所有节点的当前权重加上其有效权重(Current += Effective)
这种设计保证了:
- 长期来看,请求分配比例趋近于有效权重比例
- 短期内请求分布均匀,避免集中分配
- 故障节点可通过降低有效权重自动减少流量
2.2 数学证明
假设有三台服务器A、B、C,静态权重分别为5、3、
