【问题标题】:Cassandra WRITE=ALL and READ=ONE applicabilityCassandra WRITE=ALL 和 READ=ONE 适用性
【发布时间】:2019-06-30 02:42:33
【问题描述】:

鉴于我们有 2x5 节点设置(跨 2 个 DC)和 3 复制因子,并且我们异步创建视图(因此我们可以安全地重试失败的操作)这一事实是否使用 WRITE=ALL 和 READ=ONE 有意义?

如果一个副本失败,我们如何知道恢复时间,那么如何选择正确的重试间隔和超时?

【问题讨论】:

    标签: cassandra replication availability


    【解决方案1】:

    WRITE=ALL 和 READ=ONE 的组合在一致性意义上是正确的 - 在您写入所有副本之后,您确实可以从任何一个副本中读取并期待最新的数据。但是,这对 高可用性 不利 - 如果两个 DC 中的 6 个副本中的任何一个发生故障,则无法完成写入。如果其中一个节点宕机一小时,您将无法在一个小时内进行任何写入。在某些批处理设置中,这可能是有意义的,但对于交互式工作负载来说,这通常是不可接受的行为,因为高可用性是主要关注点。

    如果您真的不关心高可用性并且只想在所有节点都启动时写入,那么我猜 WRITE=ALL 可以工作。例如,您可以使用“nodetool”判断所有节点何时启动。或者只是定期重试写入。

    【讨论】:

      【解决方案2】:

      以下任何组合都应为您提供正确的数据:

      1. 写=全部读=一个
      2. 写=一个 读=全部
      3. 写=LOCAL_QUORUM 读=LOCAL_QUORUM

      您可以根据应用程序的负载调整应用程序中的一致性级别。

      根据我的说法,3 号 LOCAL_QUORUM 应该会更好,因为有时节点可能处于高负载状态或可能已关闭。您的应用不会受到影响。

      如果您的写入次数多于读取次数; WRITE CL=ALL 会使您的应用程序变慢。

      【讨论】:

        猜你喜欢
        • 2022-01-13
        • 1970-01-01
        • 1970-01-01
        • 2017-12-11
        • 1970-01-01
        • 2019-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多