Nginx负载均衡算法详解(4大主流算法)

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

一、轮询(Round Robin)

轮询:是 Nginx 默认的负载均衡方式。

其基本思想是:按照顺序将请求依次分配给后端服务器,循环往复,保证每台机器都能平均接收到请求。

Nginx负载均衡算法详解(4大主流算法)-mikechen

请求1 → Server1
请求2 → Server2
请求3 → Server3
请求4 → Server1

循环分配。

优点

轮询算法实现简单,开销较低,具有较好的公平性。对于后端服务器性能相近、请求处理耗时差异不大的场景,轮询能够较为均匀地分摊流量。

缺点

轮询没有考虑服务器性能差异,也没有考虑请求的实际复杂度。如果某些请求耗时较长,或某些后端机器性能较弱,轮询可能导致资源分配不均,出现部分节点过载的情况。

应用场景

轮询适用于后端服务器配置接近、业务请求相对均匀的系统,例如内部管理平台、轻量级 API 服务等。

 

二、加权轮询(Weighted Round Robin)

加权轮询是在轮询的基础上,为不同服务器设置不同权重。

权重越高,分配到的请求越多。Nginx 会根据配置中的权重值,按比例将请求派发给各个后端节点。

Nginx负载均衡算法详解(4大主流算法)-mikechen

Server1 weight=5
Server2 weight=1

那么:

Server1处理5/6请求
Server2处理1/6请求

优点

该算法能够充分利用服务器性能差异,使高性能服务器承担更多请求,提升整体资源利用率。

对于异构集群来说,加权轮询是非常实用的方案。

缺点

权重配置需要结合实际情况进行调优。如果权重设置不合理,可能导致部分服务器负载过高或资源浪费。

此外,它仍然没有感知单个请求的耗时与连接状态。

应用场景

加权轮询适用于后端服务器性能不一致的场景,例如新旧机器混合部署、云服务器规格不同、某些节点配置更高的业务系统。

 

三、IP Hash

IP Hash 通过对客户端 IP 地址进行哈希运算,将同一客户端的请求固定分配到同一台后端服务器。

这样可以在一定程度上实现“会话粘性”,避免用户在多次请求中频繁切换后端节点。

Nginx负载均衡算法详解(4大主流算法)-mikechen

用户A → Server1
用户B → Server3

只要IP不变:

目标机器不变。

优点

IP Hash 能够保持会话连续性,特别适合依赖本地 session 的应用,减少 session 共享带来的复杂度。

对于登录状态、购物车信息等需要保持用户上下文的场景,具有较强实用性。

缺点

它的负载均衡效果并不一定均匀。

由于不同客户端来源分布不均,可能导致某些服务器压力更大。

此外,当客户端 IP 发生变化时,可能会被分配到新的后端节点,影响会话稳定性。

应用场景

IP Hash 常用于需要会话保持的传统 Web 应用,如老式 Java Web 系统、未使用分布式 Session 的业务系统等。

 

四、least_conn(最少连接)

least_conn 算法会优先将请求分配给当前活动连接数最少的后端服务器。

相比单纯按请求数量分配,它更关注服务器的实时负载情况。

Nginx负载均衡算法详解(4大主流算法)-mikechen

例如:

服务器 当前连接数
Server1 100
Server2 20
Server3 5

优先进入:

Server3

优点

该算法更适合处理请求耗时不均的场景,对于长连接、慢请求或耗时差异较大的业务。

least_conn 能更合理地分配压力,避免某些节点因连接堆积而变慢。

缺点

它对后端状态变化更敏感,调度逻辑也比简单轮询略复杂。

若连接数不能很好反映真实负载,也可能出现调度偏差。

应用场景

least_conn 适用于请求时长差异明显的服务,例如文件下载、长轮询、接口耗时不稳定的系统,或 WebSocket 等长连接场景。

评论交流
    说说你的看法