一、負載均衡
1.應用場景:
假設有三颱快取伺服器s0,s1,s2,同時有三萬張需要快取,最好可以均勻的快取到伺服器上,這樣可以分擔快取的壓力。
2.解決方法
對快取下的鍵進行hash計算,雜湊後的值是個整數,再用快取伺服器的數量對這個值進行取模計算,餘數決定資料應該快取到哪台伺服器上。
hash(名稱)%機器數=餘數
3.缺陷
將快取伺服器增加至3-4臺,由於伺服器數量發生變化,導致不能正常訪問快取資料,而程式在無法在快取中獲得資料時,會向後端伺服器請求資料,也就是大量快取在同一時間失效,造成快取血崩,快取機制無法起到分擔訪問壓力的作用,壓力就轉移到後端伺服器,整個系統很有可能會被壓垮,為了避免這些問題,就採用一致性雜湊演算法。
二、一致性hash演算法:
1.演算法描述
假設依然有三颱伺服器a,b,c hash計算後對232取模,(32位系統乙個指標4個位元組,乙個位元組8位,4*8=32位元組)有232個結點,從在hash環上的位置開始,沿順時針查詢,遇到的第乙個伺服器就是應該存放的快取伺服器,由於被快取物件與伺服器hash後的值是固定的,在伺服器不變的情況下,若要訪問,只需使用相同的演算法,就可算出被快取到那台伺服器上,去對應的伺服器上查詢即可。
按照一致性雜湊演算法的規則,先將服務d對映到雜湊環上,這樣一部分按順時針第乙個遇到的伺服器由a變成了d,也就是說,增加了一台伺服器,會導致一小部分不可訪問,但大部分都可以正常訪問。
2.一致性雜湊演算法的優點:
如果伺服器數量發生改變,並不是所有的快取都會失效,而是只有部分快取會失效,仍然能夠分擔整個系統大部分的壓力,而不至於所有的壓力同一時間都集中到後端伺服器上
3.缺陷:
雜湊偏斜
三、雜湊偏斜
1.描述
在實際的對映中,伺服器對映到雜湊環上很有可以是斜的,稱為雜湊偏斜,在hash環偏斜的情況下,大部分的快取物件很有可能會快取到一台伺服器上。導致快取分布極度不均勻,三颱伺服器沒有被平均的使用,如果快取資料較多的伺服器失效,由於失效的快取太多,在這種情況下,很有可能引起系統的故障,
2.解決方式:
要想均衡的將快取分布到伺服器上,要讓伺服器盡量的多,這樣才能均勻的出現在雜湊環上,解決方式是:增加虛擬節點
真實的伺服器資源只要三颱,但 可以根據現有的物理節點對映許多新的節點,比如:a->a1,a2……an,再將虛擬節點加入雜湊環
引入虛擬節點後,虛擬節點越多,雜湊環上的伺服器節點就越多,快取被均勻分布的概率就越大,這樣就可以一定程度上減小雜湊環偏斜帶來的影響,在進行快取讀寫時,可以先找到快取對應的虛擬節點,再找到對應的真實節點,再進行快取資料的儲存和讀取。
應用負載均衡(輪詢 一致性雜湊)
今天看書看到了應用負載均衡的輪詢與一致性雜湊,其中說到,一致性雜湊可以根據應用請求的url或者url引數將系統的請求 到同一節點,而輪詢是將請求均勻地 到每個伺服器。1 輪詢 1 2 3 優點 到後端應用的請求更加均勻,使得每個伺服器基本均衡 缺點 隨著後端應用伺服器的增加,快取的命中率為下降,這種...
Nginx負載均衡之一致性雜湊演算法
nginx提供了多種負載均衡演算法,ip hash是其中的一種,但是通常情況下不用他而用第三方的演算法,為什麼?因為ip hash在nginx是第一層 時才有效果,如果在經過nginx前經過了其他 時,會造成獲取的ip不正確。upstream web server常用的一致性雜湊演算法 ngx ht...
一致性雜湊
直接貼出一篇介紹的很清楚的博文。關鍵字一致性雜湊 平衡性,單調性,分散性,負載 其實說白了,就是解決把請求分散到不同的機器上運算,怎麼做分散的平均,機器少一台多一台,或者壞掉一台,成很好的自適應和拓展。最簡單的實現分布式演算法,取模嘛,但是它就上述的一些問題,所以不算好的雜湊函式。一致性雜湊演算法,...