CAP定理背后的原因是什么?


21

http://en.wikipedia.org/wiki/CAP_theorem

http://www.cs.berkeley.edu/~brewer/cs262b-2004/PODC-keynote.pdf

我想是不是非常简单,为什么只有两个

  1. 一致性
  2. 可用性
  3. 分区容限

可以容纳任何给定的分布式数据库系统。这个猜想被证实,但有没有看出为什么一个简单的方法可能是,这可能持有?

我不是在寻找证明,而是一种理解为什么该定理可能有意义的好方法。这是什么原因?

Answers:


23

好的,让我们假设您有一个分布式数据库。假设您在俄勒冈州有一个节点,在加利福尼亚州有一个。CAP理论表明,设置此类数据库时会遇到问题。

例如,如果您从一个数据库查询数据,则该数据必须与另一个数据库中的数据相同。这样可以确保您在一个数据库中拥有的任何值都可以保证在另一个数据库中(CAP理论的一致性)。这样做可以使您更新一个数据库中的数据并从另一个数据库中查询它,从而获得相同的结果。

俄勒冈州的一台计算机更新数据,将数据传输到加利福尼亚

当我们在Oregon节点中更新数据时,数据将发送到California节点,以便数据库保持一致。为了真正保持一致性,我们必须确保两个数据库都获得更新,然后才允许其中一个真正保存数据(使用分布式事务的两阶段提交)。换句话说,如果加利福尼亚数据库由于某种原因(例如硬盘驱动器故障)而无法保存数据,则俄勒冈州的数据库将不会保存数据并使事务失败。

当我们要具有高可用性时,就会出现上述分布式事务的问题。在上面的这种情况下,尝试使两个数据库同步的过程非常缓慢。(想像一下,我们必须将数据从俄勒冈州发送到加利福尼亚州,确保到达该位置,并确保两个数据库都对数据进行锁定,等等。)当我们想要一个即使在执行过程中也能快速响应的系统时,这会导致重大问题高需求时代。(这是CAP定理的可用性。)

通常,为了确保高可用性,我们要做的是使用复制而不是分布式事务。因此,我们不能保证加利福尼亚可以接受数据,而是继续将其存储在俄勒冈州节点中,然后在处理数据时将数据发送到加利福尼亚。这保证了我们始终可以存储数据,无论加利福尼亚是否准备好存储数据。

加利福尼亚节点读取数据时,俄勒冈节点将更新数据。 后来,数据被移至加利福尼亚

这样可以提高可用性,但要以一致性为代价。看看,如果有人在俄勒冈州更新了数据,然后(同时)有人在加利福尼亚州读取了数据,则他们没有获取新数据-数据库不再一致。实际上,直到俄勒冈州将数据发送到加利福尼亚之后,它们才会保持一致!

所以,这就是可用性-vs-一致性的权衡。

分区容限是CAP理论的第三个方面。在这种情况下,分区是指数据库(或其他分布式系统)可以分为几个部分,并且仍然可以正常运行的想法。

问题是,当两个数据库都正常运行,但是从俄勒冈到加利福尼亚的链接断开时,会发生什么?

读取加利福尼亚节点时,将更新俄勒冈州。 节点之间的网络被切断。

如果我们在俄勒冈州更新数据库,则需要以一种或另一种方式(分布式事务或复制)将数据发送到加利福尼亚。但是,如果两者之间的链接断开了,则说明系统已分区并且数据库不再链接在一起。

发生这种情况时,您的选择是停止以可用性为代价允许更新(保持一致性),或者以一致性为代价允许更新(保持可用性)。

如您所见,分区容忍度在一致性和可用性之间建立了直接的权衡。


显然还不止如此,但是那是有关分布式系统的这三个主要方面如何相互支持和相互对抗的几个例子。 朱利安·布朗(Julian Browne)对CAP理论解释是学习更多内容的好地方。


Remus Rusanu的相关答案
Nick Chammas

有了更漂亮的照片!
理查德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.