业务量上来了,一台服务器扛不住了,怎么办?加机器是第一反应,但加完之后怎么把流量合理分配到每台机器上?这就是负载均衡要解决的问题。

一、什么是负载均衡?

负载均衡(Load Balancing)是将网络流量分发到多台服务器的技术,目的是:

  • 提高可用性:单台服务器故障不影响服务
  • 提升性能:多台服务器并行处理,吞吐量更大
  • 弹性扩展:根据负载动态增减服务器

二、负载均衡类型

1. 硬件负载均衡

  • 专用硬件设备,如F5 BIG-IP
  • 性能强劲,价格昂贵
  • 适合大型企业

2. 软件负载均衡

  • 运行在普通服务器上的软件
  • 如Nginx、HAProxy、LVS
  • 成本低,灵活性高

3. 云负载均衡

  • 云服务商提供的托管服务
  • 无需运维,按需付费
  • 如AWS ELB、阿里云SLB

三、负载均衡算法

1. 轮询(Round Robin)

请求依次分发到每台服务器。

  • 优点:简单均匀
  • 缺点:不考虑服务器性能差异

2. 加权轮询(Weighted Round Robin)

根据服务器权重分配请求,权重高的服务器接收更多请求。

  • 适合服务器配置不同的场景

3. 最少连接(Least Connections)

将请求分发到当前连接数最少的服务器。

  • 适合请求处理时间差异大的场景

4. IP哈希(IP Hash)

根据客户端IP计算哈希值,同一IP总是分配到同一服务器。

  • 适合需要会话保持的场景

5. URL哈希

根据请求URL计算哈希值,相同URL分配到同一服务器。

  • 适合配合缓存使用

四、健康检查

负载均衡器需要检测后端服务器的健康状态:

检查方式

  • TCP检查:检测端口是否可连接
  • HTTP检查:检测特定URL返回是否正常
  • 自定义检查:执行自定义脚本

检查参数

  • 检查间隔:多久检查一次
  • 超时时间:多久没响应算失败
  • 失败阈值:连续失败几次标记为不健康
  • 恢复阈值:连续成功几次恢复健康

五、会话保持

有些应用需要同一用户的请求发送到同一服务器:

实现方式

  • Cookie方式:在响应中设置Cookie标识
  • 源IP方式:根据客户端IP绑定服务器
  • Header方式:根据特定HTTP头绑定

更好的方案

将会话存储到共享存储(如Redis),使应用无状态,避免会话保持的复杂性。

六、Nginx负载均衡配置示例

upstream backend {
    # 加权轮询
    server 192.168.1.1:8080 weight=3;
    server 192.168.1.2:8080 weight=2;
    server 192.168.1.3:8080 weight=1;
    
    # 健康检查(需要模块支持)
    # health_check interval=5s;
}

server {
    listen 80;
    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

飞盾云负载均衡

  • 多种算法:支持轮询、加权、最少连接等算法
  • 健康检查:自动检测故障服务器并摘除
  • 会话保持:支持Cookie和IP方式
  • 高可用:负载均衡器本身高可用,无单点故障
  • 结合CDN:与CDN无缝集成,一站式加速防护

总结

负载均衡是构建高可用系统的基础设施,选择合适的负载均衡类型和算法,配合健康检查机制,可以有效提升系统的可用性和性能。