1. 程式人生 > >常見的負載均衡演算法及其程式碼實現

常見的負載均衡演算法及其程式碼實現

什麼是負載均衡

負載均衡,英文名稱為Load Balance,指由多臺伺服器以對稱的方式組成一個伺服器集合,每臺伺服器都具有等價的地位,都可以單獨對外提供服務而無須其他伺服器的輔助。通過某種負載分擔技術,將外部發送來的請求均勻分配到對稱結構中的某一臺伺服器上,而接收到請求的伺服器獨立地迴應客戶的請求。負載均衡能夠平均分配客戶請求到伺服器陣列,藉此提供快速獲取重要資料,解決大量併發訪問服務問題,這種叢集技術可以用最少的投資獲得接近於大型主機的效能。

負載均衡分為軟體負載均衡和硬體負載均衡,前者的代表是阿里章文嵩博士研發的LVS,後者則是均衡伺服器比如F5,當然這只是提一下,不是重點。

本文講述的是”將外部發送來的請求均勻分配到對稱結構中的某一臺伺服器上“的各種演算法,並以Java程式碼演示每種演算法的具體實現。

隨機(Random)

通過隨機數生成演算法選取一個伺服器,然後把連線傳送給它。

輪詢(Round Robin)

輪詢排程演算法的原理:

每一次把來自使用者的請求輪流分配給內部中的伺服器,從1開始,直到N(內部伺服器個數),然後重新開始迴圈。演算法的優點是其簡潔性,它無需記錄當前所有連線的狀態,所以它是一種無狀態排程。

缺點:

不考慮每臺伺服器的處理能力

加權輪詢(Weight Round Robin)

由於每臺伺服器的配置、安裝的業務應用等不同,其處理能力會不一樣。所以,我們根據伺服器的不同處理能力,給每個伺服器分配不同的權值,使其能夠接受相應權值數的服務請求。

Source Hashing(源地址Hash)

源地址雜湊排程演算法是一種靜態對映演算法,它通過一個雜湊(Hash)函式將一個源IP地址對映到一臺伺服器,若該伺服器是可用的並且沒有超負荷,將請求傳送到該伺服器,否則返回空。它採用的雜湊函式與目標地址雜湊排程演算法的相同。它的演算法流程與目標地址雜湊排程演算法的基本相似,除了將請求的目標IP地址換成請求的源IP地址,所以這裡不一個一個敘述。

Destination hashing(目標地址Hash)

目標地址雜湊排程演算法也是針對目標IP地址的負載均衡,它是一種靜態對映演算法,通過一個雜湊(Hash)函式將一個目標IP地址對映到一臺伺服器。目標地址雜湊排程演算法先根據請求的目標IP地址,作為雜湊鍵(Hash Key)從靜態分配的散列表找出對應的伺服器,若該伺服器是可用的且未超載,將請求傳送到該伺服器,否則返回空。

一致雜湊(consistent-hash)

一致雜湊(consistent-hash)

Least-Connection(最少連線)

最少連線排程演算法是把新的連線請求分配到當前連線數最小的伺服器,最小連線排程是一種動態排程短演算法,它通過伺服器當前所活躍的連線數來估計伺服器的負載均衡,排程器需要記錄各個伺服器已建立連線的數目,當一個請求被排程到某臺伺服器,其連線數加1,當連線中止或超時,其連線數減一,在系統實現時,我們也引入當伺服器的權值為0時,表示該伺服器不可用而不被排程。