2

我对经典 Cassandra 中的协调感到好奇。我阅读了 Avinash Lakshman 和 Prashant Malik 撰写的 Facebook 论文,名为 Cassandra - A Decentralized Structured Storage System

论文摘录 每个由键标识的数据项通过散列数据项的键以产生其在环上的位置,然后顺时针遍历环以找到位置大于项位置的第一个节点,从而将其分配给一个节点. 该节点被视为该密钥的协调者。应用程序指定此密钥,Cassandra 使用它来路由请求。因此,每个节点都负责环中它与其在环上的前任节点之间的区域。

我很好奇的部分是环中的最后一个节点,指向环中第一个节点的节点,它协调的范围是多少?

因此,每个节点都对环中它和环上它的前任节点之间的区域负责

我正在尝试像这样可视化协调方案:

在此处输入图像描述

问题

不确定如何每个节点都可以成为协调器,但根据每个节点对自身及其前一个节点负责的描述,因为那样您将有协调器重叠。因此,在我的屏幕截图中,如果 180,302、502 和 771 也是协调器,它们会重叠。

4

1 回答 1

3

协调员实际上就是您向其发送请求的任何人。驱动程序上的许多策略将保留环数据并将请求发送到其中一个副本,这样如果一致性级别设置为 ONE,它可以在该主机上完成所有操作,并从请求中消除另一个网络跃点的延迟。实际上,您可以向环中的任何节点发送请求,这仅意味着额外的网络跃点(如果使用更强的一致性,无论如何都可能需要)。

关于环的事情是它没有环绕的“最后一个节点”。您可以从该环的任何部分顺时针旋转并挑选其他复制品。一致的散列在许多不同的地方使用,如果措辞让您感到困惑,请尝试不同的来源(即演示文稿)。

Cassandra 中的术语和概念自早期以来已经发生了很大变化,因此在阅读论文时请记住它可能与今天的 Cassandra 工作方式不匹配。

戒指是一种可视化。实际的实现更像是拥有一个令牌列表。思考:

[(a, 4), (b, 10), (c, 35), (d, 40)]

范围为 1-50。在列表中找到大于您的令牌的第一个令牌,然后继续向下列出,直到您有足够的副本来满足复制因子。使用 3 的 RF 和 6 的令牌,您从 b 开始,因为它的第一个更大,然后包括下一个 2,因此您的副本是[b, c, d]. 没有副本比其他副本更重要或对数据有任何特殊控制(修复除外)。列表末尾的“环绕”很简单,一个 41 的标记转到[a, b, c].

于 2018-04-10T21:22:56.340 回答