常用負載均衡詳解(圖文總結)

Hello-Brand發表於2024-03-14

1 介紹

在網際網路場景下,負載均衡(Load Balance)是分散式系統架構設計中必須考慮的一個環節,它通常是指將負載流量(工作任務、訪問請求)平衡、分攤到多個操作單元(伺服器、元件)上去執行的過程。
目的在於提供負載配比,解決效能、單點故障(高可用)和擴充套件性(水平伸縮)等問題。
image
以上圖為例,隨著網際網路的興盛,類似淘寶、京東等網站的訪問量逐年提升。原先的單臺服務或者單叢集模式已經遠不能滿足需求了,這時候就需要橫向擴充套件多臺服務或者多個叢集來分攤壓力,達到提升系統吞吐的能力,這就是著名的分治理論。
但伺服器增加了,他們之間的流量負載也必須有一個元件來管控,這就是負載均衡的作用。負載均衡提供了多種演算法策略來滿足不同的業務負載需求,下面我們詳細來講解下。

2 幾種常見的負載均衡策略

2.1 輪詢(Round Robin)

RR輪詢,即Round Robin。按照請求的順序輪流分配到不同的伺服器,迴圈往復。這種策略適用於伺服器效能相近的情況,可以平均分配負載。但如果某個伺服器效能較差或者偶發故障,會影響整個系統的效能和穩定性。
如下圖所示:
image

  • 分別有5條請求過來
  • 按照順序輪流分配,web-server1 分配到 1、4,web-server2 分配到 2、5,web-server3 分配到 3。

2.2 按照權重輪詢(Weighted Round Robin)

即加權輪詢,給不同的伺服器分配不同的權重,根據權重比例來決定分配請求的數量。這種策略適用於後端伺服器效能不均的情況,可以根據實際情況靈活調整。使得效能更好的伺服器能夠處理更多的請求,從而提高整個系統的處理效率。
如下圖所示:
image

  • 分別有5條請求過來
  • web-server1 因為權重為60%,分配到 1、2、3
  • web-server2 權重為20%,分配到 4
  • web-server3 權重為20%,分配到 5

2.3 IP 雜湊(IP Hash)

根據客戶端的IP地址計算雜湊值,將請求分配給特定的伺服器,保證相同IP的客戶端請求始終傳送到同一臺伺服器。這種策略適用於需要保持客戶端會話一致性的場景,例如需要維護使用者session的Web應用。
如下圖所示:
image

  • IP為192.168.0.99的流量hash計算對應web-service1,所以將1、4流量分配到第1臺伺服器
  • IP為192.168.0.96、192.168.0.98的流量hash計算對應web-service3,所以將2、3流量分配到第1臺伺服器

需要注意的是,雖然IP雜湊演算法可以確保來自同一IP地址的請求被髮送到同一臺伺服器,這在一些需要保持會話一致性的場景中很有用,但它也可能導致負載不均衡。例如,如果某個IP地址傳送了大量的請求,那麼處理這些請求的伺服器可能會過載,而其他伺服器可能處於空閒狀態。因此,在使用IP雜湊演算法時,需要仔細考慮其適用性和潛在的風險。需要對極端情況進行評估,筆者就曾經踩過坑。

2.4 最少連線(Least Connections)

將請求分配給當前連線數最少的伺服器,以實現負載均衡。這種策略適用於處理長連線請求的場景,如WebSocket、FTP服務。透過記錄每臺伺服器當前正在處理的連線數,將新請求分配給連線數最少的伺服器,可以有效避免某些伺服器過載導致效能下降的情況。
如下圖所示:
image

  • web-service1、web-service2、web-service3的連線數分別是11、15、2,所以 web-service3 相對空閒
  • 1、2、3請求到來的時候,web-service3持續空閒,而web-service1、web-service2持續hold住連線,所以請求分配給web-service3
  • 該演算法對伺服器效能差異較大的情況有較好的適應性,請求優先傳送到連線數較少的伺服器,有助於避免某些伺服器過載,提升效能。
  • 缺少點就是需要實時監測連線數,並且每個流量來的時候都要判斷下再分發,在流量繁忙時增加了伺服器開銷,影響效能。

2.5 最短響應時間(Least Response Time)

短響應時間(Least Response Time)演算法在負載均衡領域中被廣泛應用。這種策略適用於對響應時間有嚴格要求的應用場景。透過實時監測每臺伺服器的響應時間,將請求分配給響應時間最短的伺服器,可以確保使用者獲得最快的響應,提升使用者體驗。
如下圖所示:
image
同樣,這種演算法也有自己的優缺點:

優點

1、提高使用者體驗:透過選擇響應時間最短的伺服器來處理請求,可以顯著減少使用者的等待時間,提高整體的使用者體驗。
2、動態負載均衡:該演算法能夠實時地根據伺服器的響應時間來調整負載分配,確保每臺伺服器都能根據其實際效能來處理相應數量的請求。
3、處理高峰期流量:在流量高峰期,最短響應時間演算法可以確保請求被迅速處理,避免系統擁堵和延遲。

缺點

1、計算開銷:為了確定每臺伺服器的響應時間,系統需要不斷地進行監測和計算,這可能會增加額外的系統開銷。
2、瞬時波動:由於該演算法主要依賴於實時的響應時間,因此可能會受到瞬時波動的影響。例如,如果某臺伺服器在某一時刻由於某種原因(如臨時的高負載)響應時間變長,它可能會被暫時排除在負載均衡之外,即使其實際效能可能仍然優於其他伺服器。
3、可能忽略其他效能指標:最短響應時間演算法主要關注響應時間,可能忽略了其他重要的效能指標,如伺服器的處理能力、記憶體佔用等。在某些情況下,這可能導致負載分配不夠均衡。

3 總結

本文介紹了常見的幾種負載均衡策略,此外,還有一些其他策略,如:

  • DNS負載均衡,適用於全球範圍內的負載均衡,可以根據使用者的地理位置將請求分發到最近的伺服器,提高訪問速度。
  • 資料層負載均衡,需要考慮“資料與請求均衡的平衡”,最常見的方式就是按照分庫分表進行分片hash負載

在選擇負載均衡策略時,需要根據實際應用場景、伺服器效能、網路狀況等因素進行綜合考慮,以達到最佳的負載均衡效果。

相關文章