解决问题
传统的数据路由/分片的做法是将key的哈希值对N取模,N为槽位数(槽位数即机器数)。这种方案的问题在于最终的路由结果会跟着机器数量的变化而变化(扩容、缩容和宕机等),从而导致请求查询不到数据或者请求出错等情况。
问题:机器数作为槽位数,当机器数量发生变化时,导致大量请求重哈希。
一致性哈希算法
算法思想:槽位数取无限大的固定值,不再与机器数产生关联,如下图所示,这样无论机器数量如何变化,请求的哈希结果是不变的。机器与槽位的关系既可以通过算法分配,比如均分、平均轮询等,也可以通过映射表来维护映射关系。
参考
- 一致性哈希算法及其在分布式系统中的应用