【问题标题】:Difference between replicas and virtual nodes in consistent hashing一致性哈希中副本和虚拟节点之间的区别
【发布时间】:2017-03-30 01:58:37
【问题描述】:

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

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

node-hashring 的文档给出了示例40 个哈希 (vnodes) 和每个哈希 4 个副本 = 每个服务器 160 个点。尽管阅读了源代码,但我无法完全弄清楚这两个不同的参数的作用。

【问题讨论】:

    标签: hash consistent-hashing


    【解决方案1】:

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

    【讨论】:

    • 当一个节点宕机时,在典型系统中将如何处理?包含副本的节点将继续为数据提供服务还是会启动一致的散列,它将为数据分配新节点,并且来自副本的数据将被移动到新分配的节点?..前者似乎是最有效的选择,但不确定在这种情况下一致的哈希将如何工作..?基本上不会发生密钥的重新分配,因为副本节点会处理宕机节点的请求?
    • 一般副本作为备份服务器用于容错。因此,在这种情况下,我们可以将像 [R1-R2-R3] 这样的服务器链全部分组为单个节点(N1)。因此,这里的 N1 代表整个副本链,并且将是虚拟分布的。因此,理想情况下,仅当链中的所有服务器都发生故障时才应考虑 N1 故障,否则在这种情况下,如果 R1 发生故障,则 R2 应作为主要服务器来处理负载,而 N1 为 [R2, R3]。在这种情况下,外部世界并不关心,因为在所有副本都关闭之前,N1 仍在处理请求,因此不应将其视为已关闭
    猜你喜欢
    • 2019-10-13
    • 2010-11-11
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 2017-12-12
    • 1970-01-01
    • 2011-06-24
    相关资源
    最近更新 更多