`
isiqi
  • 浏览: 16490480 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

一致性哈希的设计理念

 
阅读更多

首先看一个最简单的hash函数

通过调用simple_hash对5、8、9三个值进行哈希,结果如下:

在实际应用中,HASH_RANGE是代表着一定的实际意义的,比如机器的台数,本文就以机器台数为例。当HASH_RANGE=5的时候,机器节点编号为0 ~ 4,simple_hash(5) = 0 表示key为5的数据将被放置到0号机器节点中。查询的时候,只需要将key 5进行hash得到节点号0,则可以找到节点,从而读出数据。

就这样,系统运行了一段时间,数据来来去去,天下太平。

有一天,系统中增加了一台新机器,这个时候HASH_RANGE = 6,我们会发现,5、8、9三个值的哈希值已经改变了!这意味着什么呢?在新的函数看来,原来5、8、9三个值被分配到了错误的机器上。如果有人用key=5来查询,则返回的节点此时变成了5,而不是0,显然,这次查询会失败。因为数据还在0号节点上呢!

在教科书上,HASH_RANGE被称作哈希因子。

如何才能保证机器台数的增加的情况下还等读到正确的数据呢?最简单的方法是不用机器台数作为哈希因子 ,而是选取一些不变量为哈希因子。Consistency Hash就是在这种指导思想下产生的。

先通过下图看看一致性哈希的基本思想:

机器数(node)不再作为哈希因子,而是通过一个通用的hash函数哈希到[0, 2^32)的范围上,所有的key也被哈希到这个范围上,然后顺着数轴环“往前”找node,首先找到的那个就是key要存放到的机器。

Consistency Hash并不完美。当系统中有新机器加入的时候,部分key还是需要重新分布,如下图。但是,通用的hash函数还是用原来那个。从效果上看,Consistency Hash比普通hash的影响要小得多。

更多一致性哈希的内容,感兴趣的朋友可以到维基百科上阅读

在普通hash函数中,哈希和存储是紧耦合的,而在Consistency Hash中,哈希和存储被分离,首先通过hash来确定大致范围,再通过向前寻址的方式找到最近的节点以存储。

Hash函数存在的本质问题并没有解决,Consistency Hash只是弱化了Hash函数在算法中的地位,引入一些新思路来解决问题而已。

Remarks:

1. 文中图片截自:Memcached全面剖析 p28

2. 为了避免数据都hash到很近的地方,Consistency Hash还使用了虚拟节点的概念。即一个物理节点可能被虚拟成200个虚拟节点,并且均匀分布在环上。这种思路也很巧妙,值得学习。

分享到:
评论

相关推荐

    FastDHT-分布式哈希系统

    同时,FastDHT利用一致性哈希算法解决节点加入或离开时的数据迁移问题,保证了系统的稳定性。 FastDFS是一个开源的、高性能的文件服务器系统,常用于中小规模的企业级应用。它主要解决大容量存储和负载均衡的问题,...

    Go-dolphin是一个集成了api网关服务发现请求限流一致性hash路由

    它整合了API网关、服务发现、请求限流、一致性哈希路由和服务调度等多种功能,旨在简化中小团队在微服务开发过程中的复杂性,提高开发效率,并确保系统稳定性和性能。 首先,让我们深入了解API网关。API网关是...

    分布式键值系统1

    总的来说,Dynamo的设计理念是牺牲强一致性以换取高可用性和扩展性,它的许多特性,如一致性哈希、复制协议、向量时钟和Gossip协议,都在后续的分布式键值系统如Tair中得到了应用和发展。Tair在Dynamo的基础上,将...

    译文Dynamo:Amazon的高可用性的键-值存储系统.pdf

    为了实现高可扩展性,Dynamo使用了一致性哈希来分发数据,这允许动态地添加或删除节点而不影响整体的哈希分布,降低了重新平衡数据的成本。数据被分割成多个分区(partitions),每个分区都有多个副本,分布在不同...

    亚马逊Dynamo设计中文版

    - **一致性哈希(Consistent Hashing)**:Dynamo采用了动态哈希表(DHTs)和一致性哈希技术,以实现数据的均匀分布和最小化的重新分布。一致性哈希对于分布式系统来说是一种有效的解决方案,可以降低节点增减或失败...

    memcached:memcached +一致哈希

    **memcached** 是一个分布式内存对象缓存系统,它用于临时存储(缓存)网络应用的...通过对源码的学习,可以更深入理解其数据结构、一致性哈希实现方式以及与其他语言的接口设计,提升你在分布式缓存领域的专业技能。

    分布式键值系统-Dynamo1

    首先,Dynamo 应用了改进的一致性哈希策略,以应对节点动态增删带来的挑战。一致性哈希允许节点的加入或离开只影响到哈希环中的相邻节点,而不波及整个系统。为了平衡节点间的负载,Dynamo 引入了虚拟节点的概念,每...

    Dynamo论文整理的PPT与中文PPT

    2. **一致性哈希**:Dynamo使用一致性哈希算法来分发数据,这允许在添加或移除节点时,只影响少数的数据分区,减少了整个系统的中断时间。 3. **环形分区**:系统中的所有键都被映射到一个逻辑环上,每个节点负责环...

    Memcache缓存

    - **更好的缓存命中率:** 当服务器集群发生变化时,一致性哈希算法可以最小化缓存数据失效的数量,从而保持较高的缓存命中率。 - **动态扩展:** 支持动态地添加或移除服务器,而不会对现有的缓存数据造成太大影响...

    国外技术干货:amazon-dynamo-sosp2007.zip

    1. **分布式键值存储**:Dynamo是一种无中心节点的分布式键值存储系统,通过一致性哈希实现数据的分布,确保负载均衡和故障容错。 2. **可扩展性**:Dynamo设计的核心目标之一是能够线性扩展,随着硬件的增加,系统...

    Memcache 面试题 23道

    - **一致性哈希**:在集群环境中,通过一致性哈希算法,确保数据分布均匀,即使有节点故障,影响最小。 2. **分布式集群实现**: - **程序端实现**:通过一致性哈希算法,将key映射到多台Memcached服务器上。 - ...

    amazon-dynamo-sosp2007.pdf

    文档中提到的关键技术包括NWR策略、Merkle树、一致性哈希分布、数据迁移、版本合并和版本冲突处理机制。NWR是一种在分布式数据存储中常用的策略,它指的是系统必须确认写操作的N个副本、读取R个副本,并且需要W个...

    Memcached 分布式缓存实现原理 – 码农网1

    一致性哈希的主要优点是,当添加或删除服务器时,只需要重新分配一小部分键,而不是全部,从而减少了对缓存的影响。此外,还可以通过设置虚拟节点(virtual nodes)来平衡哈希空间,进一步优化分布均匀性。 在实际...

    复习Amazon Dynamo设计的一点分享

    Dynamo的设计理念强调高可用性、可扩展性和一致性,这些都是现代大规模分布式系统的基石。 在复习Amazon Dynamo设计时,我们首先需要理解其核心特性: 1. **全局分布式**:Dynamo将数据分布在多个数据中心,通过...

    NoSQL相关技术 算法和思想

    一致性哈希(Consistent Hashing)是一种特殊的哈希算法,用于解决分布式环境下的数据分布问题。它通过减少节点变化时需要重新分配的数据量来提高系统的稳定性。 ##### 2. Quorum/NRW机制 Quorum机制允许在分布式...

    强一致、高可用、高性能分布式Log存储系统的设计与实现_简怀兵@YY Research Lab.zip

    此外,数据分布策略(如一致性哈希)也对扩展性有直接影响。 除此之外,系统还需要具备容错能力,能够检测和恢复错误。这包括节点故障、网络分区、数据损坏等。为了保证数据安全,通常会进行定期备份,并且在出现...

    译文Dynamo:Amazon的高可用性的键-值存储系统1

    使用一致性哈希算法来分配和定位数据,保证负载均衡和扩展性。 2. 版本控制:每个数据项都有一个版本号,这使得在并发更新时能够识别并解决冲突。当多个客户端同时修改同一数据时,系统可以基于版本号选择合适的...

    集群环境下分布式索引分析.pdf

    Chord模型使用分布式哈希表来定位数据和索引,它通过一致性哈希技术将键映射到节点,从而提高了索引操作的效率。Master-Slave模型则通过主从复制的方式,来保证数据的一致性和可靠性。Hindex提出了分层索引的概念,...

    cassandra3.0英文pdf

    在数据分布和复制方面,Cassandra使用一致性哈希和虚拟节点(Virtual Nodes)来实现数据的均匀分布和高效复制。一致性哈希有助于减少节点增加或移除时的数据迁移量。而虚拟节点则进一步优化了数据存储的均匀性,提升了...

Global site tag (gtag.js) - Google Analytics