调度算法怎么选
常见调度算法有三类:加权轮询按权重轮流分配,适合请求均匀、处理时长相近的服务;加权最小连接数把新连接交给当前连接数最少的后端,适合处理耗时差异大的服务;一致性哈希按客户端地址或指定键固定映射,适合缓存亲和与有状态服务。选错算法的典型症状是「后端配置相同但负载明显不均」。
基本信息
| 加权轮询 wrr | 按权重轮流分配,最常用的默认选择 |
|---|---|
| 加权最小连接数 wlc | 按当前连接数分配,需产品支持该算法 |
| 一致性哈希 | 按源 IP 等键固定映射,成员变化会引发部分键重映射 |
| 与健康检查关系 | 不健康成员直接退出分配,权重不再生效 |
| 生效粒度 | 通常只影响新连接,存量连接不重新分配 |
| 会话粘性区别 | 会话保持按会话或连接,一致性哈希按客户端地址 |
典型使用场景
- 同质后端、请求时长接近:加权轮询是最稳妥的默认选择
- 部分请求耗时长(报表、导出):最小连接数能避免个别后端堆积
- 有本地缓存的后端集群:一致性哈希提升缓存命中率
- 按机器规格分配流量:用权重体现配置差异
- 长连接协议或推送服务:结合会话保持与连接数观察效果
查看与调整调度算法
查看与调整调度算法
# 阿里云:修改四层监听调度算法
aliyun slb SetLoadBalancerTCPListenerAttribute \
--RegionId cn-hangzhou --LoadBalancerId lb-xxxxxxxx \
--ListenerPort 80 --Scheduler wlc
# 调整后观察各后端的连接数分布是否趋于均匀
ss -s # 在后端实例上查看连接汇总,确认是否出现明显倾斜算法对照
| 算法 | 适用场景 | 注意 |
|---|---|---|
| 加权轮询 wrr | 同类服务、请求均匀 | 最常用的默认选择 |
| 加权最小连接 wlc | 请求处理时长差异大 | 需要产品支持该算法 |
| 一致性哈希(源 IP) | 缓存亲和、有状态服务 | 成员变化引发部分键重映射 |
| 会话保持 | 需要固定到同一后端 | 与调度算法叠加使用,注意语义差异 |
会话保持与一致性哈希都能实现粘性:前者按会话或连接粒度,后者按客户端地址粒度,业务语义不同,选择前先想清楚「粘性应该跟谁绑定」。
后端负载不均时先看长连接分布:即使算法是轮询,长连接一旦建立就不会重新分配,连接数倾斜会被长期保持。