这里有一个关于使用Kingsby 的 Jesper 库模拟 Cassandra 中的分区问题的精彩演讲。
我的问题是 - 对于 Cassandra,您主要关注 CAP 定理的分区部分,还是一致性也是您需要管理的一个因素?
这里有一个关于使用Kingsby 的 Jesper 库模拟 Cassandra 中的分区问题的精彩演讲。
我的问题是 - 对于 Cassandra,您主要关注 CAP 定理的分区部分,还是一致性也是您需要管理的一个因素?
Cassandra 通常被归类为 AP 系统,这意味着可用性和分区容错性通常被认为比一致性更重要。然而,现实世界中的系统很少完全属于这些类别,因此将 CAP 视为一个连续统一体更有帮助。大多数系统会努力保持一致、可用和分区容错,并且许多系统(包括 Cassandra)可以根据最重要的内容进行调整。调整复制因子和一致性级别等旋钮会对 C、A 和 P 产生巨大影响。
即使定义术语的含义也可能具有挑战性,因为各种用例对每个用例都有不同的要求。因此,与其将系统分类为 CP、AP 或其他什么,不如考虑它为根据用例调整这些属性提供的选项更有帮助。
这是一个有趣的讨论,讨论自从首次引入 CAP 定理以来这些年来事情发生了怎样的变化。
CAP代表一致性、可用性和分区容错性。一般来说,分布式系统不可能在给定点保证以上三个。
Apache Cassandra 属于 AP 系统,这意味着 Cassandra 适用于可用性和分区容错性,但不适用于一致性,但这可以通过复制因子(数据的多少副本)和一致性级别(读取和写入)进一步调整。
欲了解更多信息:https ://docs.datastax.com/en/cassandra/3.0/cassandra/dml/dmlConfigConsistency.html
有趣的是,这取决于您的 Cassandra 配置。Cassandra 最多可以是AP系统。但是,如果您将其配置为基于 Quorum 读取或写入,则它不会保持 CAP 可用(根据 CAP 定理的定义可用)并且只是P系统。
只是为了更详细地解释事物,CAP定理意味着:
如果操作 B 是在操作 A 成功完成后开始的,那么操作 B 必须看到系统处于与操作 A 完成时相同的状态,或者更新的状态(但绝不是旧状态)。
“系统中非失败 [数据库] 节点收到的每个请求都必须产生 [非错误] 响应”。某些节点能够处理请求是不够的:任何非失败节点都需要能够处理它。许多所谓的“高可用性”(即低停机时间)系统实际上并不符合这个可用性定义。
Partition Tolerance(名字严重错误)基本上意味着您正在通过可能延迟或丢弃消息的异步网络进行通信。互联网和我们所有的数据中心都有这个属性,所以你在这件事上没有任何选择。
资料来源:Awesome Martin kleppmann 的作品
CAP 定理指出数据库不能同时保证一致性、可用性和分区容错性
由于网络分区是生活的一部分,分布式数据库往往是 CP 或 AP
Cassandara 是为 AP 设计的,但您可以以可用性为代价微调一致性。
可用性:通过副本确保了它。Cassandra 通常将多个副本写入不同的集群节点(通常为 3 个)。如果一个节点不可用,数据不会丢失。
将数据写入多个节点需要时间,因为节点分散在不同的位置。在某个时间点,数据最终会变得一致。
因此,对于高可用性偏好,一致性会受到影响。
可调一致性:
对于读取或写入操作,您可以提及一致性级别。一致性级别是指需要响应读取或写入操作才能被视为完成的副本数。
对于非关键功能,您可以提供较少的一致性级别:比如 1。如果您认为一致性很重要,您可以将级别提高到 TWO、THREE 或 QUORAM(大多数副本)
假设您将关键功能的一致性级别设置为高 (QUORAM),并且大多数节点已关闭。在这种情况下,写操作将失败。
在这里,Cassandra 牺牲了可用性以保持一致性。
看看这篇文章了解更多细节。