首页 > 解决方案 > Cassandra WRITE=ALL 和 READ=ONE 适用性

问题描述

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

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

标签: cassandrareplicationavailability

解决方案


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

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


推荐阅读