猫头鹰的深夜翻译:理解CAP定理

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定理。各类各样的系统落入这三个圆圈相交的类型。
clipboard.png分布式

文斯图或是三角形图对CAP的描述是错误的而且具备误导性。正确的理解是当须要进行网络分区时,设计师须要从可用性和线性一致性二选一。在任何一个联网的数据共享系统中,分区容忍性都是必须的。网络分区和消息的丢失是常态,必须合理的解决这个问题。简单来讲,网络分区迫使设计师必须从强一致性和强可用性直接二选一。选择一致性就意味着没法随时响应客户的查询,由于系统没法保证返回最近一次的写入结果,从而牺牲了可用性。网络分区会强制一些正常运行的节点拒绝响应客户端的请求,由于这些节点当前没法保证数据的一致性。工具

而与此相反,选择可用性意味着随时可以响应客户的请求,可是系统没法保证数据的一致性,好比最近的一次写入。高可用性的系统会尽量的提供最佳答案。spa

在正常的操做中(无网络分区的场景),CAP理论不会对可用性或一致性施加限制。设计

CAP定理负责引出关于分布式共享系统中各类折中的理论。它对于咱们加深对共享系统的理解起着重要的做用。然而,CAP的描述过于简单并具备误导性,Brewer 认可CAP理论简化了在网络分区中可用的选项。系统的设计者能够有多种方法从网络分区中恢复数据。每一个系统都应当尽力实现“基于特定应用最大程度的结合可用性和一致性”。教程

clipboard.png
想要了解更多开发技术,面试教程以及互联网公司内推,欢迎关注个人微信公众号!将会不按期的发放福利哦~

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息