一致性哈希及其在Greenplum中的应用

本文介绍了分布式系统中的一致性哈希算法,包括经典的割环法和更高效的跳跃一致性哈希。割环法通过虚拟节点解决不平衡问题,而跳跃一致性哈希实现更简洁,时间复杂度更低,适用于在线扩容。文章还讨论了这些算法在Greenplum中的应用。
摘要由CSDN通过智能技术生成

ae0d90ad-aa83-40eb-b3cb-b4823dde5b41.jpg

了解更多Greenplum相关内容,欢迎访问Greenplum中文社区网站

一致性哈希(consistent hashing)是分布式系统中非常重要的算法,在平滑扩缩容、动态负载均衡等方向有大量应用。相对于传统的线性(取模)哈希算法,一致性哈希可以保证在分布式哈希表中的桶数量发生变化时,受到影响需要重新映射的key尽量少。本文先简要复习下经典的割环一致性哈希方案,然后介绍它的变种——跳跃一致性哈希(jump consistent hash)。

割环一致性哈希

一致性哈希的概念最初在1997年由David Karger等大佬提出,原始论文见Consistent Hashing and Random Trees: Distributed Caching Protocols for Relieving Hot Spots on the World Wide Web,起初是为了解决网络中的热点问题,后来发展成分布式系统中通用的算法。为了与此后出现的其他一致性哈希算法相区别,一般将这个经典方法称为“割环法”。该算法能够满足论文中提出的两大目标,即平衡性(balance)和单调性(monotonicity)。

顾名思义,割环法将整个哈希空间组织成一个首尾相接的圆环,一般设为[1,2^32-1]。以分布式K-V存储为例,哈希桶即为存储节点。将节点N的编号或IP等按哈希函数hash(N)映射在环上,再将数据的key按同样的哈希函数hash(k)映射在环上,数据就会存储在环上以顺时针方向遍历找到的第一个节点。当节点扩容或缩容时,仍然按照顺时针原则,将受到影响的区间内的数据重新分布到相邻的节点上去,达到增量更新的目的,即满足单调性。以下3张图能够简单地说明。

640?wx_fmt=jpeg

虽然哈希函数的结果是均匀的,但节点映射在环上可能不均匀,节点数越少,数据倾斜的可能性就越大。解决此问题的方法是将物理节点虚拟成多个影子节点,数据经过哈希后按顺时针原则落到影子节点指向的物理节点上。如果我们想要人为干预各节点上数据量的权重,还可以指定不同的影子节点数量。如下图所示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值