我对经典卡桑德拉的协调感到好奇。我阅读了由Avinash Lakshman和Prashant Malik撰写的Facebook论文,名为Cassandra - A 分散式结构化存储系统
摘自论文 通过对数据项的键进行散列以在环上产生其位置,然后顺时针走环以找到位置大于项目位置的第一个节点,将由键标识的每个数据项分配给节点。此节点被视为此密钥的协调者。应用程序指定此密钥,Cassandra使用它来路由请求。因此,每个节点负责它与环上其前任节点之间的环中的区域。
我很好奇的部分是环中的最后一个节点,指向环中第一个节点的节点,以及它协调的范围是什么?
因此,每个节点负责它与环上的前任节点之间的环中的区域
我正在尝试将协调方案可视化:
问题
不确定 每个节点 如何成为协调员,但是根据描述,每个节点都对自己及其前一个节点负责,因为那时你会有协调员重叠。因此,在我的截图180,302中,如果他们也是协调员,则502和771会重叠。
答案 0 :(得分:3)
协调员实际上是您发送请求的人。驱动程序上的许多策略将保留环数据并将请求发送到其中一个副本,这样如果一致性级别设置为ONE,它可以在该主机上完成所有操作并从请求中删除另一个网络跃点的延迟。实际上,您可以向环中的任何节点发送请求,这只是意味着额外的网络跳跃(如果使用更强的一致性,可能还是需要)。
关于一个戒指,它没有包裹的“最后一个节点”。从那个戒指的任何部分,你可以顺时针转动并选择其他复制品。在许多不同的地方使用一致的散列,如果你混淆的措辞尝试不同的来源(即演示)。
Cassandra中的术语和概念从早期开始就发生了很大的变化,因此在阅读纸张时,请记住它可能与Cassandra今天的工作方式不符。
戒指是一种可视化。实际的实现更像是有一个令牌列表。认为:
[(a, 4), (b, 10), (c, 35), (d, 40)]
范围为1-50。找到比列表中的令牌更大的第一个令牌,然后继续向下列表,直到您有足够的副本来满足复制因子。如果RF为3且令牌为6,则从b开始,因为它的第一个更大,然后包含接下来的2个,因此您的副本为[b, c, d]
。 没有副本比其他副本更重要,或者对数据有任何特殊控制(其他修复)。列表末尾的“包裹”就是这样,41的标记转到[a, b, c]
。