負載均衡演算法

2021-06-22 14:00:12 字數 2669 閱讀 5562

網際網路分布式系統中,很多服務是資料儲存相關的,海量訪問量下,直接訪問儲存介質是抗不住的,需要使用cache,cache集群的負載均衡演算法就成為乙個重要的話題,這裡對現有的負載均衡演算法進行一些總結。

btw:雖然是cache負載均衡演算法小結,其實可以說是負載均衡演算法小結,只是針對cache應用場景罷了。

負載均衡演算法主要有:

static演算法

random演算法

round robin演算法

hash演算法

carp演算法

consistent hash演算法

static演算法

負載均衡的石器時代,為乙個服務指定多個ip:port, 備份模式,其總是返回伺服器組的第乙個伺服器(只要第乙個伺服器可用),當第乙個伺服器沒有用的時候,才會返回後續可用的伺服器。

這種情況下,每台機器都包括全量的資料,查詢通常會落到第一台機器上,第一台機器上cache命中率高,但是當失敗的時候,落到第二胎機器上,那就杯具了,cache命中率那個低啊!!!

random演算法

地球人都知道的演算法,對於無狀態服務比較適用,隨便選取一台機器就可以。

idx=rand()%m

在實際使用中,跟static演算法一樣,都是模組維護全量資料,這個還好每台機器的cache命中率理論上應該差不多,但是都不高,為啥呢?因為同樣乙個請求一會落到機器a,一會落到機器b上。敗家子啊,浪費記憶體啊,記憶體有限,cache會被淘汰,頻繁淘汰,當然使得命中率低下啊。

round robin演算法

典型的平均主義,吃大鍋飯的,皇帝輪流做啊,順序依次選取伺服器。

idx=(idx+1)%m

同樣的模組維護全量資料,跟random一樣杯具,基本上一樣的原因。相同的請求會被落到不同的機器上,導致cache命中率低。

hash演算法

又叫取餘演算法,將query key做hash之後,按照機器數量取餘,選取中乙個機器進行連線服務。

idx=hash(query_key)%m

餘數計算的方法簡單,資料的分散性也相當優秀,但也有其缺點。那就是當新增或移除伺服器時,快取重組的代價相當巨大。新增伺服器後,餘數就會產生巨變,這樣就無法獲取與儲存時相同的伺服器,從而影響快取的命中率。

carp演算法

carp準確的說不是乙個演算法,而是乙個協議,cache array routing protocol,cache群組路由協議。

計算全部伺服器的idx_key=hash(query_key+server_idx),其中計算得到idx_key最大的server_idx就是需要的idx。

假設開始3台後端伺服器,請求用標誌串 req = "abcd" 來標誌,伺服器用 s1, s2, s3來標誌, 那麼,通過對 req + sx 合併起來計算簽名就可以對每個伺服器得到乙個數值:

(req = "abcd" + s1) = k1

(req = "abcd" + s2) = k2

(req = "abcd" + s3) = k3

計算的方法可以使用crc,也可以使用md5,目的的得到乙個*雜湊*的數字,這樣在k1,k2,k3中 必定有乙個最大的數值,假設是k2,那麼可以將請求req扔給s2,這樣,以後對相同的請求, 相同的伺服器組,計算出來的結果必定是k2最大,從而達到hash分布的效果。

巧妙的地方在於,新增或者刪除一台伺服器的時候,不會引起已有伺服器的cache大規模失效, 假設新增一台伺服器s4,那麼對s1,s2,s3計算的k值都完全相同,那麼對s4可以計算得到乙個新值k4,如果計算k的演算法足夠雜湊,那麼原先計算到 s1,s2,s3的請求,理論上都會有1/4的請求新計算得到的k4比原先的k大, 那麼這1/4的請求會轉移到s4,從而新增的s4伺服器會負擔1/4的請求,原先的s1,s2,s3也只會負擔原先的3/4。

consistent hash演算法

一致性hash演算法是:首先求出伺服器(節點)的雜湊值,並將其配置到0~2^32的圓(continuum)上。然後用同樣的方法求出儲存資料的鍵的雜湊值,並對映到圓上。然後從資料對映到的位置開始順時針查詢,將資料儲存到找到的第乙個伺服器上。如果超過2^32仍然找不到伺服器,就會儲存到第一台伺服器上。

consistent hash演算法背後最基礎的思想就是:對object和cache machine使用相同的hash函式【dht演算法的核心啊,p2p的理論基石啊,資源和位址節點在統一位址空間進行編址】。consistent hash適用於每個節點只儲存部分資料,而不是像前面幾種演算法,每個節點儲存全量資料。這樣做的好處是能夠把cache機器對映到一段interval 上,而這段interval就會包含一定數目的物件的hash值。如果某台cache機器被移除了,那麼它對映到的interval被和它相鄰的乙個 cache機器託管,其他所有的cache機器都不用變。

一致性雜湊演算法最大程度的避免了key在服務節點列表上的重新分布,其他附帶的改進就是有的一致性 雜湊演算法還增加了虛擬服務節點的方法,也就是乙個服務節點在環上有多個對映點,這樣就能抑制分布不均勻,最大限度地減小服務節點增減時的快取重新分布。

負載均衡演算法

輪循演算法 roundrobin 說明 每一次來自網路的請求輪流分配給內部中的每台伺服器,從1至n然後重新開始 舉例 適合於伺服器組中的所有伺服器都有相同的軟硬體配置並且平均服務請求相對均衡的情況 最少連線演算法 leastconnection 說明 客戶端的每一次請求服務在伺服器停留的時間都可能會...

負載均衡演算法

負載均衡演算法的實現可以分成兩部分 1 根據負載均衡演算法和web伺服器列表計算得到集群中一台web伺服器的位址 2 將請求資料傳送到該位址對應的web伺服器上 負載均衡演算法通常有以下幾種 1 輪詢 round robin rr 所有請求被依次分發到每台應用伺服器上,即每台應用伺服器要處理的請求數...

負載均衡(演算法)

概念 負載 後端系統的承受能力 均衡 保證後端請求的平衡。一種演算法,在跨平台系統呼叫的時候,考慮到後端機器承載情況的前提下,保證請求分配的平衡和合理。為什麼需要 what?1 負載 當請求量過大,超過後端機器的承受能力時,有可能會導致某台機器宕機,同時也可能會引起連鎖反應,導致伺服器癱瘓。2 均衡...