常用負載均衡詳解(圖文總結)
01
介紹
在互聯網場景下,負載均衡(Load Balance)是分佈式系統架構設計中必須考慮的一個環節,它通常是指將負載流量(工作任務、訪問請求)平衡、分攤到多個操作單元(服務器、組件)上去執行的過程。
目的在於提供負載配比,解決性能、單點故障(高可用)和擴展性(水平伸縮)等問題。
以上圖爲例,隨着互聯網的興盛,類似淘寶、京東等網站的訪問量逐年提升。原先的單臺服務或者單集羣模式已經遠不能滿足需求了,這時候就需要橫向擴展多臺服務或者多個集羣來分攤壓力,達到提升系統吞吐的能力,這就是著名的分治理論。
但服務器增加了,他們之間的流量負載也必須有一個組件來管控,這就是負載均衡的作用。負載均衡提供了多種算法策略來滿足不同的業務負載需求,下面我們詳細來講解下。
02
幾種常見的負載均衡策略
2.1 輪詢(Round Robin)
RR 輪詢,即 Round Robin。按照請求的順序輪流分配到不同的服務器,循環往復。這種策略適用於服務器性能相近的情況,可以平均分配負載。但如果某個服務器性能較差或者偶發故障,會影響整個系統的性能和穩定性。
如下圖所示:
-
分別有 5 條請求過來
-
按照順序輪流分配,web-server1 分配到 1、4,web-server2 分配到 2、5,web-server3 分配到 3。
2.2 按照權重輪詢(Weighted Round Robin)
即加權輪詢,給不同的服務器分配不同的權重,根據權重比例來決定分配請求的數量。這種策略適用於後端服務器性能不均的情況,可以根據實際情況靈活調整。使得性能更好的服務器能夠處理更多的請求,從而提高整個系統的處理效率。
如下圖所示:
-
分別有 5 條請求過來
-
web-server1 因爲權重爲 60%,分配到 1、2、3
-
web-server2 權重爲 20%,分配到 4
-
web-server3 權重爲 20%,分配到 5
2.3 IP 哈希(IP Hash)
根據客戶端的 IP 地址計算哈希值,將請求分配給特定的服務器,保證相同 IP 的客戶端請求始終發送到同一臺服務器。這種策略適用於需要保持客戶端會話一致性的場景,例如需要維護用戶 session 的 Web 應用。
如下圖所示:
-
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 服務。通過記錄每臺服務器當前正在處理的連接數,將新請求分配給連接數最少的服務器,可以有效避免某些服務器過載導致性能下降的情況。
如下圖所示:
-
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)算法在負載均衡領域中被廣泛應用。這種策略適用於對響應時間有嚴格要求的應用場景。通過實時監測每臺服務器的響應時間,將請求分配給響應時間最短的服務器,可以確保用戶獲得最快的響應,提升用戶體驗。
如下圖所示:
同樣,這種算法也有自己的優缺點:
優點:
1、提高用戶體驗:通過選擇響應時間最短的服務器來處理請求,可以顯著減少用戶的等待時間,提高整體的用戶體驗。
2、動態負載均衡:該算法能夠實時地根據服務器的響應時間來調整負載分配,確保每臺服務器都能根據其實際性能來處理相應數量的請求。
3、處理高峯期流量:在流量高峯期,最短響應時間算法可以確保請求被迅速處理,避免系統擁堵和延遲。
缺點:
1、計算開銷:爲了確定每臺服務器的響應時間,系統需要不斷地進行監測和計算,這可能會增加額外的系統開銷。
2、瞬時波動:由於該算法主要依賴於實時的響應時間,因此可能會受到瞬時波動的影響。例如,如果某臺服務器在某一時刻由於某種原因(如臨時的高負載)響應時間變長,它可能會被暫時排除在負載均衡之外,即使其實際性能可能仍然優於其他服務器。
3、可能忽略其他性能指標:最短響應時間算法主要關注響應時間,可能忽略了其他重要的性能指標,如服務器的處理能力、內存佔用等。在某些情況下,這可能導致負載分配不夠均衡。
03
總結
本文介紹了常見的幾種負載均衡策略,此外,還有一些其他策略,如:
-
DNS 負載均衡,適用於全球範圍內的負載均衡,可以根據用戶的地理位置將請求分發到最近的服務器,提高訪問速度。
-
數據層負載均衡,需要考慮 “數據與請求均衡的平衡”,最常見的方式就是按照分庫分表進行分片 hash 負載
在選擇負載均衡策略時,需要根據實際應用場景、服務器性能、網絡狀況等因素進行綜合考慮,以達到最佳的負載均衡效果。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/SljgFDdwum6l8GHOZcbByQ