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/

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

目录
相关文章
|
存储 缓存 负载均衡
【算法技术专题】如何用Java实现一致性 hash 算法( consistent hashing )(上)
【算法技术专题】如何用Java实现一致性 hash 算法( consistent hashing )(上)
241 0
【算法技术专题】如何用Java实现一致性 hash 算法( consistent hashing )(上)
|
存储 算法 对象存储
一致性 hash 算法(consistent hashing)
一致性 hash 算法(consistent hashing)
5063 0
|
算法 NoSQL Redis
一致性(连续性)hash算法(Consistent hashing)
一致性(连续性)hash算法(Consistent hashing) Consistent hashing is a scheme that provides hash table functionality in a way that the add...
1551 0
|
1月前
|
机器学习/深度学习 算法 生物认证
基于深度学习的人员指纹身份识别算法matlab仿真
基于深度学习的人员指纹身份识别算法matlab仿真
|
25天前
|
传感器 算法 计算机视觉
基于肤色模型和中值滤波的手部检测算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容是关于一个基于肤色模型和中值滤波的手部检测算法的描述,包括算法的运行效果图和所使用的软件版本(matlab2022a, vivado2019.2)。算法分为肤色分割和中值滤波两步,其中肤色模型在YCbCr色彩空间定义,中值滤波用于去除噪声。提供了一段核心程序代码,用于处理图像数据并在FPGA上实现。最终,检测结果输出到"hand.txt"文件。
|
1月前
|
机器学习/深度学习 算法 计算机视觉
基于yolov2深度学习网络的视频手部检测算法matlab仿真
基于yolov2深度学习网络的视频手部检测算法matlab仿真