隨機法
隨機法 是最簡單粗暴的負載均衡演算法。
如果沒有配置權重的話,所有的伺服器被訪問到的機率都是相同的。如果配置權重的話,權重越高的伺服器被訪問的機率就越大。
未加權重的隨機演算法適合於伺服器效能相近的叢集,其中每個伺服器承載相同的負載。加權隨機演算法適合於伺服器效能不等的叢集,權重的存在可以使請求分配更加合理化。
不過,隨機演算法有一個比較明顯的缺陷:部分機器在一段時間之內無法被隨機到,畢竟是機率演算法,就算是大家權重一樣, 也可能會出現這種情況。
於是,輪詢法 來了!
輪詢法
輪詢法是挨個輪詢伺服器處理,也可以設定權重。
如果沒有配置權重的話,每個請求按時間順序逐一分配到不同的伺服器處理。如果配置權重的話,權重越高的伺服器被訪問的次數就越多。
未加權重的輪詢演算法適合於伺服器效能相近的叢集,其中每個伺服器承載相同的負載。加權輪詢演算法適合於伺服器效能不等的叢集,權重的存在可以使請求分配更加合理化。
在加權輪詢的基礎上,還有進一步改進得到的負載均衡演算法,比如平滑的加權輪訓演算法。
平滑的加權輪訓演算法最早是在 Nginx 中被實現,可以參考這個 commit:https://github.com/phusion/nginx/commit/27e94984486058d73157038f7950a0a36ecc6e35。如果你認真學習過 Dubbo 負載均衡策略的話,就會發現 Dubbo 的加權輪詢就借鑑了該演算法實現並進一步做了最佳化。
Dubbo 加權輪詢負載均衡演算法
兩次隨機法
兩次隨機法在隨機法的基礎上多增加了一次隨機,多選出一個伺服器。隨後再根據兩臺伺服器的負載等情況,從其中選擇出一個最合適的伺服器。
兩次隨機法的好處是可以動態地調節後端節點的負載,使其更加均衡。如果只使用一次隨機法,可能會導致某些伺服器過載,而某些伺服器空閒。
雜湊法
將請求的引數資訊透過雜湊函式轉換成一個雜湊值,然後根據雜湊值來決定請求被哪一臺伺服器處理。
在伺服器數量不變的情況下,相同引數的請求總是發到同一臺伺服器處理,比如同個 IP 的請求、同一個使用者的請求。
一致性 Hash 法
和雜湊法類似,一致性 Hash 法也可以讓相同引數的請求總是發到同一臺伺服器處理。不過,它解決了雜湊法存在的一些問題。
常規雜湊法在伺服器數量變化時,雜湊值會重新落在不同的伺服器上,這明顯違背了使用雜湊法的本意。而一致性雜湊法的核心思想是將資料和節點都對映到一個雜湊環上,然後根據雜湊值的順序來確定資料屬於哪個節點。當伺服器增加或刪除時,隻影響該伺服器的雜湊,而不會導致整個服務叢集的雜湊鍵值重新分佈。
最小連線法
當有新的請求出現時,遍歷伺服器節點列表並選取其中連線數最小的一臺伺服器來響應當前請求。相同連線的情況下,可以進行加權隨機。
最少連線數基於一個伺服器連線數越多,負載就越高這一理想假設。然而, 實際情況是連線數並不能代表伺服器的實際負載,有些連線耗費系統資源更多,有些連線不怎麼耗費系統資源。
最少活躍法
最少活躍法和最小連線法類似,但要更科學一些。最少活躍法以活動連線數為標準,活動連線數可以理解為當前正在處理的請求數。活躍數越低,說明處理能力越強,這樣就可以使處理能力強的伺服器處理更多請求。相同活躍數的情況下,可以進行加權隨機。
最快響應時間法
不同於最小連線法和最少活躍法,最快響應時間法以響應時間為標準來選擇具體是哪一臺伺服器處理。客戶端會維持每個伺服器的響應時間,每次請求挑選響應時間最短的。相同響應時間的情況下,可以進行加權隨機。
這種演算法可以使得請求被更快處理,但可能會造成流量過於集中於高效能伺服器的問題。
負載均衡有哪些優勢?
負載均衡可以定向和控制應用程式伺服器與其訪客或客戶端之間的網際網路流量。因此,它可提高應用程式的可用性、可擴充套件性、安全性和效能。
應用程式可用性
伺服器故障或維護可能會增加應用程式停機時間,使訪客無法訪問您的應用程式。負載均衡器可以透過以下方式提高您的系統的容錯能力:自動檢測伺服器問題並將客戶端流量重定向到可用伺服器。您可以使用負載均衡來簡化以下任務:
- 執行應用程式伺服器維護或升級而無需使應用程式停機
- 為備份站點提供自動災難恢復
- 執行執行狀況檢查並防止出現可能導致停機的問題
應用程式可擴充套件性
您可以使用負載均衡器在多個伺服器之間智慧地定向網路流量。您的應用程式可以處理數千個客戶端請求,因為負載均衡會執行以下操作:
- 防止任何一臺伺服器出現流量瓶頸
- 預測應用程式流量,以便您可以在需要時新增或移除不同伺服器
- 為您的系統增加冗餘度,使您可以放心擴充套件
應用程式安全
負載均衡器具有多項內建的安全功能,可為您的網際網路應用程式的安全保駕護航。它們是應對分散式拒絕服務攻擊的有用工具,在這種攻擊中,攻擊者會用數百萬個併發請求淹沒應用程式伺服器,從而導致伺服器故障。負載均衡器還可以執行以下操作:
- 監控流量並阻止惡意內容
- 將攻擊流量自動重定向到多個後端伺服器,以最大限度減少影響
- 透過一組網路防火牆路由流量,以提高安全性
應用程式效能
負載均衡器透過增加響應時間和減少網路延遲來提高應用程式效能。它們可以執行諸如以下幾項關鍵任務:
- 在伺服器之間平均分配負載以提高應用程式效能
- 將客戶端請求重定向到地理位置較近的伺服器以減少延遲
- 確保物理和虛擬計算資源的可靠性和效能