技术分享 | Jump Consistent Hash 原理解析(上篇)
作者:傅文辉 之前爱可生开源社区公众号发表了 dble 沿用 jumpstringhash,移除 Mycat 一致性 hash 原因解析 , 阐述了跳跃法相对环割法的性能优势。很多读者表示对其中"跳跃法的原理"不是很理解,本文就来详细阐述一下。 一致性哈希 首先,我们的需求是,将数据(key-value pair)分布在多个节点上。这点可以简单的用取模实现, 节点 key 1 1 4 7 10 2 2 5 8 11 3 3 6 9 12 然而,当增加新节点时,数据将发生大规模转移: 节点 key 1 (1) 5 9 2 (2) 6 10 3 (3) 7 11 4 4 8 12 一致性哈希的主要目的是,在节点数量发生变更时,只需要在节点间移动少量数据,而不是"全部洗牌"。 除了经典的环割法一致性哈希外,Google 发表了另一种实现简洁且高效的跳跃法一致性哈希《A Fast, Minimal Memory, Consistent Hash Algorithm》(文末附链接) 在爱可生开源数据库中间件 dble 中,关于 jump consistent hash 的配置方法详见 dble 官方手册中"跳增字符串算法"的部分(文末附链接)。 基础实现 与原始论文不同, 本文节点(又称 bucket)从 1 开始编号,而非从 0 开始。 先考虑只有一个节点的情况