cassandra - 具有一致性级别和复制因子的 Cassandra 如何处理 CAP 定理?
问题描述
根据CAP 定理的定义,任何分布式系统只能满足两个条件。传统上,Cassandra 是一个 AP 系统。如果我们使用像 LOCAL_QUORUM 这样的一致性级别,它也可以确保强一致性。
假设我们必须始终保持 Partition Tolerance,如果我们使用 LOCAL_QUORUM 和 Replication factor,我们可以确保强大的一致性和可用性。它违反 CAP 定理还是我遗漏了什么?
PS:为简单起见,我们只有一个数据中心。
解决方案
不,不幸的是你不能用 Cassandra 欺骗 CAP 定理。但是,Cassandra 允许您根据需要调整一致性。
LOCAL_QUORUM
意味着对于读取和写入,客户端在返回之前等待大多数(例如三个中的两个)节点确认操作。如果客户端LOCAL_QUORUM
同时用于读取和写入,它会优先考虑一致性而不是可用性。这并不意味着它需要所有节点始终处于运行状态,但大多数节点必须处于运行状态。在这种情况下,如果集群被分区,看到少数分区的客户端将无法继续。
客户端还可以通过在一致性级别写入ALL
和在 读取来确定一致性的优先级ONE
,反之亦然——但在这种情况下,所有节点都必须启动。
如果客户端使用不能保证读取和写入重叠的一致性级别组合,例如ONE
对于读取和写入,它会优先考虑可用性。使用分区集群,客户端可以继续读取和写入,只要它可以与任何节点通信。
客户端还可以混合不保证一致性但不易受一致性错误影响的一致性级别,例如LOCAL_QUORUM
用于写入和ONE
读取。当您想确保写入不会丢失时,这种组合可能很有用,但读取立即更新并不重要。
推荐阅读
- xgboost - XGBoost 中 10 倍 CV 的层次聚类
- antd - 更改占位符颜色 antdesign datepicker
- javascript - 我正在寻找一种在 selectedIndex 未知时设置“selectBox”的方法
- android - 如何记录用户关闭应用程序的时间
- rust - 防止在运行测试时优化掉未使用的静态函数
- jenkins - 我想知道 python 并行构建(Jenkins)
- javascript - 如何使用 setState() 的回调?
- javascript - javascript对象键错位
- python - 如何根据参考值进行过滤?django
- rust - impl Into 所有类型的Impl Into特征