题目
简述常见负载均衡算法及其特点
信息
- 类型:问答
- 难度:⭐
考点
负载均衡算法分类,轮询算法原理,随机算法原理,加权算法应用场景
快速回答
常见负载均衡算法及特点:
- 轮询(Round Robin):按顺序分配请求,保证每个服务器均匀分担负载
- 随机(Random):随机选择服务器,适合服务器性能相近的场景
- 加权轮询(Weighted Round Robin):根据服务器性能分配权重,高性能服务器处理更多请求
原理说明
负载均衡算法用于在多个服务器间分配网络请求,避免单点过载:
- 轮询算法:维护服务器列表指针,依次分配新请求(如:Server1→Server2→Server3→Server1)
- 随机算法:通过随机数生成器选择目标服务器(如:Math.random() * serverCount)
- 加权轮询:为高性能服务器设置更高权重(如权重3:2:1),每分配3次请求给Server1后,才分配2次给Server2
代码示例(Python伪代码)
# 轮询算法示例
servers = ['srv1', 'srv2', 'srv3']
current = 0
def round_robin():
global current
server = servers[current]
current = (current + 1) % len(servers)
return server
# 加权轮询示例
weighted_servers = [('srv1', 3), ('srv2', 2), ('srv3', 1)]
total_weight = sum(w for _, w in weighted_servers)
def weighted_round_robin():
# 实际实现需考虑权重累积和动态调整
# 简版:按权重比例生成服务器序列 [srv1, srv1, srv1, srv2, srv2, srv3]
# 然后轮询该序列
...最佳实践
- 服务器性能差异大时优先使用加权算法
- 无状态服务可用轮询/随机,有状态服务需配合会话保持技术
- 结合健康检查动态移除故障节点
常见错误
- 未考虑服务器性能差异,对低配服务器平等分配流量
- 忽略会话保持,导致用户状态丢失(如购物车数据)
- 权重设置不合理,高权重服务器仍可能过载
扩展知识
- 最少连接(Least Connections):将请求发给当前连接数最少的服务器
- IP哈希(IP Hash):根据客户端IP分配,保证同一用户始终访问同一服务器
- 现代负载均衡器(如Nginx、HAProxy)支持多种算法动态切换