【发布时间】:2021-07-19 22:50:41
【问题描述】:
Cassandra 提供可调的一致性。因此,如果用户要求更高级别的一致性,那么在返回成功响应之前,相应地需要更多节点响应。有据可查的是,更高的一致性也意味着更低的可用性。
那么随着一致性的提高,可用性降低的原因是什么?一个节点在写入过程中是否会被阻塞,从而无法用于其他操作?
【问题讨论】:
标签: cassandra
Cassandra 提供可调的一致性。因此,如果用户要求更高级别的一致性,那么在返回成功响应之前,相应地需要更多节点响应。有据可查的是,更高的一致性也意味着更低的可用性。
那么随着一致性的提高,可用性降低的原因是什么?一个节点在写入过程中是否会被阻塞,从而无法用于其他操作?
【问题讨论】:
标签: cassandra
假设您有一个三节点集群。作为客户端,您决定以一致性级别quorum 进行读/写。这需要两个节点的确认。这意味着即使集群中的一个节点出现故障,您也可以读取/写入集群。
现在你决定读/写一致性ALL。这需要所有 3 个节点进行确认。这意味着您需要所有 3 个节点都启动才能成功读取或写入。
因此,将一致性级别从 quorum 提高到 ALL 会导致集群可用性降低。如果将一致性降低到ONE,您可以承受两个节点的停机。因此,降低一致性级别会提高集群的可用性。
【讨论】:
对于它背后的理论,寻找 CAP 定理。简而言之:在网络分区的情况下,您需要在可用性(每个请求都得到一个非错误响应)和一致性之间进行权衡;你不能两者兼得。
如果您想要提高一致性级别,则需要增加复制因子,以便需要更多的 ACK 才能使读/写被视为成功。
如果太多机器发生故障,则不可能有足够数量的 ACK,操作完成并返回错误响应,因此系统变得不可用。
【讨论】: