Cassandra WRITE=ALL 和 READ=ONE 适用性



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

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

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

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

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

据我说,数字 3 LOCAL_QUORUM应该工作得更好,因为有时节点可能处于高负载或可能关闭。您的应用程序不会受到影响。

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

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

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

相关内容

最新更新