一致性哈希中副本和虚拟节点的区别

Zac*_*chB 5 hash consistent-hashing

这可能特定于我正在查看的实现(node-hashring),但是虚拟节点(vnode)和一致哈希环中的副本之间有什么区别?

最初的Akamai 论文似乎没有明确描述 vnode,并且各种其他来源似乎可以互换使用这两个术语(例如虚拟节点”,它们是来自来源的循环中缓存点的副本)。

节点散列的文档给出了示例40 个散列(vnode)和每个散列 4 个副本 = 每个服务器 160 个点。尽管阅读了源代码,我还是不太清楚这两个不同参数的作用。

小智 1

vnode 与副本不同。vnode只是为一致性哈希环中的物理节点赋予的标签,以保持数据更均匀的分布。而副本是相邻服务器存储的数据的副本,当该服务器宕机或从环中删除时,副本就会发挥作用。例如。如果node1有40个虚拟节点,则所有哈希值落在vnode范围内的数据都将由node1存储和服务。另外,node1 可以有 4 个副本,这意味着 4 个相邻的服务器将存储 Node1 数据的副本,并在 Node1 出现故障时为它们提供服务。