根据盖定理的定义,任何分布式系统都只能满足两个条件。传统上,卡桑德拉是一个AP系统。如果我们使用像LOCAL_QUORUM这样的一致性级别,它也确保了很强的一致性。
假设我们总是必须保持分区容忍度,如果我们使用LOCAL_QUORUM和复制因子,我们可以确保强大的一致性和可用性。这是违反CAP定理还是我遗漏了什么?
PS:为了简单起见,我们只有一个数据中心。
发布于 2020-03-22 10:37:29
不,不幸的是,你不能欺骗卡桑德拉的CAP定理。卡桑德拉允许你调整一致性,但你的需要。
LOCAL_QUORUM意味着,对于读和写,客户端在返回之前等待大部分节点(例如,三个节点中的两个)确认操作。如果客户端同时使用LOCAL_QUORUM进行读写,那么它会将一致性置于可用性之上。这并不意味着它需要所有节点在任何时候都处于上升状态,但大多数节点必须是这样。在此方案中,如果群集被分区,则无法继续查看少数分区的客户端。
客户端还可以通过在一致性级别写入ALL并在ONE上读取来确定一致性的优先级,或者反之亦然,在此场景中,所有节点都必须打开。
如果客户端使用不保证读写重叠的一致性级别的组合(例如读写的ONE ),则它优先考虑可用性。通过分区集群,只要客户端能够与任何节点通信,它就可以继续进行读写。
客户端还可以混合不保证一致性的一致性级别,但不太容易出现一致性错误,例如使用LOCAL_QUORUM进行写入和使用ONE进行读取。当您希望确保写入不丢失时,此组合可能非常有用,但这并不重要,因为读取是立即更新的。
https://stackoverflow.com/questions/60797959
复制相似问题