Consistent Hashing算法

简介: 前几天看了一下Memcached,看到Memcached的分布式算法时,知道了一种Consistent Hashing的哈希算法,上网搜了一下,大致了解了一下这个算法,做下记录。    数据均衡分布技术在分布式存储系统中非常重要,数据分布越均匀,系统的总体性能就越好。

前几天看了一下Memcached,看到Memcached的分布式算法时,知道了一种Consistent Hashing的哈希算法,上网搜了一下,大致了解了一下这个算法,做下记录。

    数据均衡分布技术在分布式存储系统中非常重要,数据分布越均匀,系统的总体性能就越好。

 

    简单的哈希算法:以K取余法,这种算法虽然简单,但难以满足单调性要求,并且平衡性差,增删节点时更新效率低。当系统中存储节点数量发生增加或者减少时,整个系统的数据对象的映射位置都要重新进行计算,严重影响了缓存的命中率,可能会导致系统无法对外界进行正常的响应,从而导致崩溃。

 

    一致性哈希算法(Consisteng Hashing):首先,它将存储空间抽象为一个环,将存储节点配置到环上。环上所有的节点都有一个值。然后,对数据进行哈希计算,按顺时针方向将其映射到离其最近的节点上去。这样,当有节点出现故障时,按照算法的 映射方法,只有在故障节点逆时针方向到上一个节点的距离受影响。增加存储节点时也是新增的存储节点逆时针到上一个节点之间受影响。这样很好地解决了简单哈希算法增删节点,重新映射所有数据带来的效率低下的问题。

image

    一致性哈希算法基本解决了以P2P为代表的存储环境中的一个关键问题——如何在动态的网络拓扑中对数据进行分发和选择路由。在这个算法中,每隔存储节点仅需维护少量相邻节点的信息,并且在有节点加入或者退出的时候,仅有相关的少量节点参与到拓扑的维护中,这使得一致性哈希算法成为一个具有实用意义的DHT(Distribute Hash Table)算法。

 

    关于一致性哈希算法的不足:1.查询过程汇总,查询消息需要经过O(n)步(n是系统内节点总数)才能到达被查询的节点,如果系统规模非常大的话,这样的查询效率可能无法满足实用需求。

   

    一致性哈希算法的改进:将圆环划分成M等份,若加入物理节点为N,则每隔物理节点拥有V=M/N个节点书。当有物理节点离线是,由于该节点对应的虚拟节点均匀地分布在换上,其附近的节点将会均匀地分担这个原点的原有附在,当有新节点加入时,其他节点的负担也会均匀地转移到上面。同时根据物理节点的时机性能为权值分配环上的虚拟节点数目给物理节点,也解决了存储节点性能差异的问题。

 

参考资料:http://tech.idv2.com/2008/07/24/memcached-004/

                  《分布式存储系统中一致性哈希算法的研究》

目录
相关文章
|
3月前
|
存储 缓存 负载均衡
Rendezvous hashing算法介绍
Rendezvous hashing算法介绍
65 3
Rendezvous hashing算法介绍
|
5月前
|
存储 前端开发 算法
《500 Lines or Less》(3)Clustering by Consensus
《500 Lines or Less》(3)Clustering by Consensus
|
算法 数据挖掘 Serverless
k-means Clustering Algorithm
k-均值聚类算法(k-means Clustering Algorithm)是一种将一组数据分成 k 个不同的簇的聚类算法。该算法基于距离作为相似性度量,即将数据对象划分为 k 个簇,使得每个簇中的数据对象之间的距离尽可能小,而不同簇之间的数据对象之间的距离尽可能大。
70 2
|
存储 缓存 分布式计算
译|Eventually Consistent
译|Eventually Consistent
55 0
|
存储 缓存 负载均衡
【算法技术专题】如何用Java实现一致性 hash 算法( consistent hashing )(上)
【算法技术专题】如何用Java实现一致性 hash 算法( consistent hashing )(上)
323 0
【算法技术专题】如何用Java实现一致性 hash 算法( consistent hashing )(上)
|
算法 数据挖掘
K-Means ++ 算法
Kmeans算法的缺陷: • 聚类中心的个数K 需要事先给定,但在实际中这个 K 值的选定是非常难以估计的,很多时候,事先并不知道给定的数据集应该分成多少个类别才最合适• Kmeans需要人为地确定初始聚类中心,不同的初始聚类中心可能导致完全不同的聚类结果。(可以使用Kmeans++算法来解决) K-Means ++ 算法: k-means++算法选择初始seeds的基本思想
1657 0
|
存储 算法
Consistent Hashing算法
前几天看了一下Memcached,看到Memcached的分布式算法时,知道了一种Consistent Hashing的哈希算法,上网搜了一下,大致了解了一下这个算法,做下记录。     数据均衡分布技术在分布式存储系统中非常重要,数据分布越均匀,系统的总体性能就越好。
1017 0