http://www.cs.berkeley.edu/~brewer/cs262b-2004/PODC-keynote.pdf
我认为这不是很简单,为什么只有两个
>一致性
>可用性
>分区容差
可以容纳任何给定的分布式数据库系统.这个猜想被证明了,但有没有更容易的方法来看看为什么这可能会持有?
我不是在寻找证据,只是理解为什么这个定理可能有意义的好方法.是什么原因?
解决方法
例如,如果从一个数据库查询数据,则需要与另一个数据库中的数据相同.这可以确保您在一个数据库中拥有的任何值都保证在另一个数据库中(CAP理论的一致性).
这样做可以让您更新一个数据库中的数据并从另一个数据库中查询,从而获得相同的结果.
当我们更新Oregon节点中的数据时,数据将被发送到California节点,以便数据库保持一致.为了真正保持一致性,我们必须确保两个数据库在允许真正保存数据之前获得更新(使用分布式事务进行两阶段提交).换句话说,如果加利福尼亚数据库由于某种原因(例如硬盘驱动器故障)无法保存数据,则Oregon中的数据库将不会保存数据并且将使事务失败.
当我们想要具有高可用性时,上述分布式事务的问题就出现了.在上面的这种情况下,尝试使两个数据库同步的过程是一个非常非常缓慢的过程. (想象一下,我们必须将数据从俄勒冈州发送到加利福尼亚州,确保它到达那里,确保两个数据库都有数据锁定等.)当我们想要一个快速响应的系统时,这会导致严重问题需求旺盛的时期. (这是CAP定理的可用性.)
通常,我们为确保高可用性而采取的措施是使用复制而不是分布式事务.因此,我们只是继续将它存储在Oregon节点中,然后在我们解决它时将数据发送到加利福尼亚,而不是保证加利福尼亚可以接受数据.这保证了我们始终可以存储数据,无论加利福尼亚是否已准备好存储数据.
这提高了可用性,但是以一致性为代价.请注意,如果有人更新了俄勒冈州的数据,然后有人(同时)在加利福尼亚州读取数据,他们就没有获得新数据 – 数据库不再一致.事实上,在俄勒冈州将数据发送到加利福尼亚之前,它们并不一致!
所以,这就是可用性-vs-一致性权衡.
分区容差是CAP理论的第三个方面.在这种情况下,分区是指数据库(或其他分布式系统)可以分解为单独的部分并仍能正常运行的想法.
问题变成,当两个数据库正确运行时会发生什么,但从俄勒冈州到加利福尼亚的链接被切断了?
如果我们更新俄勒冈州的数据库,我们需要以某种方式将数据传输到加利福尼亚(分布式事务或复制).但是,如果两者之间的链接被切断,则系统已经被分区,数据库不再链接在一起.
发生这种情况时,您的选择是停止以可用性为代价允许更新(以保持一致性)或以一致性为代价允许更新(以维持可用性).
如您所见,分区容差在一致性和可用性之间创建了直接的权衡.
显然还有更多,但这些是关于分布式系统的这三个主要方面如何相互作用和相互作用的几个例子. Julian Browne’s解释CAP理论是一个学习更多的好地方.