具有一致性级别和复制因子的 Cassandra 如何处理 CAP 定理?
How Cassandra with Consistency Level and Replication Factor handles CAP theorem?
根据CAP theorem的定义,任何分布式系统只能满足2个条件。传统上,Cassandra 是一个 AP 系统。如果我们使用像 LOCAL_QUORUM 这样的一致性级别,它也可以确保强一致性。
假设我们总是要保持Partition Tolerance,如果我们使用LOCAL_QUORUM和Replication factor,我们可以保证很强的Consistency和Availability。它是否违反 CAP 定理,还是我遗漏了什么?
PS:为简单起见,假设我们只有一个数据中心。
不,不幸的是你不能用 Cassandra 欺骗 CAP 定理。但是,Cassandra 允许您根据需要调整一致性。
LOCAL_QUORUM
意味着对于读取和写入,客户端在返回之前等待大多数(例如三个中的两个)节点确认操作。如果客户端对读取和写入都使用 LOCAL_QUORUM
,则它会将一致性优先于可用性。这并不意味着它需要所有节点始终处于运行状态,但大多数节点必须处于运行状态。在这种情况下,如果集群被分区,看到少数分区的客户端将无法继续。
客户端还可以通过在一致性级别 ALL
写入并在 ONE
读取,反之亦然 - 但在这种情况下,所有节点都必须启动。
如果客户端使用不保证读取和写入重叠的一致性级别组合,例如读取和写入都使用 ONE
,它会优先考虑可用性。有了分区集群,客户端只要能和任意节点通信就可以继续读写。
客户端还可以混合不保证一致性但不太容易出现一致性错误的一致性级别,例如使用 LOCAL_QUORUM
进行写入,使用 ONE
进行读取。当您想要确保写入不会丢失但读取是否立即最新并不重要时,这种组合会很有用。
根据CAP theorem的定义,任何分布式系统只能满足2个条件。传统上,Cassandra 是一个 AP 系统。如果我们使用像 LOCAL_QUORUM 这样的一致性级别,它也可以确保强一致性。
假设我们总是要保持Partition Tolerance,如果我们使用LOCAL_QUORUM和Replication factor,我们可以保证很强的Consistency和Availability。它是否违反 CAP 定理,还是我遗漏了什么?
PS:为简单起见,假设我们只有一个数据中心。
不,不幸的是你不能用 Cassandra 欺骗 CAP 定理。但是,Cassandra 允许您根据需要调整一致性。
LOCAL_QUORUM
意味着对于读取和写入,客户端在返回之前等待大多数(例如三个中的两个)节点确认操作。如果客户端对读取和写入都使用 LOCAL_QUORUM
,则它会将一致性优先于可用性。这并不意味着它需要所有节点始终处于运行状态,但大多数节点必须处于运行状态。在这种情况下,如果集群被分区,看到少数分区的客户端将无法继续。
客户端还可以通过在一致性级别 ALL
写入并在 ONE
读取,反之亦然 - 但在这种情况下,所有节点都必须启动。
如果客户端使用不保证读取和写入重叠的一致性级别组合,例如读取和写入都使用 ONE
,它会优先考虑可用性。有了分区集群,客户端只要能和任意节点通信就可以继续读写。
客户端还可以混合不保证一致性但不太容易出现一致性错误的一致性级别,例如使用 LOCAL_QUORUM
进行写入,使用 ONE
进行读取。当您想要确保写入不会丢失但读取是否立即最新并不重要时,这种组合会很有用。