業務量上來了,一台服務器扛不住了,怎麼辦?加機器是第一反應,但加完之後怎麼把流量合理分配到每台機器上?這就是負載均衡要解決的問題。

一、什麼是負載均衡?

負載均衡(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無縫集成,一站式加速防護

總結

負載均衡是構建高可用系統的基礎設施,選擇合適的負載均衡類型和算法,配合健康檢查機制,可以有效提升系統的可用性和性能。