当我试图理解CAP中的“Availability”(A)和“Partition tolerance”(P)时,我发现很难理解各种文章的解释。

我有一种感觉,a和P可以同时出现(我知道事实并非如此,这就是我不能理解的原因!)

简单地解释一下,什么是A和P以及它们之间的区别?


当前回答

我将用这里提到的ATM机示例详细解释

CAP定理讨论了一致性和可用性之间的权衡,如果您的分布式系统遭受分区,您必须做出取舍。分布式系统意味着您将数据存储在多个节点中,分区意味着这些节点之间的连接以某种方式断开。

分区是分布式系统中的通信中断 两个节点之间的连接丢失或暂时延迟。分区 容忍度意味着集群必须在任何情况下继续工作 系统节点间通信中断次数。

假设我们有一家小银行,只有两台自动取款机。客户可以存、取、查余额。你必须确保余额不会低于零。这些atm机之间的连接可以通过三种方式断开

1-您要使用的ATM机不能用。你刚刚放了个坏了的牌子

2-你要用的ATM机在工作,但另一台不能工作

3-他们都在工作,但有一个网络问题,他们无法相互沟通。

这个分布式系统正在遭受分区,我们需要在可用性和一致性之间做出选择:

如果银行选择一致的设计,自动柜员机将不会处理您的请求,因为它无法更新另一台自动柜员机中的余额。 如果银行选择了可用性,你的ATM会处理请求,跟踪发生了什么,然后当连接建立时,它只是告诉其他ATM发生了什么,但余额同时会不一致。

其他回答

理解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.

这个解释来自这篇优秀的文章。希望能有所帮助。

我将用这里提到的ATM机示例详细解释

CAP定理讨论了一致性和可用性之间的权衡,如果您的分布式系统遭受分区,您必须做出取舍。分布式系统意味着您将数据存储在多个节点中,分区意味着这些节点之间的连接以某种方式断开。

分区是分布式系统中的通信中断 两个节点之间的连接丢失或暂时延迟。分区 容忍度意味着集群必须在任何情况下继续工作 系统节点间通信中断次数。

假设我们有一家小银行,只有两台自动取款机。客户可以存、取、查余额。你必须确保余额不会低于零。这些atm机之间的连接可以通过三种方式断开

1-您要使用的ATM机不能用。你刚刚放了个坏了的牌子

2-你要用的ATM机在工作,但另一台不能工作

3-他们都在工作,但有一个网络问题,他们无法相互沟通。

这个分布式系统正在遭受分区,我们需要在可用性和一致性之间做出选择:

如果银行选择一致的设计,自动柜员机将不会处理您的请求,因为它无法更新另一台自动柜员机中的余额。 如果银行选择了可用性,你的ATM会处理请求,跟踪发生了什么,然后当连接建立时,它只是告诉其他ATM发生了什么,但余额同时会不一致。

一致性——当我们发送读请求时,如果它正在返回结果,它应该返回客户端请求给出的最近的写。 可用性—您的读/写请求应该总是成功的。 分区容忍度——当网络分区(某些机器相互通信的问题)发生时,系统仍然可以工作。

在分布式环境中,存在网络分区发生的可能性,我们无法避免CAP的“P”。因此,我们在“一致性”和“可用性”之间进行选择。

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

Brewer's keynote, the Gilbert paper, and many other treatments, places C, A and P on an equal footing as desirable properties of an implementation and effectively say 'choose two!'. However, this is often considered to be a misleading presentation, since you cannot build - or choose! - 'partition tolerance': your system either might experience partitions or it won't. CAP is better understood as describing the tradeoffs you have to make when you are building a system that may suffer partitions. In practice, this is every distributed system: there is no 100% reliable network. So (at least in the distributed context) there is no realistic CA system. You will potentially suffer partitions, therefore you must at some point compromise C or A.

https://github.com/henryr/cap-faq#10-why-do-some-people-get-annoyed-when-i-characterise-my-system-as-ca

以下是我讨论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