负载均衡算法
Published: Sun Feb 15 2026 | Modified: Sat Feb 07 2026 , 1 minutes reading.
负载均衡算法
引言:“单点故障”问题
想象一家餐厅有 100 個客人,但只有 1 名服务员。服务员会被累死,而客人会等得发疯。如果你雇了 5 名服务员,你就需要一种方法来决定哪位服务员服务哪张桌子。
负载均衡 (Load Balancing) 是将进入的网络流量分发到一组后端服务器(服务器池)的过程。它确保没有一台服务器承受过大的压力,从而提高响应速度和可用性。
算法要解决什么问题?
- 输入: 涌入的请求流。
- 输出: 处理该请求的最佳后端服务器。
- 承诺: 可扩展性(通过增加服务器来处理更多流量)和可靠性(如果一台服务器挂了,其他服务器能接管流量)。
常见算法
1. 轮询 (Round Robin)
- 逻辑: 简单地按顺序分配:服务器 1,然后是 2,然后是 3,再回到 1。
- 适用场景: 所有服务器硬件配置相同,且每个请求的处理成本大致相等。
2. 加权轮询 (Weighted Round Robin)
- 逻辑: 根据服务器的处理能力分配“权重”。权重为 10 的服务器收到的请求是权重为 5 的服务器的两倍。
- 适用场景: 服务器集群配置不均(例如,有些机器是 64GB 内存,有些只有 16GB)。
3. 最小连接数 (Least Connections)
- 逻辑: 将下一个请求发送到当前活跃连接数最少的服务器。
- 适用场景: 处理耗时差异很大的请求(如视频流或持久的 WebSocket 连接)。
4. IP 哈希 (IP Hash)
- 逻辑: 根据客户端的 IP 地址决定去哪台服务器(例如
hash(客户端IP) % N)。 - 适用场景: “粘性会话 (Sticky Sessions)”。确保同一个用户始终访问同一台服务器,以利用本地缓存或 Session 数据。
典型业务场景
✅ Web 服务器: Nginx 或 HAProxy 将 HTTP 请求分发到 Node.js/Python 后端。
✅ 数据库读副本: 将 “SELECT” 查询分散到 5 个只读数据库节点上。
✅ API 网关: 根据路由路径将流量引导到不同的微服务。
❌ 有状态应用: 如果你使用轮询,就不能在服务器内存里存用户 Session。你必须使用共享的 Redis 存储,或者使用 IP 哈希。
性能与复杂度总结
- 效率: 极高。大多数算法的复杂度为 或 。
- 开销: 与水平扩展带来的收益相比,算法本身的开销几乎可以忽略不计。
小结:一句话记住它
“负载均衡是互联网的‘交通警察’。它确保你的系统可以通过增加‘人手’来扩容,并让你在单台服务器宕机时依然屹立不倒。”
