代码之家  ›  专栏  ›  技术社区  ›  Slinky

经典卡桑德拉与协调

  •  2
  • Slinky  · 技术社区  · 7 年前

    我对经典卡桑德拉中的协调很好奇。我读了阿维纳什·拉克什曼和普拉尚特·马利克写的一篇名为《卡桑德拉-A》的脸书 分散式结构化存储系统

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

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

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

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

    enter image description here

    问题

    不知道怎么做 每个节点 但是,如果根据描述,每个节点都对自己及其前一个节点负责,那么您就可以成为协调器,因为这样会使协调器重叠。所以在我的截图中,180302、502和771如果同时也是协调员,则会重叠。

    1 回复  |  直到 7 年前
        1
  •  3
  •   Chris Lohfink    7 年前

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

    关于一个环,它并没有“最后一个节点”环绕。从该环的任何部分,您都可以顺时针旋转并拾取其他副本。一致性哈希在许多不同的地方使用,如果您混淆了措辞,请尝试其他来源(例如演示文稿)。

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

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

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

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

    推荐文章