如何理解CAP定理的“可用性”?

时间:2012-04-09 05:10:39

标签: database

我不知道这是否是一个正确的问题。

众所周知,在CAP定理中,“A”表示“可用性”。在wikipedia上,“可用性”的解释是:

Availability: a guarantee that every request receives a response about whether it was successful or failed

但是,从工程角度来看,没有 ABSOLUTE 可用性。我们只能说系统的可用性是5'9'(99.999%),甚至是8'9',但我们不能说系统的可用性是100%,100%可用系统实际上不会退出,即使系统有数百万个重复节点,对吧?

CAP定理证明没有系统可以同时满足3个要求。我的问题是,如果一个系统声称同时满足“A”和“P”,那么这个“A”的准确含义是什么? 6'9'甚至更高?

4 个答案:

答案 0 :(得分:13)

我建议你避免使用维基百科,而是阅读Gilbert and Lynch证明中提供的定义。

  

“系统中非故障节点收到的每个请求都必须   导致回复“

以及回答你问题的相关脚注

  

“Brewer最初只需要几乎所有请求才能收到   响应。因为允许概率可用性不会改变   当任意故障发生时,我们要求简单   100%可用性“

因此,如果几乎所有请求都收到响应或我们允许发生任意故障,则可以认为系统具有高可用性。

答案 1 :(得分:2)

CAP中的可用性意味着“所有(非故障)节点可用于查询”。它与维基百科链接无关,这与“高可用性”有关。

例如,PAXOS算法是CP(无可用性属性),因为少数节点在分区期间“关闭”。但如果您需要一致性,则PAXOS被视为“高可用性”。

相反,单节点MySQL数据库服务器是CA(具有CAP可用性属性)。它可以重新启动(并在BIOS检查,文件系统检查,数据库修复等时停机数小时)。完成启动后,它会再次开始响应查询。这是完美的可用性(根据CAP定理),但“高可用性”的可用性很差。

答案 2 :(得分:1)

我同意Mark Burgess:The CAP Theorem Is Not a Theorem。 Brewer推测的CAP属性根本没有明确定义,足以提供严格的数学证明。因此,可用性很难“理解”的原因可能是因为它在这种情况下根本没有明确定义。

答案 3 :(得分:0)

Coda Hale

的有趣观点

选择可用性的系统将通过继续为所有请求提供服务来处理网络分区,即使它们导致不一致(例如,不同网络分区中的节点都接受可能存在冲突的写入)。

选择一致性的系统将限制网络分区期间的合法操作量(例如,不接受写入,因为它们可能会导致冲突/不一致)。

无法同时选择两者。

我认为一个假设的系统也可以选择在网络分区期间崩溃,但这似乎不是一个非常实用的设计......