`

一种特殊的一致性哈希算法的研究

 
阅读更多
一致性哈希简单介绍

     Consistent Hashing 算法早在 1997 年就在论文《Consistent hashing and random trees》中被提出,提出了在动态变化的Cache环境中,哈希算法应该满足的4个适应条件:

    平衡性(Balance)
    单调性(Monotonicity)
    分散性(Spread)
    负载(Load)

一致性哈希原理

一致性哈希将key用hash函数进行映射,映射出来的所有点能够分布到一个圆环内,实际上consistent hashing 是一种 hash 算法, 在改变映射内容的大小时,而不需要改变hash算法,且能够尽可能小的改变已存在 key 映射关系,尽可能的满足单调性的要求。。这里我要讲述一种特殊的一致性哈希——分布式一致性哈希(Distributed Consistent Hashing):
普通的一致性哈希

    分布式一致性哈希(DCH)满足节点的对称分布,普通的一致性哈希表现如图1:




    3个节点平均分布在圆环上,每个节点之间的角度为120°,此时,只要hash函数够均匀,那么每个节点所命中的概率则都是一样的。

    如果再增加一个节点,普通的一致性哈希认为无论在那个节点之间增加新的节点,那么与新的节点非相邻的节点尽量保持不变,这样保证一致性哈希的单调性,如图 2:



    新的节点4(n4)自由分配到节点2(n2)和节点3(n3)之间,那么原来的key的映射范围k3变成了新的k3和k4,插入时,新的k3将着落在节点 4(n4)上;新的k4将着落在节点3上(n3)。为了节点的老数据不丢失,我们还需要将节点3上的属于k3范围的数据迁移到新的节点4(n4)上,并定期删除节点3(n3)的冗余数据(一致性哈希的分散性),这样在查询时,不会有命中不到的情况。虽然保证了一致性哈希的单调性,但是这样的方式不能保证节点的负载均衡,毕竟大部分的查询会着落在节点1(n1)和节点2(n2)上。

    如果减少节点,普通的一致性哈希情况如图3:



    节点3(n3)因为某种原因不能进行映射,那么圆环上只剩下2个节点(n1、n2),这样原来k1和k3合并成新的k1,即所有的负载全部着落在节点 1(n1)上,同新增加节点一样,虽然保证了单调性,但是明显不能保证负载均衡。

分布式一致性哈希

    分布式一致性哈希(DCH)只是在普通的的一致性哈希算法进行的一点改进。同样DCH是将key映射到一个圆环中,与普通一致性哈希不同的是,节点增加了虚拟的节点;包括实节点对之对应的虚节点不是按照连续的弧度范围进行划分,而是定义一个最小的弧度单位(最好能够被圆整分),在这个最小的弧度单位里面均匀放置所有的节点,如图4:



    上图实线部分表示实节点,虚线部分表示虚节点。

    当增加新节点或删除节点的时候,保证最小弧度单位不变化,每个节点分别控制插入和数据迁移的大小,如图5所示:



    当新增加节点时

    最小弧度中数据迁移大小=最小弧度/节点数
    总共数据迁移量=最小弧度中数据迁移大小*360/最小弧度=360/节点数

    与传统一致性哈希比较,迁移数据从1点节点开始增加,那么迁移的数据弧度比例分别为:

    传统一致性哈希(2分法):1/2+1/4+1/4+1/8+1/8+1/8+1/8+...
    DCH:1/2+1/3+1/4+1/5+1/6+1/7+1/8...

    很明显,传统一致性哈希迁移数据量少,但是负载集中在某几个节点上;而DCH则主要体现在迁移数据会利用各个节点的资源达到均衡,查询时也会比传统一致性哈希更均匀些。

    当删除节点时,并无数据迁移;

总结

    对于在分布式的环境中来说,数据的访问负载均衡更加重要,所以采用DCH的类似架构可能比数据迁移更加重要,比如memcache当中就采用了虚拟节点方式去达到负载均衡的目的。

    对于数据迁移来说,普通的一致性哈希针对的是某两个节点的数据迁移,而DCH针对的是一个分布式的环境,在数据量特别大的时候,DCH方式将数据迁移的压力分散到各个节点,而不是集中在某些节点上。
分享到:
评论

相关推荐

    基于一致性哈希算法的分布式数据库高效扩展方法.pdf

    为了解决这一问题,本文提出了一种基于一致性哈希算法的高效扩展方法。一致性哈希算法最初由麻省理工学院的K等人提出,并被广泛应用于分布式系统中,以解决节点动态变化时数据一致性问题。其核心思想是通过引入哈希...

    基于C# 实现的一致性哈希算法

    一致性哈希算法是一种分布式哈希(Distributed Hash Table, DHT)技术,它解决了在分布式环境中数据分片和负载均衡的问题。在传统的哈希算法中,如果增加或减少服务器节点,会导致大量数据重新分配,而一致性哈希...

    一致性哈希算法C版实现

    一致性哈希算法是一种在分布式系统中解决数据分片和负载均衡问题的算法,它主要解决了在动态添加或移除节点时,尽可能少地改变已经存在的数据分布。在云计算和大数据处理领域,一致性哈希被广泛应用,例如在分布式...

    分布式存储系统中改进的一致性哈希算法.pdf

    一致性哈希算法是在分布式系统中广泛使用的一种数据定位算法,尤其适用于分布式缓存系统,如Redis。传统的哈希算法在分布式存储系统中有一个缺点,即当系统扩展或缩减节点时,数据的迁移量过大。一致性哈希算法通过...

    一致性哈希算法源码 Ketama一致性hash算法源码

    一致性哈希算法是一种分布式哈希(Distributed Hash Table, DHT)技术,旨在解决在分布式环境中数据分布不均匀的问题。Ketama算法是基于一致性哈希的一种优化实现,由Last.fm公司的Simon Willison提出,其目标是在...

    基于一致性哈希算法的分布式数据库高效扩展方法研究.pdf

    本文针对这一问题,深入研究了一致性哈希算法在分布式数据库扩展中的应用,并提出了一种创新的扩展方法,旨在提高扩展效率,降低扩展成本,为大数据环境下的数据库管理带来新的优化方案。 一致性哈希算法最初由...

    一致性哈希算法演示.rar

    一致性哈希算法是一种分布式哈希表(DHT)中用于解决数据分片和负载均衡问题的算法。在大型分布式系统中,例如缓存系统、分布式数据库等,一致性哈希能够确保当节点加入或离开时,尽可能少的数据需要迁移,从而保持...

    一致性哈希算法在分布式系统中的应用.pdf

    一致性哈希算法是一种在分布式系统中用于解决数据分发和负载均衡问题的算法。随着互联网技术的快速发展,分布式系统已经成为支撑大规模服务的关键技术之一。在分布式系统中,多个节点通过网络协同工作,提供高可用性...

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

    一致性哈希算法由David Karger等人在1997年提出,它是一种特殊的哈希算法,主要用于分布式系统中实现负载均衡。与传统的哈希算法不同,一致性哈希算法在处理节点增减时,能够最小化重新分配数据的数量,从而提高系统...

    一致性哈希算法及其在分布式系统中的应用

    一致性哈希算法是一种用于解决分布式系统中节点动态变化导致的数据重新分布问题的关键技术。它通过将哈希空间映射到一个循环的空间中,实现了数据节点的高效定位,并有效减少了节点加入或离开系统时引起的数据迁移量...

    一致性哈希算法应用及优化(最简洁明了的教程)

    一致性哈希算法作为一种高效的分布式数据管理方案,解决了传统哈希算法在动态系统中遇到的诸多挑战。通过合理的设计与优化,可以显著提升系统的稳定性、效率和扩展性,为构建高性能的分布式系统提供了坚实的技术基础...

    CHB-Consensus:一种基于一致性哈希算法的区块链共识机制研究.pdf

    #资源达人分享计划#

    一致性哈希算法(ketama hashing)

    一致性哈希算法(Consistent Hashing)是一种在分布式系统中实现负载均衡的算法,尤其在分布式缓存如Memcached和Redis等场景下广泛使用。它解决了传统哈希算法在节点增减时导致的大量数据迁移问题,提高了系统的可用...

    Mycat一致性哈希分片算法.zip

    Mycat在处理大规模数据时,通过一致性哈希算法将数据均匀地分布到各个节点上,确保每个节点负责一部分数据,形成数据分片。当增加或减少节点时,一致性哈希可以保持数据分布的稳定性,降低对系统的影响。 三、Mycat...

    Mycat一致性哈希分片算法1

    一致性哈希分片算法是Mycat中的一种常用分片算法,它通过对数据的哈希值进行映射,来确定数据应该存储在哪个数据库节点中。这种算法具有良好的可扩展性和负载均衡性,能够满足大规模数据存储和高并发访问的需求。 ...

    IT面试-一致性Hash算法,也成一致性cache算法

    一致性哈希算法是一种在分布式系统中解决数据分发和负载均衡问题的算法,特别是在缓存系统如Memcached或Redis中广泛应用。它最早在1997年的论文《Consistent Hashing and Random Trees》中被提出,旨在克服传统哈希...

    基于NIO-EPOOL模型netty实现的具备一致性哈希算法的NAT端口映射器

    通过对这些源代码的研究和分析,我们可以深入理解Netty如何利用NIO和一致性哈希算法来构建高效的端口映射服务。 总的来说,这个项目展示了Netty在构建复杂网络应用中的强大能力,同时也揭示了一致性哈希在分布式...

    Ketama一致性Hash算法(含Java代码) 1

    一致性哈希算法(Consistent Hashing)是一种在分布式系统中平衡数据分布的策略,尤其适用于缓存服务如Memcached或Redis。它的核心思想是通过哈希函数将对象映射到一个固定大小的环形空间中,然后将服务器也映射到这个...

    24一致性哈希:如何高效地均衡负载?1

    一致性哈希算法是一种在分布式系统中解决负载均衡和数据分布问题的有效方法。在传统的哈希算法中,当添加或移除服务器节点时,大部分数据需要重新映射,导致大规模的数据迁移。而一致性哈希算法通过特定的设计,能够...

Global site tag (gtag.js) - Google Analytics