有一个great talk here关于用Kingsby's Jesper library在Cassandra中模拟分区问题。我的问题是--对于Cassandra,你主要关心的是CAP定理的分区部分,还是一致性也是你需要管理的一个因素?
kmbjn2e31#
Cassandra通常被归类为AP系统,这意味着可用性和分区容错通常被认为比一致性更重要。然而,真实的世界的系统很少完全属于这些类别,因此将CAP视为一个连续体更有帮助。大多数系统都会努力保持一致性,可用性和分区容错,许多(包括Cassandra)可以根据最重要的内容进行调整。调整复制因子和一致性级别等旋钮可以对C、A和P产生巨大影响。甚至定义这些术语的含义也是一个挑战,因为不同的用例对每个用例都有不同的要求。因此,与其将系统分类为CP,AP或其他任何东西,不如根据它提供的选项来考虑如何根据用例调整这些属性更有帮助。Here's an interesting discussion关于自CAP定理首次引入以来的几年中事情发生了怎样的变化。
4ngedf3f2#
CAP代表一致性、可用性和分区容差,一般来说,分布式系统不可能在某个时间点保证三个以上。
Apache Cassandra福尔斯AP系统,这意味着Cassandra适用于可用性和分区容差,但不适用于一致性,但这可以通过复制因子(数据的副本数量)和一致性级别(读写)进一步调整。更多信息:https://docs.datastax.com/en/cassandra/3.0/cassandra/dml/dmlConfigConsistency.html
ezykj2lf3#
有趣的是,这取决于你的Cassandra配置。Cassandra最多可以是AP系统。但如果你配置它基于Quorum进行读写,那么它不会保持CAP可用(根据CAP定理的定义可用),而只是P系统。为了更详细地解释CAP定理的含义:1.C:(线性化或强一致性)大致表示如果操作B在操作A成功完成后启动,则操作B必须看到系统处于与操作A完成时相同的状态,或更新的状态**(但绝不会是旧状态)**。1.A:“系统中非故障[数据库]节点接收的每个请求都必须导致[非错误]响应”。对于某些节点来说,能够处理请求是不够的:许多所谓的“高度可用”(即,低停机时间)系统实际上不满足可用性的这个定义。1.PPartition Tolerance(命名错误)基本上意味着您通过异步网络进行通信,可能会延迟或丢弃消息。互联网和我们所有的数据中心都具有此属性,因此您在此问题上没有任何选择。来源:Awesome Martin kleppmann's work
3条答案
按热度按时间kmbjn2e31#
Cassandra通常被归类为AP系统,这意味着可用性和分区容错通常被认为比一致性更重要。然而,真实的世界的系统很少完全属于这些类别,因此将CAP视为一个连续体更有帮助。大多数系统都会努力保持一致性,可用性和分区容错,许多(包括Cassandra)可以根据最重要的内容进行调整。调整复制因子和一致性级别等旋钮可以对C、A和P产生巨大影响。
甚至定义这些术语的含义也是一个挑战,因为不同的用例对每个用例都有不同的要求。因此,与其将系统分类为CP,AP或其他任何东西,不如根据它提供的选项来考虑如何根据用例调整这些属性更有帮助。
Here's an interesting discussion关于自CAP定理首次引入以来的几年中事情发生了怎样的变化。
4ngedf3f2#
CAP代表一致性、可用性和分区容差,一般来说,分布式系统不可能在某个时间点保证三个以上。
Apache Cassandra福尔斯AP系统,这意味着Cassandra适用于可用性和分区容差,但不适用于一致性,但这可以通过复制因子(数据的副本数量)和一致性级别(读写)进一步调整。
更多信息:https://docs.datastax.com/en/cassandra/3.0/cassandra/dml/dmlConfigConsistency.html
ezykj2lf3#
有趣的是,这取决于你的Cassandra配置。Cassandra最多可以是AP系统。但如果你配置它基于Quorum进行读写,那么它不会保持CAP可用(根据CAP定理的定义可用),而只是P系统。
为了更详细地解释CAP定理的含义:
1.C:(线性化或强一致性)大致表示
如果操作B在操作A成功完成后启动,则操作B必须看到系统处于与操作A完成时相同的状态,或更新的状态**(但绝不会是旧状态)**。
1.A:
“系统中非故障[数据库]节点接收的每个请求都必须导致[非错误]响应”。对于某些节点来说,能够处理请求是不够的:许多所谓的“高度可用”(即,低停机时间)系统实际上不满足可用性的这个定义。
1.P
Partition Tolerance(命名错误)基本上意味着您通过异步网络进行通信,可能会延迟或丢弃消息。互联网和我们所有的数据中心都具有此属性,因此您在此问题上没有任何选择。
来源:Awesome Martin kleppmann's work