Cassandra 经典卡桑德拉与协调

Cassandra 经典卡桑德拉与协调,cassandra,consistent-hashing,coordination,Cassandra,Consistent Hashing,Coordination,我对经典卡桑德拉中的协调很好奇。我读了Avinash Lakshman和Prashant Malik写的Facebook文章,称之为Cassandra——一个分散的结构化存储系统 这篇论文的摘录 通过对数据项的键进行散列以获得其在环上的位置,然后顺时针遍历环以找到位置大于该项位置的第一个节点,将由键标识的每个数据项分配给一个节点。此节点被视为此密钥的协调器。应用程序指定这个密钥,Cassandra使用它来路由请求。因此,每个节点负责其与环上的前一个节点之间的环中的区域 我好奇的部分是环中的最后一

我对经典卡桑德拉中的协调很好奇。我读了Avinash Lakshman和Prashant Malik写的Facebook文章,称之为Cassandra——一个分散的结构化存储系统

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

我好奇的部分是环中的最后一个节点,指向环中第一个节点的节点,它的坐标范围是什么

因此,每个节点负责其与环上的前一个节点之间的环中的区域

我试图将协调方案想象成这样:

问题


不确定每个节点如何成为协调器,但根据描述,如果每个节点负责自身及其前一个节点,则协调器重叠。因此,在我的屏幕截图中,如果180302、502和771也是协调人,则它们会重叠。

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

关于一个环,它并没有“最后一个节点”环绕。从环的任何部分,你都可以顺时针旋转,然后选择其他复制品。一致性散列在许多不同的地方使用,如果您混淆了措辞,请尝试其他来源(如演示文稿)

《卡桑德拉》中的术语和概念自早期以来已经发生了相当大的变化,所以在阅读本文时请记住,它可能与《卡桑德拉》今天的工作方式不符

戒指是一个形象化的东西。实际实现更像是拥有一个令牌列表。思考:

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

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

谢谢。我更新了我的问题和图片,使其更加清晰。包括示例,看看这是否有帮助