Skip to content

算法Algorithm

Rendezvous哈希放置

Rendezvous hashing · Highest random weight hashing · HRW hashing

按键与稳定节点身份评分形成全序,在成员变化中保持幸存节点相对顺序,并区分概率份额、容量权重和复制资格。

形式陈述 ​

每把键有自己的节点排名 ​

给定非空有限节点集合V、键k和固定评分函数s(k,v)。函数只使用键、稳定节点身份和固定参数,不读取当前成员总数或当前节点在列表中的下标。Rendezvous hashing又称HRW:选择评分最大的节点作为owner。[1, §IV.A]

评分相等时,用所有参与者都认可的稳定节点全序破同值。本页约定节点名较小者优先,即比较(-score,节点名)的最小值。这样每把键对所有候选节点都有唯一排名;给定成员V,就取排名中第一个属于V的节点。

若要r个候选位置,可以取前r个不同节点,0≤r≤|V|;主owner是r≥1时的第一个。r超过节点数是输入错误。这里的节点身份必须指实际需要区分的故障单位,不把同一机器的多个别名默认为独立副本。

直觉

新节点只能自己赢,不能替两个旧节点换名次 ​

从V加入x时,所有旧节点的分数与破同值键都不变,所以旧节点的相对顺序不变。若x排在旧赢家之后,赢家保持;若x排在之前,赢家改成x。不存在“加入x,却让原来A的键改投旧节点B”的第三种情况。

删除x时,原赢家不是x的键保持原赢家;原赢家是x的键改投排名中下一个仍在集合的节点。对top-r列表,同样是删除旧排名中的缺席者、补入下一名;加入者进入前r时,只会挤掉此前前r中的末位。

这些稳定性结论不要求分数随机。随机性用于分析每个节点赢多少次,确定的全序则足以证明增删不会扰乱幸存者的名次。这也是它与环后继放置的共同目标:一个靠固定圆上顺序,一个为每把键保存隐含的节点排名。

排名可重算,不一定要存全表 ​

只求一个owner时,扫描全部N个节点、保存目前最佳者即可,无需完整排序。只有要输出整份候选次序时,才必须生成长度N的排名。

两个客户端只要成员、编码、参数、分数与破同值规则相同,就能各自在本地算出同一结果。这里没有交换投票消息,也没有让不一致的成员视图自行达成共识。

例子与边界

六把键与一个并列 ​

下面是供复算的固定评分表,不假装它来自随机实验。

键 A B C D 旧owner 新节点E的分数
alpha 90 20 70 40 A 75
beta 30 80 60 20 B 81
gamma 10 50 95 40 C 10
delta 70 60 20 85 D 90
epsilon 40 30 60 55 C 59
zeta 65 65 10 50 A 65

加入E后,只有beta从B移E、delta从D移E,迁移2/6;其余四把不动。zeta有A、B、E三方65,固定A<B<E使它仍归A。若各客户端用“输入列表里先出现者”破同值,把相同集合按不同次序传入就会算出不同owner。

独立从旧四成员删除C,gamma转B、epsilon转D,其余不动。alpha原前两名是A/C,删除C后变A/D;它的主owner不变,但候选副本列表确实改变。

编码和成员都是输入合同 ​

若直接拼接键与节点字符串,("ab","c")和("a","bc")都会变成"abc",评分输入已无法区分。实际编码应保留字段边界,例如明确长度或无歧义元组编码;相同字节规则必须由所有参与者共享。

对zeta,即使评分表相同,客户端一侧认为成员为{A,B,D},另一侧认为是{B,D},前者返回A、后者返回B。两次本地计算都符合自己的输入。网络分区可能让成员知识分歧,哈希排名不能把这种分歧变成新的独占授权。

把分数乘容量,不自动按容量分流 ​

令U_A、U_B独立且均匀分布于(0,1)。如果容量2:1就比较2U_A与U_B,A获胜概率是

Pr(2UA>UB)=∫01/22udu+∫1/211du=14+12=34,

并非目标2/3。可以设计有严格比例证明的加权排名,但那需要另一个评分分布合同;不能只因为原始方法叫“weight”就把任意分数倍乘当成容量份额定理。本页实现等容量稳定评分,不承担一个未经定义的加权变体。

推论与应用

期望搬迁比例与实际表不同 ​

对一把固定键,若N个节点分数独立、同分布且连续,则每个节点以1/N概率成为唯一最大者。更一般地,只要联合分布在节点身份置换下对称且没有并列,赢家对称性就已足够;独立同分布是一个容易检查的充分模型。

加入第N+1个同分布独立分数后,它成为最大者概率1/(N+1)。固定K把键,借期望线性性得到迁移键数期望K/(N+1)。若问候选top-r集合会否变化,条件是新节点进入前r,概率为r/(N+1);主owner改变与副本候选集合改变不能共用同一比例。

固定有限散列分数会有并列;确定的节点名破同值保证重放和单调性,却可能带来小概率的身份偏向。独立连续模型的精确1/N不能不加说明地称为任意有限评分函数的精确性质。键热度若极不均匀,均衡键数也不保证均衡请求服务。[1, §§V.B–V.D]

明确实现保存多少排名 ​

若评分求值和节点名比较为单位成本,单owner扫描需O(N)时间、O(1)额外工作空间;成员列表本身占O(N)。输出全排名需O(N(1+log N))比较和O(N)输出空间。下载器为展示top-r与删除后的后继,采用完整排序;不能把它整段报告成单owner的线性扫描界。

对K把键对照一次成员变更,若旧赢家及其分数已经缓存,加入一个新节点只需每键计算一次新分数并比较。但删除恰为赢家的节点时,若未保存后续排名,就仍需扫描剩余成员;缓存省的是已经保有的证据,不是让所需信息自动出现。[1, §V.A]

候选副本尚未构成读写协议 ​

top-r只列出r个位置,不保证它们已经存有相同版本,也没有指定写入等几个确认、读取如何防倒退。还要分别定义放置配置的有效代际、复制/修复规则以及读写确认集合。

放置与查找终点要求同时交全排名和变化原因:哪把键的新赢家是新增者、哪把键的旧赢家已删除,以及哪些只有候选列表改变。只比较最终各节点键数,会漏掉不必要的旧节点之间搬迁。

参考资料
  1. David G. Thaler、Chinya V. Ravishankar,Using Name-Based Mappings to Increase Hit Rates,IEEE/ACM Transactions on Networking6(1),1998,§IV.A与§V.A/D,pp.6–7:稳定评分排名、加入/删除和缓存排名;§V.B另有负载假设。本文的有限分数并列、六键表与2U的概率反例自行展开,不把简单分数倍乘当作严格容量比例结论。
关系图谱5 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系

使用的工具