《算法 - 一致性 (hash) 算法》

图片摘自:算法

  天天进步一点点——五分钟理解一致性哈希算法(consistent hashing)缓存

 

一:背景服务器

  - 一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的。分布式

  - 设计目标是为了解决因特网中的热点(Hot spot)问题函数

  - 一致性哈希修正了使用的简单哈希算法带来的问题性能

 

二:简单哈希算法带来的问题?spa

  - 在简单哈希算法中.net

    - 咱们会根据hash算法得出的数值和机器数取模计算,计算发到哪台机器上。设计

    - Hash(资源)% 机器数 = 落到哪台机器上xml

    - 这样的话就不会遍历全部的服务器,大大提高了性能!

 

  - 可是,在服务器数量变更的时候,全部缓存的位置都要发生改变!

    - 假设4台缓存中忽然有一台缓存服务器出现了故障,没法进行缓存。

    - 那么咱们则须要将故障机器移除,可是若是移除了一台缓存服务器,那么缓存服务器数量从4台变为3。

    - 若是想要访问资源,资源的缓存位置一定会发生改变,之前资源缓存也会失去缓存的做用与意义。

    - 同时因为大量缓存在同一时间失效,形成了缓存的雪崩,服务端也会承受巨大压力。

 

三:一致性哈希(hash)解决的问题

  - 解决增减服务器致使的大量数据震荡问题。

 

四:一致性哈希(hash)

  - 原理

    - 创造环形哈希(hash)空间,不一样节点映射到环上的不一样位置,经过和机器节点的匹配,完成hash一致。

 

  - 作法

    -  按照经常使用的hash算法将对应的key哈希到一个具备2^32次方个桶的空间中,即0~(2^32)-1的数字空间中。  能够将这些数字头尾相连,想象成一个闭合的环形

      - 

    -  如今咱们将object一、object二、object三、object4四个对象经过特定的Hash函数计算出对应的key值,而后散列到Hash环上。

      - 

 

    - 在采用一致性哈希算法的分布式集群中将新的机器加入。

    - 其原理是经过使用与对象存储同样的Hash算法将机器也映射到环中,而后以顺时针的方向计算,将全部对象存储到离本身最近的机器中。 

      - 

    -  经过上图能够看出对象与机器处于同一哈希空间中,这样按顺时针转动object1存储到了节点1中

    - object3存储到了节点2中

    - object二、object4存储到了节点3中。

    - 在这样的部署环境中,hash环是不会变动的,所以,经过算出对象的hash值就能快速的定位到对应的机器中,这样就能找到对象真正的存储位置了。

 

五:问题解答

  - 如何解决单个节点压力过大的问题?

    - 在 一致哈希算法中,提出了虚拟节点的概念,既一个机器能够经过 哈希 算法,映射至多个节点。以解决单个节点的压力问题

相关文章
相关标签/搜索