什麽是負載均衡?
本文轉載於極光日報 https://zhuanlan.zhihu.com/jiguang-daily
負載均衡是高可用網絡基礎架構的關鍵組件,通常用於將工作負載分布到多個服務器來提高網站、應用、數據庫或其他服務的性能和可靠性。
一個沒有負載均衡的 web 架構類似下面這樣:
在這裏用戶是直連到 web 服務器,如果這個服務器宕機了,那麽用戶自然也就沒辦法訪問了。另外,如果同時有很多用戶試圖訪問服務器,超過了其能處理的極限,就會出現加載速度緩慢或根本無法連接的情況。
而通過在後端引入一個負載均衡器和至少一個額外的 web 服務器,可以緩解這個故障。通常情況下,所有的後端服務器會保證提供相同的內容,以便用戶無論哪個服務器響應,都能收到一致的內容。
從圖裏可以看到,用戶訪問負載均衡器,再由負載均衡器將請求轉發給後端服務器。在這種情況下,單點故障現在轉移到負載均衡器上了。這裏又可以通過引入第二個負載均衡器來緩解,但在討論之前,我們先探討下負載均衡器的工作方式。
負載均衡器可以處理什麽樣的請求?
負載均衡器的管理員能主要為下面四種主要類型的請求設置轉發規則:
- HTTP
- HTTPS
- TCP
- UDP
負載均衡器如何選擇要轉發的後端服務器?
負載均衡器一般根據兩個因素來決定要將請求轉發到哪個服務器。首先,確保所選擇的服務器能夠對請求做出響應,然後根據預先配置的規則從健康服務器池(healthy pool)中進行選擇。
因為,負載均衡器應當只選擇能正常做出響應的後端服務器,因此就需要有一種判斷後端服務器是否「健康」的方法。為了監視後臺服務器的運行狀況,運行狀態檢查服務會定期嘗試使用轉發規則定義的協議和端口去連接後端服務器。如果,服務器無法通過健康檢查,就會從池中剔除,保證流量不會被轉發到該服務器,直到其再次通過健康檢查為止。
負載均衡算法
負載均衡算法決定了後端的哪些健康服務器會被選中。幾個常用的算法:
- Round Robin(輪詢):為第一個請求選擇列表中的第一個服務器,然後按順序向下移動列表直到結尾,然後循環。
- Least Connections(最小連接):優先選擇連接數最少的服務器,在普遍會話較長的情況下推薦使用。
- Source:根據請求源的 IP 的散列(hash)來選擇要轉發的服務器。這種方式可以一定程度上保證特定用戶能連接到相同的服務器。
如果你的應用需要處理狀態而要求用戶能連接到和之前相同的服務器。可以通過 Source 算法基於客戶端的 IP 信息創建關聯,或者使用粘性會話(sticky sessions)。
最後,想要解決負載均衡器的單點故障問題,可以將第二個負載均衡器連接到第一個上,從而形成一個集群。
當主負載均衡器發生了故障,就需要將用戶請求轉到第二個負載均衡器。因為 DNS 更改通常會較長的時間才能生效,因此需要能靈活解決 IP 地址重新映射的方法,比如浮動 IP(floating IP)。這樣域名可以保持和相同的 IP 相關聯,而 IP 本身則能在服務器之間移動。
一個使用浮動 IP 的負載均衡架構示意圖:
什麽是負載均衡?