负载均衡是大型架构核心,下面我详解负载均衡算法@mikechen
1.轮循

轮询算法,是负载均衡中最简单的一种。
它按顺序将请求依次分配给服务器列表中的每个服务器,循环往复。
优点简单易实现:算法逻辑直观,无需复杂计算或状态跟踪,只需维护一个服务器列表和当前索引。
公平性强:每个服务器在理想情况下会接收到相同数量的请求,确保负载均匀分布。
无状态:不需要记录服务器的当前负载或历史数据,适合轻量级实现。
缺点忽略服务器异质性:不考虑服务器的处理能力差异。
如果服务器性能不均(如CPU、内存不同),会导致弱服务器过载。
应用场景同构服务器集群:所有服务器配置相似,如静态Web服务器农场或CDN节点,用于分发HTTP请求。
适合初级负载均衡需求,不需要高级监控的场景,如小型网站或内部API服务。
2.加权轮循

加权轮询是轮询的扩展版本,为每个服务器分配一个权重值,根据权重比例决定请求分配频率。
比如:权重高的服务器会接收更多请求。
优点考虑服务器容量:能根据服务器性能(如CPU、带宽)分配不同比例的负载,实现更合理的均衡。
灵活性高:通过调整权重,可以轻松处理异构环境,支持动态服务器扩容。
公平且可预测:在权重配置正确的情况下,负载分布更均匀,避免弱服务器成为瓶颈。
缺点配置复杂:需要手动或自动设置权重,初始配置错误可能导致不均衡;动态调整权重需要额外监控系统。
实现稍复杂:相比简单轮询,需要计算权重比例(如使用GCD算法平滑分配),增加少量计算开销。
应用场景异构服务器环境:服务器性能差异大。
如云环境中混合使用高配和低配实例,用于Web应用或微服务架构。
3.随机

随机算法,通过随机选择一个服务器来处理请求,通常使用伪随机数生成器。
优点极度简单:无序列表维护,无需索引或状态跟踪,实现成本最低。
低开销:计算开销小,适合高并发场景,不受服务器顺序影响。
统计均衡:在大规模请求下,负载会趋于均匀分布(大数定律)。
缺点短期不均衡:随机性可能导致某些服务器短期内接收过多或过少请求,造成负载波动。
应用场景服务器同质且无状态:如无差别缓存服务器,用于快速分发读请求。
高吞吐量系统:在请求量巨大时(如搜索引擎后端),随机性足以实现均衡,而无需复杂逻辑。
4.最少连接

最少连接算法,将新请求分配给当前活动连接数最少的服务器,动态考虑服务器负载。
优点动态负载均衡:实时根据连接数调整分配,适合处理时间不均的请求(如文件下载)。
高效利用资源:防止忙碌服务器过载,确保整体系统响应时间更稳定。
适应长连接:特别适合持久连接场景,能更好地反映服务器当前容量。
缺点开销较高:需要持续跟踪每个服务器的连接数,增加监控和计算负担。
不适合短连接:在请求处理时间相似时,可能退化为轮询,且连接数不完全代表负载(忽略CPU等因素)。
应用场景长连接应用:如WebSocket服务、数据库连接池或游戏服务器,用于维持持久会话。
变长请求环境:处理时间差异大的场景,如API网关或文件服务器,确保慢请求不阻塞整体。
高级负载均衡器:常用于L7层(如Nginx的upstream模块),结合健康检查在云原生环境中应用。
