经典的 Cassandra 和协调

Classic Cassandra and Coordination

我对经典 Cassandra 中的协调性很好奇。我读了 Avinash Lakshman 和 Prashant Malik 写的 Facebook 论文 Cassandra - A Decentralized Structured Storage System

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

我比较好奇的部分是环中的最后一个节点,指向环中第一个节点的那个,它在协调什么范围?

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

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

问题

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

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

关于戒指的事情是没有 "last node" 它环绕。从该环的任何部分,您都可以顺时针旋转并选择其他副本。一致性哈希在很多不同的地方使用,如果措辞让您感到困惑,请尝试不同的来源(即演示文稿)。

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

环是观想。实际实现更像是拥有一个令牌列表。认为:

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

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