摘自维基百科的上限定理定义:theorem
分布式计算机系统不可能同时提供以下三项保证:
我的想法是:
对于任何具有CA的系统,它们都可以在没有分区的情况下正常运行。当分区存在时,系统可以返回CP或AP,后者可以继续运行。由于该系统可以继续运行,它也实现了P。因此,任何CA系统也是一个CAP系统。因此,声称不可能所有CAP在一个系统中共存的说法是错误的。
发布于 2016-10-24 12:38:56
C和A表示系统在分区面前提供这些保证。因此,在分区期间放弃这些属性会使属性不保持。
CA交换仅在分区期间相关(因为没有分区,我们可以放弃P并获得CA)。那你就得做决定。
实际相关的选择是CP与AP,因为分区总是可以发生的。
发布于 2021-01-30 22:20:45
首先,关于你的假设。
实际上,CA
和CP
是相同的,因为如果CA
系统获得一个网络分区,那么它将失去Availiability
。因此,迟早会发生这种情况,因为随着节点数量的增加,您的节点中任何一个失败的可能性都会跳升到exponentially
。
您需要知道,当您忽略CAP Theorem
中的一个选项,即选择CA
和忽略或离开P
时,这将适用于您的分布式系统的整个生命周期。因此,我们无法在实际中实现CA
,而我们可以有效地实现这一点,比如,它声明它是99.999%
可获得的,所以它不能保证会有100%
可用性,但它保证它会非常小,可能会被忽略。
此外,Postgresql数据库还可以通过复制有效地实现CA
。
上面所有的数据库都试图通过保持一定程度的一致性和可用性来维护CA
。
第二,CAP定理错误吗?
有一些关于CAP Theorem
的批评点
CAP Theorem
所考虑的唯一错误是网络分区,这种故障是绝对会发生的,但这并不是唯一可能出错的事情,因为节点会崩溃,您可能会在软件中碰到错误,所以我们需要考虑更广泛的权衡。CAP Theorem
对latency
只字未提,人们更关心的是可用性。事实上,CAP Theorem
可用的系统可以被任意缓慢地响应,并且仍然可以被称为可用。如果加载一个页面需要2分钟的时间,用户不会调用我们的系统Available
。Consistency
时,系统倾向于放弃Availability
,而当有no
Partition
时,也倾向于放弃Consistency
for latency
。C
和A
in CAP Theorem
是Asymmetric
,因为牺牲Consistency
(AP系统)的系统总是这样做,而不仅仅是在有网络分区时。同样,对于牺牲Availability
(CP系统)的系统来说,它总是这样做,而不仅仅是在有网络分区的情况下。这意味着它不是一直都是Consistent
,也不是一直都是Available
。在前两种情况下,它们都是无法导航的无用系统,因为CAP Theorem
没有给我们一个系统正常运行时会发生什么的看法。https://stackoverflow.com/questions/40218605
复制相似问题