一致性哈希算法,举个栗子:
我们钟表有 60 分钟,从 0 开始到 59,共 60 个点。
现在我们将机器往这 60 个点分配,规则如下:
hash(ip) % 60。
假设有 3 台机器 A,B 和 C,分别被分配到了 14,37 和 46 这三个点上。
图片的分配规则类似:
hash(image_id) % 60。
现有 3 张图片 x, y, z,分别被分配到 5,30,50 这三个点。
很明示,图片都没被分配到机器的节点上,怎么办呢?在钟表上顺时钟往前寻找,第一台遇到的机器,就是它的归属。
--- 我是分割线 ---
现在很不凑巧,A B C 三台机器分别分配到 5,10,15 这三个点。这样对 A 是很不公平的吖,要负责存储绝大多数的图片,那这怎么办呢?我们社会主义核心价值观基本内容:和谐、平等、公正。为建设和谐社会努力奋斗!!
为了避免不必要的争端,我们引入“虚拟节点”,每台机器都可以拔一根汗毛,变成若干台,把虚拟节点分散到 60 个点上,归属“虚拟节点”的图片,均保存到它的真身。这样就能解决分配不均匀的问题。
------
应用时,将 60 替换下即可,如替换为 2的 32 次方。
展开