CAP定理的哪一部分是Cassandra牺牲的,为什么?

时间:2013-11-25 23:42:40

标签: cassandra partitioning high-availability consistency cap-theorem

Cassandra中great talk here有一个关于模拟分区问题的Kingsby's Jesper library

我的问题是 - Cassandra你主要关注CAP定理的分区部分,还是你需要管理的一致性因素?

4 个答案:

答案 0 :(得分:17)

Cassandra通常被归类为AP系统,这意味着可用性和分区容差通常被认为比一致性更重要。然而,现实世界的系统很少整齐地落入这些类别,因此将CAP视为一个连续体更有帮助。大多数系统都会努力保持一致性,可用性和分区容忍度,并且许多(包括Cassandra)可以根据最重要的因素进行调整。像复制因子和一致性水平这样的旋钮会对C,A和P产生巨大影响。

即使定义术语的含义也很具挑战性,因为各种用例对每种用例都有不同的要求。因此,不是将系统分类为CP,AP或其他任何东西,而是根据它为适用于用例调整这些属性所提供的选项进行思考更有帮助。

Here's an interesting discussion关于CAP定理首次引入以来多年来的变化。

答案 1 :(得分:4)

CAP 代表一致性可用性分区容限。 通常,分布式系统不可能在给定的点上保证三个以上。

Apache Cassandra属于AP系统,这意味着Cassandra在 Availability Partition Tolerance 上适用,但在 Consistency 上不适用,但这可以通过复制进行进一步调整因素(数据的副本数)和一致性级别(读写)。

有关更多信息:https://docs.datastax.com/en/cassandra/3.0/cassandra/dml/dmlConfigConsistency.html

答案 2 :(得分:1)

有趣的是,这取决于您的Cassandra配置。 Cassandra最多可以是 AP 系统。但是,如果您将其配置为基于Quorum进行读取或写入,则它不会保持CAP可用(根据CAP定理的定义可用),并且仅是 P 系统。

仅详细解释CAP定理的含义:

  1. C :(线性度或强一致性)大致表示
  

如果在操作A成功完成之后开始了操作B,则   操作B必须看到系统处于与开启状态相同的状态   完成操作A,或状态为新的(但从不为旧状态)

  1. A
  

“系统中无故障的[数据库]节点收到的每个请求都必须导致[无错误]响应”。某些节点无法处理请求是不够的:任何非故障节点都必须能够处理请求。许多所谓的“高度可用”(即停机时间很短)系统实际上不符合可用性的定义。

  1. P
  

分区容差(严重命名错误)基本上意味着您正在通过异步网络进行通信,这可能会延迟或丢弃消息。互联网和我们所有的数据中心都拥有此属性,因此您在此问题上别无选择。

来源:令人敬畏的马丁·克莱普曼(Martin kleppmann)的work

答案 3 :(得分:0)

CAP 定理指出数据库不能同时保证一致性、可用性和分区容错性

由于网络分区是生活的一部分,分布式数据库往往要么是CP要么是AP

enter image description here

Cassandara 适用于 AP,但您可以以牺牲可用性为代价来微调一致性。

可用性:通过副本确保。 Cassandra 通常将多个副本写入不同的集群节点(一般为 3 个)。一个节点不可用,数据不会丢失。

将数据写入多个节点需要时间,因为节点分散在不同的位置。在某个时间点,数据最终会变得一致。

因此,对于高可用性偏好,一致性会受到影响。

可调一致性

对于读或写操作,您可以提及一致性级别。一致性级别是指需要响应读取或写入操作才能被视为完成的副本数。

对于非关键功能,您可以提供较低的一致性级别:例如 1。 如果您认为一致性很重要,您可以将级别提高到两个、三个或 QUORAM(大多数副本)

假设您将关键功能的一致性级别设置为高 (QUORAM),并且大多数节点已关闭。在这种情况下,写操作将失败。

这里 Cassandra 牺牲了一致性。

查看此 article 了解更多详情。