网易首页 > 网易号 > 正文 申请入驻

技术分享 | Jump Consistent Hash 原理解析(上篇)

0
分享至

作者:傅文辉

之前爱可生开源社区公众号发表了《dble 沿用 jumpstringhash,移除 Mycat 一致性 hash 原因解析》(文末附链接),阐述了跳跃法相对环割法的性能优势。很多读者表示对其中"跳跃法的原理"不是很理解,本文就来详细阐述一下。

一致性哈希

首先,我们的需求是将数据(key-value pair)分布在多个节点上。这点可以简单的用取模实现,

然而,当增加新节点时,数据将发生大规模转移:

一致性哈希的主要目的是,在节点数量发生变更时,只需要在节点间移动少量数据,而不是"全部洗牌"。除了经典的环割法一致性哈希外,Google 发表了另一种实现简洁且高效的跳跃法一致性哈希《A Fast, Minimal Memory, Consistent Hash Algorithm》(文末附链接)

在爱可生开源数据库中间件 dble 中,关于 jump consistent hash 的配置方法详见 dble 官方手册中"跳增字符串算法"的部分(文末附链接)
基础实现与原始论文不同,本文节点(又称 bucket)从 1 开始编号,而非从 0 开始。

  • 先考虑只有一个节点的情况,显然所有数据都放在这个节点里,即ch(key,1)=1(ch 为 consistent_hash 之缩写)。

  • 考虑增加一个节点,我们随机抽取 1/2 的数据移动到 2 号节点
  • 考虑再增加一个节点,需要从 1、2 号节点中,随机抽取共 1/3 的数据移动到 3 号节点

    ·为了均匀分配,1、2号需要各出 1/6 的数据

    ·实际上,只要每个 key 都有 1/3 的概率被抽中,分配总是均匀的

可以看到,每增加一个节点,只需要移动总共 1/n 的数据,而不是取模法中的几乎所有数据。所谓随机抽取,我们采用可重现的随机:首次调用Rand()之前将 key 作为随机数种子。因而对于一个 key,首次放入和后续取回使用的是相同的随机数序列。例如有 k1,k2,k3 三个 key,随着节点数量从 1 到 15 增长,它们各自会在某一时刻“跳跃”,而后“稳定”一段时间。

我们用数学归纳法来表达一下某个 key 在不同节点数时的位置:

  • 基础情况:只有一个节点,只能放在节点 1

  • 归纳情况:假设目前有 n 个节点,增加一个节点到 n+1 个。key 目前所在的位置由之前的跳跃情况决定。本轮该 key 有 1/(n+1) 的概率被移到 n+1 号节点·即 n+1 节点时,key 所在的位置由 n 节点时的位置和一个随机变量 rand 决定, 如果 rand<1/(n+1),它就会跳跃到 n+1 节点,否则则和 n 节点时一样

结合基础情况和归纳情况,我们得出了 n 为任意正整数时的分配方法。数学归纳法的逻辑和递归代码直接对应:

  1. 1.func ch(r *rand.Rand, k int, i int) int {

  2. 2.if i == 1 {

  3. 3.// 基础情况

  4. 4.return 1

  5. 5.} else {

  6. 6.// 归纳情况

  7. 7.b := ch(k, i-1)

  8. 8.if rand.Float() < 1.0/float64(i) {

  9. 9.return i

  10. 10.} else {

  11. 11.return b

  12. 12.}

  13. 13.}

  14. 14.}

  15. 15.

  16. 16.func ch_wrapper(k int, i int) int {

  17. 17.r := rand.Seed(k) // 在计算之前, 将key作为随机数种子

  18. 18.return ch(r, k, i)

  19. 19.}

注意,要先计算ch(k,i-1)再决定本轮是否跳转(ifrand<1.0/i)。不能因为本轮决定跳转就不计算上一轮的结果,否则会因节点数不同而产生不一样的随机序列。

工程代码中一般使用循环代替递归。本文不再赘述递归转循环的办法。


优化性能

我们看到,对于一个 key,我们要从 1~N(N 为节点数)循环一遍,即复杂度为节点数的线性关系。原始论文中给出了一个巧妙的方法,使复杂度从线性降低到了对数:既然每一次是否跳跃的决策中我们随机决定,那么,与其一次次决定是否跳跃,我们是否能够直接随机地决定下一次跳跃的目标?当然,这个随机目标的取值符合一定的概率分布。

关于这个巧妙方法的具体内容和论证,敬请期待下篇。


https://mp.weixin.qq.com/s/5PYDIE4YamcynBJTPTAnVg
《A Fast, Minimal Memory, Consistent Hash Algorithm》
https://arxiv.org/ftp/arxiv/papers/1406/1406.2294.pdf
《DBLE 手册中跳增字符算法部分》
https://actiontech.github.io/dble-docs-cn/1.configfile/1.01rule.xml.html

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
医生坦言:只要体检里没有这2个箭头,脑梗风险就不用太焦虑

医生坦言:只要体检里没有这2个箭头,脑梗风险就不用太焦虑

路医生健康科普
2026-04-18 21:25:03
解放军编队划了条线,052D贴岸航行提醒日本人,琉球主权可还没定

解放军编队划了条线,052D贴岸航行提醒日本人,琉球主权可还没定

别吵吵
2026-04-21 09:56:45
日舰硬闯台海三天后,赖清德通告全球,语气很嚣张,蒋万安不忍了

日舰硬闯台海三天后,赖清德通告全球,语气很嚣张,蒋万安不忍了

舍长阿爷谈事
2026-04-21 02:58:52
长的太漂亮了,真正的珠圆玉润,标准的东方美

长的太漂亮了,真正的珠圆玉润,标准的东方美

生活新鲜市
2026-03-27 07:21:32
76年谭启龙给华国锋写信:我要当官,华老回复:去青海当省委书记

76年谭启龙给华国锋写信:我要当官,华老回复:去青海当省委书记

棠棣分享
2026-04-15 17:42:48
造谣日本男童遇害案嫌犯为“中国人”,台媒郑重致歉

造谣日本男童遇害案嫌犯为“中国人”,台媒郑重致歉

参考消息
2026-04-20 14:23:54
有没有人敢爆自己的瓜?网友:确定玩这么大吗?

有没有人敢爆自己的瓜?网友:确定玩这么大吗?

夜深爱杂谈
2026-02-18 20:55:58
亚冠精英扩军32队中超增加0.5席位 国安直通正赛

亚冠精英扩军32队中超增加0.5席位 国安直通正赛

体坛周报
2026-04-21 10:00:15
武汉市武昌区政府副区长,区公安分局局长徐舫拟提名为市州副市州长人选

武汉市武昌区政府副区长,区公安分局局长徐舫拟提名为市州副市州长人选

观星赏月
2026-04-20 18:26:12
油价或迎来今年首次下调

油价或迎来今年首次下调

大象新闻
2026-04-21 10:23:04
美军有多可怕?美专家:一旦出动全部军力,全球联合也没法抗衡!

美军有多可怕?美专家:一旦出动全部军力,全球联合也没法抗衡!

健身狂人
2026-04-20 18:36:21
国防部曾发出最后通牒:关于如何处理赖清德,大陆早考虑好了

国防部曾发出最后通牒:关于如何处理赖清德,大陆早考虑好了

南宗历史
2026-04-19 23:07:54
海外版“砍一刀”被美国消费者疯狂吐槽:这质量就是中国制造?

海外版“砍一刀”被美国消费者疯狂吐槽:这质量就是中国制造?

可达鸭面面观
2026-04-20 16:18:29
沈阳又听劝了,立即拆除!

沈阳又听劝了,立即拆除!

沈阳公交网小林
2026-04-21 00:10:09
第1!勇士第1啊!伦纳德有望联手库里

第1!勇士第1啊!伦纳德有望联手库里

篮球实战宝典
2026-04-20 16:52:33
黄圣依晒瑞士留学照!穿高跟鞋拎爱马仕遛狗,儿子眉清目秀不像爸

黄圣依晒瑞士留学照!穿高跟鞋拎爱马仕遛狗,儿子眉清目秀不像爸

阿凫爱吐槽
2026-04-20 10:34:16
勇士队内部人士:库里目前合同剩1年6260万美元,计划今夏续约2年

勇士队内部人士:库里目前合同剩1年6260万美元,计划今夏续约2年

好火子
2026-04-21 00:24:13
麦当娜:睡过100+猛男,2段婚姻全败,如今又恋上儿子29岁教练

麦当娜:睡过100+猛男,2段婚姻全败,如今又恋上儿子29岁教练

七阿姨爱八卦
2026-04-15 17:12:30
与孔令辉分手12年,被黑人托在肩上的马苏,终是为自己的风流买单

与孔令辉分手12年,被黑人托在肩上的马苏,终是为自己的风流买单

情感大头说说
2026-04-18 21:06:00
骑士12连胜,哈登存两瑕疵!米切尔一点真该夸,湖人旧将也该弃用

骑士12连胜,哈登存两瑕疵!米切尔一点真该夸,湖人旧将也该弃用

鱼崖大话篮球
2026-04-21 10:07:55
2026-04-21 11:24:49
爱可生云数据库
爱可生云数据库
企业数据处理技术整体解决方案
411文章数 20关注度
往期回顾 全部

科技要闻

重磅官宣:库克卸任,特努斯接任苹果CEO

头条要闻

牛弹琴:特朗普成美伊谈判最大障碍 伊朗果然勃然大怒

头条要闻

牛弹琴:特朗普成美伊谈判最大障碍 伊朗果然勃然大怒

体育要闻

“被优化”8年后,国乒方博决定换一条路重新上场

娱乐要闻

周润发时隔16年再卖楼,变现数亿资产

财经要闻

减速机订单已排到明年!

汽车要闻

把天门山搬进厂?开仰望U8冲上45度坡的那刻 我腿软了

态度原创

教育
时尚
数码
游戏
本地

教育要闻

“学硕不让读,专硕21.8万!”复旦让普通人看清现实:没钱别硬卷

“爆冷”又如何?陈法拉的人生本就是一场逆袭大戏

数码要闻

必须收藏!2026年智能垃圾处理器推荐TOP5

《识质存在》一百万销量 卡普空发布可爱贺图

本地新闻

12吨巧克力有难,全网化身超级侦探添乱

无障碍浏览 进入关怀版