hash和一致性hash
生活随笔
收集整理的這篇文章主要介紹了
hash和一致性hash
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
hash;簡單的hash取余
優點:
計算簡單,快速定位
缺點:
容錯和擴展差,任何的增加機器或減少機器,都會伴隨著重新set值
比如原來有五臺機器做緩存,現在加一臺,那么余5就變成余6,那么所有值都變了
操作不當的話短時間可能會造成緩存雪崩(一般只能成倍擴展)
一致性hash:hash環
想象一個環,共有2^32-1 個節點,如果有五臺機器緩存,那么就將這五臺的ip分別hash后對2^32-1取余,得到的結果肯定在這個環上,我們叫這個結果為落在某一個節點上
順時針數,每個節點到前一個節點直接的值,將屬于這個節點。
舉個例子:將數據key使用相同的函數Hash計算出哈希值,并確定此數據在環上的位置,從此位置沿環順時針行走,第一臺遇到的服務器就是其應該定位到的服務器。
優點:
增加機器和減少機器,對整體影響不大,尤其是機器特別多的情況下,影響更小
缺點:
如果幾個ip計算出來的節點不均勻,可能會出現緩存傾斜,比如一個機器上的緩存特別多,另一個機器上的緩存特別少
但是,針對這種問題,有成熟的解決方案,例如用虛擬節點。
比如現在有兩個機器a,b,那么基本上肯定會出現緩存傾斜,那么我們就做出幾個虛擬節點,a_1,a_2,a_3,b_1,b_2,b_3
用這些再做計算,基本上就可以做到相對平均了,
一般生產過程中,一個機器都會做出32個虛擬節點,來防止緩存傾斜
總結
簡單常見用hash就行,重要場景考慮一致性hash
總結
以上是生活随笔為你收集整理的hash和一致性hash的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [设计模式] ------ 策略模式实战
- 下一篇: NSRunloop小总结