負載均衡演算法小結

2021-06-16 15:35:46 字數 2493 閱讀 7946

網際網路分布式系統中,很多服務是資料儲存相關的,海量訪問量下,直接訪問儲存介質是抗不住的,需要使用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仍然找不到伺服器,就會儲存到第一台伺服器上。

idx=firstmaxserveridx(hash(query_key))

新增節點的時候:

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

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

負載均衡演算法小結

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

負載均衡演算法小結

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

負載均衡演算法小結

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