【问题标题】:Cassandra = Does ReadRepair prevent Scaling Reads?Cassandra = ReadRepair 会阻止扩展读取吗?
【发布时间】:2011-04-26 13:55:54
【问题描述】:

Cassandra 必须选择启用“ReadRepair”。一个读取被发送到所有副本,如果一个是陈旧的,它将被修复/更新。但是由于所有副本都接收到读取的事实,当节点达到 IO-Saturation 时,就会有一个点。与往常一样,所有副本节点都会收到读取,添加更多节点也无济于事,因为它们也会收到所有读取(并且会立即饱和)?

或者 cassandra 是否提供了一些“可调性”来配置 ReadRepair 仅适用于并非所有节点(或提供任何其他允许真正读取扩展的“复制”)?

谢谢!! 詹斯

更新: 一个具体的例子,因为我仍然不明白它在实践中是如何工作的。

  • 9 卡桑德拉“盒子/服务器”
  • 3 个副本 (N=3) => 每个“行”是 写入 2 个附加节点 = 3 方框中包含总共的数据)
  • 已启用读取修复
  • 有问题的行是(假设是 customer1)流量很大

1.) 我第一次将行“Customer1”写入 Cassandra 时,它将最终在所有 3 个节点上可用。

2.) 现在我以每秒 1000 次针对 Customer1 的请求请求来查询系统(并且在禁用任何缓存的情况下更清楚)。

3.) 读取将始终发送到所有 3 个节点。 (第一个请求(到最近的节点)将是一个完整的数据请求,另外两个请求将只是一个“校验和请求”。)

4.) 当我们查询 1000 个请求时,我们达到了所有副本的 IO 限制! (所有 3 个节点上的 IO 都是相同的!!(只有校验和节点上的带宽要小得多)。

5.) 我再添加 3 个盒子(所以我们总共有 12 个盒子):

A) 这些盒子还没有数据(以帮助线性扩展)。我首先必须将 Customer1 记录至少保存到这个新盒子中的一个。 =>这意味着我必须将复制因子更改为 4 (或者是否有任何其他选项可以将数据获取到另一个盒子?)

现在我们遇到了同样的问题。复制因子现在是 4。所有 4 个盒子都将收到这个高流量 customer1 行的读取(修复)请求。这不会以这种方式扩展。仅当我们拥有不会收到 ReadRepair 请求的副本时,缩放才有效。

我的理解有什么问题??我的结论:使用标准 ReadRepair 系统不会线性扩展(对于单个高流量行),因为添加更多框也会导致这些框也接收 ReadRepair 请求(对于这个流量行)...

非常感谢!!!詹斯

【问题讨论】:

    标签: nosql cassandra


    【解决方案1】:

    添加更多节点会有所帮助(在大多数情况下)。在读取期间只会有 N 个读取修复“请求”,其中 N 是 ReplicationFactor(副本数,nb。不是整个集群中的节点数)。因此,仅当您请求的数据包含在节点键范围内(或持有数据的副本)时,新节点才会包含在读取/读取修复中。

    还有每个 ColumnFamily 的 read_repair_chance 可调参数,但这是一个更高级的主题,不会改变应该通过添加更多节点而不是取消调整读取修复来扩展读取的基本方程式。

    您可以从bens slides 阅读有关复制和一致性的更多信息

    【讨论】:

    • 你好 Schildmeijer。非常感谢您的帮助!!我完全理解,“read_repair_chance”可能是一个扩展选项。但是我仍然不明白如何通过简单地添加一个节点来在没有此设置的情况下进行扩展。我用一个具体的例子更新了我的问题。如果您能对此发表评论,那就太好了。如果我的想法正确与否,我的理解有什么问题。非常感谢!!
    • 重点是您应该在“引导”模式下添加节点,不增加 RF。 (Bootstrap=现有节点分配数据并将数据发送到新节点。)见wiki.apache.org/cassandra/Operations
    • 您好乔纳森,感谢您的帮助! (顺便说一句,我从 cassandra 的搜索中知道你的博客,非常好的内容)。嗯……我还是不明白。 (也许这是我的错,但我读了整个复活节关于 cassandra 的文章,也许这是缺乏关于基础知识的良好文档)。我知道引导。引导将导致新节点接收数据(它将从最大安装中拆分密钥范围并要求一半密钥。)但是该节点如何在不增加 RF 的情况下保持“最新”?引导只会导致拥有数据,但它必须保持最新谢谢
    • 或者换一种说法:我的理解是(通过大量阅读),添加一个新节点将导致这样一个事实,即给定数量的密钥将分布在更多节点上。所以每个节点将负责一个较小的子集。但是要增加集群中一个(!)单个键的可扩展性,仅添加“副本”将有助于扩展。因此我必须增加射频。也许这个假设是错误的,但这没有记录或解释......我会接受答案,虽然我完全不明白......谢谢
    猜你喜欢
    • 1970-01-01
    • 2019-10-22
    • 2011-12-19
    • 1970-01-01
    • 2013-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多