CAP定理是用来提醒设计师在设计联网的共享数据系统时需要作出的权衡。CAP理论影响了很多分布式数据系统的设计。这几年来,CAP一直被广泛的误解为是用于对数据库进行分类的工具。也流传着许多关于CAP的错误的信息。很多关于CAP博客的观点极有可能是错误的。
你需要进一步的了解CAP从而去分辨出关于CAP的错误的信息。
CAP定理适用于存储状态的分布式系统。在2000年的PODC上,Eric Brewer推测在任何联网的数据共享系统中,一致性、可用性和分区容忍性之间本质上存在折中。在2002年,MIT的Seth Gilbert和Nancy Lynch发表了对Eric Brewer推论的证明。这个理论说明网络数据共享系统只能确保或是强有力的支持一下三个属性中的两个:
- 一致性:确保分布式集群中的每一个节点都返回相同的,最近成功写入的数据。一致性意味着客户对数据的视图是一样的。有各种各样的一致性模型。而CAP中的一致性是指线性化或是顺序一致性,这是一种强一致性。
- 可用性:每一个非故障节点能够在一定时间内对客户端的请求作出相应。这里的重点在于每一个。为了实现可用性,在任意一个网络分区的节点都必须能够在一定时间内作出响应。
- 分区容忍性:尽管存在网络分区,但是系统依然能够继续运行并且保证一致性。网络分区已经成了生活中的常态。实现分区容忍性的分布式系统能够保证分区能够正常的从故障中恢复。
ACID中的C和A与CAP定理中的C和A是不一样的概念。
CAP定理将系统划分为三类:
- CP(一致性和分区容忍性):乍一看来,CP系统令人困惑。换句话说,一个系统具有一致性和分区容忍性,但是永远都不可用。CP被认为是在网络分区的场景下牺牲可用性的一类系统。
- CA(一致性和可用性):CA系统是指没有网络分区并实现一致性和可用性的数据库。通常认为一个单节点的数据库服务器可以归类为CA。单节点的数据库服务器永远都不需要处理分区容忍性,因此被认为是一个CA系统。这个理论的漏洞在于单节点的数据库不是联网共享数据的分布式系统,根本就不适用于CAP。
- AP(可用性和分区容忍性):这是具有可用性和分区容忍性但是不保证一致性的系统。
通常用文斯图或是一个三角形来可视化CAP定理。各种各样的系统落入这三个圆圈相交的类型。
文斯图或是三角形图对CAP的描述是错误的并且具有误导性。正确的理解是当需要进行网络分区时,设计师需要从可用性和线性一致性二选一。在任何一个联网的数据共享系统中,分区容忍性都是必须的。网络分区和消息的丢失是常态,必须合理的解决这个问题。简单来说,网络分区迫使设计师必须从强一致性和强可用性直接二选一。选择一致性就意味着无法随时响应客户的查询,因为系统无法保证返回最近一次的写入结果,从而牺牲了可用性。网络分区会强制一些正常运行的节点拒绝响应客户端的请求,因为这些节点当前无法保证数据的一致性。
而与此相反,选择可用性意味着随时能够响应客户的请求,但是系统无法保证数据的一致性,比如最近的一次写入。高可用性的系统会尽可能的提供最佳答案。
在正常的操作中(无网络分区的场景),CAP理论不会对可用性或一致性施加限制。
CAP定理负责引出关于分布式共享系统中各种折中的理论。它对于我们加深对共享系统的理解起着重要的作用。然而,CAP的描述过于简单并具有误导性,Brewer 承认CAP理论简化了在网络分区中可用的选项。系统的设计者可以有多种方法从网络分区中恢复数据。每个系统都应当尽力实现“基于特定应用最大程度的结合可用性和一致性”。
想要了解更多开发技术,面试教程以及互联网公司内推,欢迎关注我的微信公众号!将会不定期的发放福利哦~
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。