CAP定理 - 可用性和分区容忍性(CAP theorem - Availability and P

2019-06-28 02:29发布

虽然我试图了解在CAP的“可用性”(A)和“分区容忍”(P),我发现很难理解从各种物品的说明。

我得到一个感觉,A和P可以一起去(我知道这是不是这样的,这就是为什么我无法理解!)。

在简单的语言解释,什么是A和P以及它们之间的区别?

Answer 1:

一致性是指数据在集群是相同的,所以你可以阅读或/任何节点编写,并得到了相同的数据。

可用性是指访问群集即使在集群中的一个节点出现故障的能力。

分区公差意味着群集继续发挥作用,即使存在两个节点之间的“分区”(通信中断)(在两个节点均达到,但不能通信)。

为了获得可用性和分区容忍性,你必须放弃一致性。 试想,如果你有两个节点,X和Y,在主 - 主设置。 现在,有X和Y之间的网络通信之间休假,所以他们不能同步更新。 此时,您可以:

A)允许节点不同步(放弃一致性),或

b)考虑集群处于“下降”(放弃可用性)

现有的所有组合是:

  • CA -数据是所有节点之间是一致的-只要所有节点都在线-你可以从任何节点的读/写,并确保数据是一样的,但如果你曾经开发节点之间的分区,数据会不同步的(并且将不重新同步一旦分区被解决)。
  • CP -数据是所有节点间保持一致,并变得不可用时一个节点出现故障维护分区容忍性(防止数据不同步)。
  • AP -节点保持联机,即使他们不能互相沟通,一旦分区解析将重新同步数据,但你不能保证所有的节点都具有相同的数据(过程中或分区后)

你应该注意到, CA系统不存在实际 (即使有些系统算得上是如此)。



Answer 2:

考虑与C和A平等P被一比特一错误的,而“2选自3”概念中C,A,P是误导性的。 简洁的方式,我会解释CAP定理“在分布式数据存储,在网络分区的时候,你必须选择要么一致性或可用性并不能得到既”。 较新的NoSQL系统都试图把重点放在可用性,同时传统的ACID数据库有较高的重点放在一致性。

你真的无法选择CA,网络分区是不是任何人想拥有,它是一个分布式系统只是一个不受欢迎的现实,网络可能会失败。 问题是什么权衡你挑选你的应用程序当这种情况发生。 该文章从谁第一个制定该术语的人似乎很清楚解释。



Answer 3:

下面是我如何讨论CAP,对于P特别。

CA是唯一可能的,如果你是一个单片,单台服务器的数据库OK(可能与复制,但在一个“不良区”的所有数据 - 服务器不被认为部分失败)。

如果您的问题需要向外扩展,分布式和多服务器---网络分区可能发生。 你已经要求P.几个问题我的方法是适合单服务器始终示例建立(或者,如斯通布雷克说,“分布式是筹码”)。 如果你能找到一个CA的问题,就像一个传统的非横向扩展解决方案RDBMS提供了很多的好处。

对我来说,罕见:所以我们进入到讨论AP VS CP。

你只有当你有一个分区AP和CP操作之间选择。 如果网络和硬件运行正常,你会得到你的蛋糕和熊掌兼得。

让我们讨论的AP / CP的区别。

AP - 当存在网络分区,让独立部分操作自如。

CP - 当出现网络分区,关闭的节点或禁止读取和写入等有确定性的故障。

我喜欢的架构,都可以做,因为有些问题是AP,有些是CP - 和一些数据库都可以做。 其中CP和AP解决方案,也有细微之处也。

例如,在AP的数据集,你有两个不一致读的可能性,并产生写冲突 - 这是两个不同的可能AP模式。 您的系统可以被配置为AP具有很高的读写可用性,但不允许写冲突? 或者,可以将您的AP系统接受写冲突,具有强大而灵活的解决机制? 你将需要两个最终,或者你可以选择一个系统,它只做一个?

在CP系统,有多少不可用你的小分区(单台服务器),如果有的话得到什么? 更大的复制可以提高一个CP系统不可用,系统怎样处理这些权衡?

这些都是问题要问与CP VS AP。

在这方面的一个伟大的阅读,现在是布鲁尔的“12年后”的帖子。 我相信这前进清晰的CAP辩论,并高度推荐它。

http://www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed



Answer 4:

一致性:

读保证返回最近一次写入(如ACID)对于给定的客户端。 如果在这段时间内的任何请求到达它必须等到数据同步完成跨越/在(多个)节点。


可用性:

每一个节点(如果没有失败)始终执行查询,并应始终响应请求。 不要紧,它是否返回最新副本与否。


分区容忍:

系统将继续在网络分区发生作用。


关于AP,可用性(总访问)可与(Cassendra)存在或无(RDBMS)分区容忍性

峰源



Answer 5:

一致性 - 当我们发送的读取请求,如果它返回的结果,它应该返回由客户端请求给出最近一次写。 可用性 - 您的读/写请求应该总是成功。 分区容忍性 - 当有网络分区(问题对于一些机器与对方通话)时,系统仍然应该工作。

在分布式有机会,网络分区会发生,我们无法避免CAP的“P”。 所以我们“一致性”和“可用性”之间进行选择。

http://bigdatadose.com/understanding-cap-theorem/



Answer 6:

在简单的CAP定理说明其不可能的分布式系统,同时提供所有三包:

一致性

每个节点包含在同一时间同一数据

可用性

至少有一个节点必须是可用每次提供数据

分区容忍性

该系统的故障是非常罕见的

天色每个系统只能保证最小的两个特征或者CA,AP或CP。



文章来源: CAP theorem - Availability and Partition Tolerance