什么是CAP定理?

举报
dayu_dls 发表于 2021/05/29 17:00:09 2021/05/29
【摘要】 CAP定理数据库可以在网络分区期间提供强一致性和系统可用性。人们普遍认为这种组合是不可能的,是基于对CAP定理的误解。什么是CAP定理?2000 年,Eric Brewer 推测分布式系统不能同时提供以下所有三个理想属性:一致性:读取看到所有以前完成的写入。可用性:读取和写入总是成功。分区容错性:即使网络故障阻止某些机器与其他机器进行通信,也能保持有保证的属性。2002 年,吉尔伯特和林奇在...

CAP定理

数据库可以在网络分区期间提供强一致性和系统可用性。人们普遍认为这种组合是不可能的,是基于对CAP定理的误解。

什么是CAP定理?

2000 年,Eric Brewer 推测分布式系统不能同时提供以下所有三个理想属性:

  • 一致性:读取看到所有以前完成的写入。
  • 可用性:读取和写入总是成功。
  • 分区容错性:即使网络故障阻止某些机器与其他机器进行通信,也能保持有保证的属性。

2002 年,吉尔伯特和林奇在异步和部分同步网络模型中证明了这一点,因此现在通常称为CAP定理。

鲁尔最初描述这种不可能性结果作为强迫的“两头在外三个”选择CAP性能,留下三个可行的设计方案:CP,AP和CA。然而,进一步的考虑表明CA并不是一个真正的连贯选项,因为根据定义,不能容忍分区的系统将被迫在分区期间放弃一致性或可用性。因此,该定理的解释是:在网络分区期间,分布式系统必须选择一致性或可用性。


选择可用性是什么意思?

我们考虑一个AP数据库。在这样的数据库中,即使节点之间的网络连接不可用,读取和写入也总是会成功。如果可能的话,这些看起来肯定是理想的属性!然而,缺点是明显的。想象一个简单的分布式数据库,它由两个节点和一个网络分区组成,使它们无法通信。要可用,两个节点中的每一个都必须继续接受来自客户端的写入

_images/AP_Partition.png
当然,由于分区使通信无法进行,一个节点上的写入无法被另一个节点看到。这样的系统现在只是名义上的“数据库”。只要分区持续,系统就完全等同于两个独立的数据库,它们的内容甚至不需要关联,更不用说一致了

困惑在哪里?

关于 CAP 定理的混淆通常涉及对可用性属性的解释。CAP的可用性意味着,即使在分区时,所有节点仍然能够读取和写入。保持部分(但不是全部)节点能够读写的系统在CAP意义上不是可用的,即使它仍然对客户端可用并满足其高可用性的SLA 。分布式系统的设计目标是确保即使某些机器出现故障或无法与网络可靠通信,系统和连接到它的应用程序仍能正常运行。这是通常理解的高可用性,但它不是CAP意义上的可用性,因为系统在受影响的机器上将不可用

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。