Nginx是大型架构核心,下面我详解Nginx负载均衡算法@mikechen
一、轮询(Round Robin)
轮询:是 Nginx 默认的负载均衡方式。
其基本思想是:按照顺序将请求依次分配给后端服务器,循环往复,保证每台机器都能平均接收到请求。

请求1 → Server1 请求2 → Server2 请求3 → Server3 请求4 → Server1
循环分配。
优点
轮询算法实现简单,开销较低,具有较好的公平性。对于后端服务器性能相近、请求处理耗时差异不大的场景,轮询能够较为均匀地分摊流量。
缺点
轮询没有考虑服务器性能差异,也没有考虑请求的实际复杂度。如果某些请求耗时较长,或某些后端机器性能较弱,轮询可能导致资源分配不均,出现部分节点过载的情况。
应用场景
轮询适用于后端服务器配置接近、业务请求相对均匀的系统,例如内部管理平台、轻量级 API 服务等。
二、加权轮询(Weighted Round Robin)
加权轮询是在轮询的基础上,为不同服务器设置不同权重。
权重越高,分配到的请求越多。Nginx 会根据配置中的权重值,按比例将请求派发给各个后端节点。

Server1 weight=5 Server2 weight=1
那么:
Server1处理5/6请求 Server2处理1/6请求
优点
该算法能够充分利用服务器性能差异,使高性能服务器承担更多请求,提升整体资源利用率。
对于异构集群来说,加权轮询是非常实用的方案。
缺点
权重配置需要结合实际情况进行调优。如果权重设置不合理,可能导致部分服务器负载过高或资源浪费。
此外,它仍然没有感知单个请求的耗时与连接状态。
应用场景
加权轮询适用于后端服务器性能不一致的场景,例如新旧机器混合部署、云服务器规格不同、某些节点配置更高的业务系统。
三、IP Hash
IP Hash 通过对客户端 IP 地址进行哈希运算,将同一客户端的请求固定分配到同一台后端服务器。
这样可以在一定程度上实现“会话粘性”,避免用户在多次请求中频繁切换后端节点。

用户A → Server1 用户B → Server3
只要IP不变:
目标机器不变。
优点
IP Hash 能够保持会话连续性,特别适合依赖本地 session 的应用,减少 session 共享带来的复杂度。
对于登录状态、购物车信息等需要保持用户上下文的场景,具有较强实用性。
缺点
它的负载均衡效果并不一定均匀。
由于不同客户端来源分布不均,可能导致某些服务器压力更大。
此外,当客户端 IP 发生变化时,可能会被分配到新的后端节点,影响会话稳定性。
应用场景
IP Hash 常用于需要会话保持的传统 Web 应用,如老式 Java Web 系统、未使用分布式 Session 的业务系统等。
四、least_conn(最少连接)
least_conn 算法会优先将请求分配给当前活动连接数最少的后端服务器。
相比单纯按请求数量分配,它更关注服务器的实时负载情况。

例如:
| 服务器 | 当前连接数 |
|---|---|
| Server1 | 100 |
| Server2 | 20 |
| Server3 | 5 |
优先进入:
Server3
优点
该算法更适合处理请求耗时不均的场景,对于长连接、慢请求或耗时差异较大的业务。
least_conn 能更合理地分配压力,避免某些节点因连接堆积而变慢。
缺点
它对后端状态变化更敏感,调度逻辑也比简单轮询略复杂。
若连接数不能很好反映真实负载,也可能出现调度偏差。
应用场景
least_conn 适用于请求时长差异明显的服务,例如文件下载、长轮询、接口耗时不稳定的系统,或 WebSocket 等长连接场景。