一致性哈希 與 普通哈希對比


普通哈希算法

    假如有cache主機5台分別為cacheA、cacheB、cacheC、cacheD、cacheE

    當程序進行hash時,首先每個節點要根據自己的唯一參數哈希出一個值來(如根據ip進行哈希)

    主機哈希完成后形成的哈希值如下

    cacheA       0

    cacheB       1

    cacheC       2

    cacheD       3

    cacheE       4

    主機形成哈希值后,我們以緩存來做實例,比如某個用戶登錄后會有一個唯一的pin值,然后根據

    這個pin值進行hash求余。因為求余是用5來求余,所以數值肯定會小宇5 因此就有了落點,然后把

    緩存數據進行緩存到落點服務器中

一致性哈希算法

    假如有cache主機5台分別為cacheA、cacheB、cacheC、cacheD、cacheE

    當程序進行hash時,首先每個節點要根據自己的唯一參數哈希出一個值來(如根據ip進行哈希)

    主機哈希完成后形成的哈希值如下

    cacheA       key1

    cacheB       key2

    cacheC       key3

    cacheD       key4

    cacheE       key5

然后5台節點圍繞稱一個環形,如圖

主機形成哈希值后,我們以緩存來做實例,比如某個用戶登錄后會有一個唯一的pin值,然后根據

 這個pin值進行hash。這里注意和普通hash不一樣的就是這里只hash不求余,當hash出一個數值

后,查看這個這個值介於那兩個值之間比如介於key4和key5之間,然后從這個落點開始順時針查

找遇到第一個cache服務器后就把這個服務器當作此次緩存的落點,從而把這個緩存放到這個落點

上。如圖:

兩者比較:

        經過上面的介紹我們能看出,假如普通的哈希當其中任意一台機器down掉后,我們整個的

  緩存都將安然無存,為什么這么說呢?

        因為當某台cache down掉后我們需要重選算落點,除數已經變了,所以都要重新set緩存,

 當然不排除有一些兩個pin值算的落點是一樣的,但是當cache服務器增加到一定數量后,前面所

 說的可能性幾乎為0,所以稱之為全部緩存都要重新set。

       而使用一致性哈希當其中一台機器down掉后,只有它上面到它這一段的環路緩存失效了,如:

當cache3 down掉后,那落掉在cache2到cache3之間的pin都將失效,那么失效的落點講繼續順時

針查找cache服務器,那么新的落點都將落到cache4上。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM