`

一致性哈希算法(consistent hashing)

阅读更多
consistent hashing由来?

最初由Karger等人设计。在麻省理工学院用作分布式缓存,现在已经扩大到其他领域。

它被设计来解决hash的什么问题?

假设有m个对象需要被映射到n个node上,简单hash就求余映射hash(object)%n->node,就大致均匀的分布到n个node上了。可是问题在于如果n发生变化(多了或者少了),就必须重新计算保存对象存放到node,这代价未免有点大。consistent hashing就是用来解决这个问题。

一般hash的问题在于,映射关系计算是个死的东西。所以consistent hashing就是要把对象和这个node和映射关系搞活一点。那么具体是怎么搞活的?

假设有个ring(环),hash(object)和hash(node)都在投影到这个ring上。
映射关系变成:hash(object)->hash(node),
->(映射关系):查找用的是在ring上顺时针查找,找到最近的hash(node),建立映射关系。
图大概就是这样子的:

如果有个node被咔嚓剪了一个或者咔嚓多了一个,想象下hash(object)像精子一样顺时针沿着ring游动去找他的小伙伴,碰到最近的hash(node)就结合了。node不是很少的话,基本上只要很少的object需要重新寻找亲密小伙伴。


图看着挺好看挺均匀挺和谐的,可是如果我只有两个node,而且好死不死,hash(node)后的值在ring上又紧挨着。。咋整?

问题问的真好 ,node少不要怕,在天朝,啥都不知道,造假还有不知道的吗?对,就是造假,明明只有2个node,我们就整他100~1000个(假的成本毕竟低么),如果你胆大不怕查,你也可以多造点。真的node就叫node,假的就叫virtual node(简称vnode)。然后再维护个vnode->node就可以了。

vnode搞越多,越均匀,越好么?

由于查找object所在的vnode需要O(n)步(n为vnode个数),运气不好,查到最后一个才找到,那就悲催了。

consistent hashing可以用来干嘛呢?

大家都知道的分布式cache中常用这个算法。
还有在分布式文件系统中,为了使文件更加均匀的分布和减少node更变带来的影响,也常常会用到。
我想在分布式任务调度系统中,用来分发任务到zookeeper的znode上。这样加个znode或者挂掉个znode,也不用怕了。似乎和consistent hashing解决的典型问题是一样的。

  • 大小: 31.6 KB
分享到:
评论

相关推荐

    一致性哈希算法 consistent hashing

    在分布式系统中,常常需要使用缓存,而且通常是集群,访问缓存和添加缓存都需要一个 hash 算法来寻找到合适的 Cache 节点。但,通常不是用取余hash,而是使用我们今天的主角—— 一致性 hash 算法。

    一致性哈希算法(ketama hashing)

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

    Python库 | ConsistentHashing-0.1.9.tar.gz

    总之,`ConsistentHashing`是一个用于Python的工具,它实现了高效的一致性哈希算法,有助于构建稳定、可扩展的分布式系统。对于处理大数据量、高并发场景以及需要动态扩展的系统,这个库是十分实用的。

    一致性Hash(Consistent Hashing)原理剖析1

    总的来说,一致性哈希算法通过环形空间和虚拟节点的设计,实现了在动态调整系统规模时,尽可能少地改变已分配的对象,提高了系统的扩展性和可用性。随着节点数量的增加,一致性哈希能够保持较高的缓存命中率,减轻对...

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

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

    python 实现 一致性哈希算法

    一致性哈希算法

    深入探讨一致性哈希:分布式系统中的应用与优势

    一致性哈希(Consistent Hashing)是一种特殊的哈希算法,它在分布式缓存和负载均衡等场景中被广泛应用。它通过将数据和服务器节点映射到一个哈希环上,提供了一种在节点增减时能够最小化数据重新分配的机制。本文将...

    带虚拟节点的一致性哈希

    一致性哈希算法的工作流程如下: 1. 所有节点(包括服务器和数据)被哈希成一个唯一的值,并映射到一个闭合的哈希环上。 2. 当查找一个数据的存储位置时,同样对数据的键进行哈希,然后在哈希环上找到该键对应的点。...

    解决分布式数据插入数据库~一致性hash算法

    一致性哈希算法(Consistent Hashing)是一种常用于分布式系统中的数据分片策略,它有效地解决了数据在多台服务器间均匀分布的问题,同时减少了因节点加入或离开时的数据迁移成本。 首先,一致性哈希的基本原理是将...

    (10)karger-Consistent Hashing.pdf

    “ConsistentHashingandRandomTrees: Distributed Caching Protocols for Relieving Hot Spots on the Worldwide Web”指的是由David Karger等人撰写的关于一致性哈希算法(Consistent Hashing)以及如何运用该算法...

    一致性hash算法1

    一致性哈希算法(Consistent Hashing)是一种特殊的哈希算法,设计目的是为了在分布式缓存系统中解决节点动态增减时导致的数据分布不均问题。该算法最早在1997年的论文《Consistent Hashing and Random Trees》中被...

    一致性Hash算法1

    一致性哈希算法(Consistent Hashing)是一种特殊的哈希算法,设计目的是为了在分布式缓存系统中解决节点动态增减时导致的键值映射大量变更的问题。它最早在1997年的论文《Consistent hashing and random trees》中被...

    一致性hashjava实现

    在这个Java实现中,我们看到的是Ketama一致性哈希算法,这是一种在实践中广泛应用的一致性哈希变体。 Ketama一致性哈希算法由Last.fm的工程师开发,其设计目标是优化分布式哈希表的性能,特别是在处理大量小键值对...

    Consistent-Hashing:Consistent Hashing 一致哈希

    1. **哈希函数选择**:一致性哈希算法中的哈希函数需确保在整个哈希空间中分布均匀,避免热点现象。可以使用MD5或SHA系列函数进行哈希。 2. **虚拟节点机制**:为了解决实际节点数量较少导致的数据不平衡问题,一致...

    一致性Hash简单实现

    一致性哈希(Consistent Hashing)是一种分布式哈希表(DHT)的算法,它主要应用于分布式缓存、负载均衡等场景,旨在解决在动态扩展或收缩系统规模时,尽量减少数据迁移的问题。在这个简单的实现中,我们将探讨如何...

Global site tag (gtag.js) - Google Analytics