Cassandra:低可用性以获得更高的一致性

Cassandra: Low availability for higher consistency

Cassandra 提供可调的一致性。因此,如果用户要求更高级别的一致性,则在返回成功响应之前,需要按比例增加更多节点的响应。有据可查的是,更高的一致性也意味着更低的可用性。

那么,随着一致性的提高,可用性降低的原因是什么?当写入正在进行时,节点是否会被阻塞,因此无法用于其他操作?

有关其背后的理论,请查找 CAP 定理。简而言之:在网络分区的情况下,您需要在可用性(每个请求都得到无错误响应)和一致性之间进行权衡;你不能两者兼得。

如果您想要提高一致性级别,则需要增加复制因子,这样您就需要更多的 ACK 才能使 read/write 被视为成功。

如果太多机器发生故障,则不可能有足够数量的 ACK,并且操作以错误响应完成,结果系统变得不可用。

考虑您有一个三节点集群的情况。作为客户,您决定 read/write 一致性级别 quorum。这需要来自两个节点的确认。这意味着即使集群中有一个节点出现故障,您也可以 read/write 连接到您的集群。

现在您决定 read/write 保持一致 ALL。这需要所有 3 个节点进行确认。这意味着您需要所有 3 个节点都启动才能成功读取或写入。

因此,将一致性级别从 quorum 提高到 ALL 会导致集群的可用性降低。如果将 Consistency 降低到 ONE,您可以承受两个节点的下降。因此,降低一致性级别会提高集群的可用性。