当我试图理解CAP中的“Availability”(A)和“Partition tolerance”(P)时,我发现很难理解各种文章的解释。
我有一种感觉,a和P可以同时出现(我知道事实并非如此,这就是我不能理解的原因!)
简单地解释一下,什么是A和P以及它们之间的区别?
当我试图理解CAP中的“Availability”(A)和“Partition tolerance”(P)时,我发现很难理解各种文章的解释。
我有一种感觉,a和P可以同时出现(我知道事实并非如此,这就是我不能理解的原因!)
简单地解释一下,什么是A和P以及它们之间的区别?
当前回答
理解CAP定理的简单方法:
In case of network partition, one needs to choose between perfect availability and perfect consistency. Picking consistency means not being able to answer a client's query as the system cannot guarantee to return the most recent write. This sacrifices availability. Picking availability means being able to respond to a client's request but the system cannot guarantee consistency, i.e., the most recent value written. Available systems provide the best possible answer under the given circumstance.
这个解释来自这篇优秀的文章。希望能有所帮助。
其他回答
一致性——当我们发送读请求时,如果它正在返回结果,它应该返回客户端请求给出的最近的写。 可用性—您的读/写请求应该总是成功的。 分区容忍度——当网络分区(某些机器相互通信的问题)发生时,系统仍然可以工作。
在分布式环境中,存在网络分区发生的可能性,我们无法避免CAP的“P”。因此,我们在“一致性”和“可用性”之间进行选择。
http://bigdatadose.com/understanding-cap-theorem/
根据上图C是断开的,但A,B, D可以继续工作。现在我们可以调用系统部分工作(分区容忍)。
假设一个特定的事务只需要a、B和d,系统可以执行它而不会产生任何不一致。
但是当C必须参与一个特定的事务时,系统可以以两种方式执行。
1.由于C不可用,A可以拒绝用户请求。
So the system has Partition-Tolerance and consistency (P,C).
But no availability, because of the rejection.
2.A可以将C接收到的消息保存在A的本地内存中,并在C连接回来时传输。
So the system has Partition-Tolerance and availability (P,A).
But no consistency.because C has not updated.
以下是我讨论CAP的方式,特别是关于P。
CA只有在单机数据库(可能有复制,但所有数据都在一个“故障块”上-服务器不被认为是部分故障)的情况下才可能使用。
如果您的问题需要向外扩展、分布式和多服务器,则可能发生网络分区。您已经需要p了,我所处理的问题中很少有适用于总是单服务器的范例(或者,如Stonebraker所说,“分布式是桌面赌注”)。如果您能找到CA问题,那么像传统的非向外扩展RDBMS这样的解决方案将提供很多好处。
对我来说,罕见:所以我们继续讨论AP和CP。
当您有分区时,只能在AP操作和CP操作之间进行选择。如果网络和硬件运行正常,你就能得到你的蛋糕并吃掉它。
让我们讨论AP / CP的区别。
AP -当有网络分区时,让独立的部分自由运行。
CP——当存在网络分区时,关闭节点或禁止读写,这样就会出现确定性故障。
我喜欢能两者兼顾的架构,因为有些问题是AP问题,有些是CP问题,而有些数据库可以两者兼顾。在CP和AP解决方案中,也有一些微妙之处。
例如,在AP数据集中,您可能同时存在不一致的读取和生成写入冲突-这是两种不同的AP模式。您的系统是否可以配置为具有高读可用性但不允许写冲突的AP ?或者您的AP系统可以接受写入冲突,具有强大而灵活的解决系统?你最终需要两者吗,或者你可以选择一个只做其中一个的系统?
在CP系统中,小分区(单个服务器)的不可用性有多少?更大的复制会增加CP系统中的不可用性,系统如何处理这些权衡?
这些都是CP和AP要问的问题。
现在在这个领域有一个很好的阅读是Brewer的“12年后”的帖子。我相信这将清晰地推进CAP辩论,并强烈推荐它。
http://www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed
我觉得任何答案都没有很好地解释分区容忍,所以只是更详细地解释一下CAP定理的意思是:
C:(线性性或强一致性)大致是指
如果操作B在操作A成功完成后启动,则 操作B必须看到系统处于与打开时相同的状态 完成操作A,或更新状态(但绝不是旧状态)。
A:
“系统中非故障[数据库]节点接收到的每个请求 必须导致[非错误]响应”。这对某些人来说是不够的 节点能够处理请求:任何未失败的节点都需要这样做 能够处理它。许多所谓的“高可用性”(即低可用性) 停机时间)系统实际上不符合这个定义 可用性。
P:
分区容忍(命名不当)基本上意味着您 通过可能延迟或中断的异步网络进行通信 消息。互联网和我们所有的数据中心都有这个特性,所以 在这件事上你真的没有选择的余地。
来源:Martin kleppmann的作品
举个例子: 卡桑德拉最多只能是AP系统。但是,如果您将其配置为基于Quorum进行读写,那么它就不会保持CAP可用性(根据CAP定理的定义可用),而只是P系统。
一致性:
对于给定的客户端,读操作保证返回最近的写操作(如ACID)。如果在此期间有任何请求,则必须等待节点之间/节点内的数据同步完成。
可用性:
每个节点(如果没有失败)总是执行查询,并且应该总是响应请求。它是否返回最新的副本并不重要。
Partition-tolerance:
当发生网络分区时,系统将继续工作。
关于AP,可用性(始终可访问)可以与(Cassendra)或 没有(RDBMS)分区容忍
图片来源