分布式系统CAP定理

转载 2016年05月31日 10:58:19

CAP定理的常规解释是任何分布式系统只能在一致性(Consitency),可用性(Availability)和分区容忍性(Partition Tolerance)中三选二。

从问题出发

假设我们用一台服务器A对外提供存储服务,为了避免这台服务器宕机导致服务不可用,我们又在另外一台服务器B上运行了同样的存储服务。每次用户在往服务器A写入数据的时候,A都往服务器B上写一份,然后再返回客户端。一切都运行得很好,用户的每份数据都存了两份,分别在A和B上,用户访问任意一台机器都能读取到最新的数据。 
这时不幸的事情发生,A和B之间的网络断了导致A和B无法通信,也就是说网络出现了分区,那么用户在往服务器A写入数据的时候,服务器A无法将该数据写入到服务器B。这时,服务器A就必须要做出一个艰难的选择:

  • 要么选择一致性(C)而牺牲可用性(A):为了保证服务器A和B上的数据是一致的,服务器A决定暂停对外提供数据写入服务,从而保证了服务器A和B上的数据是一致,但是牺牲了可用性。 
    注意:这里的可用性不是我们通常所说的高可用性(比如,服务器宕机导致服务不可用),而是指服务器虽然活着,但是却不能对外提供写入服务。
  • 要么选择可用性(A)而牺牲一致性(C):为了保证服务不中断,服务器A先把数据写入到了本地,然后返回客户端,从而让客户端感觉数据已经写入了。这导致了服务器A和B上的数据就不一致了。

这就是CAP定理试图解释的问题。

分布式系统无法放弃网络分区容忍性

网络分区准确地说是指两台机器无法在期望的时间内完成数据交换。这不仅仅是指两台机器之间的网络完全断开了,还可能有其他情况产生网络分区,比如对方机器宕机了,网络延时等情况。因此,在分布式系统中,通常是无法放弃Partition Tolerance的,也就只能在CP和AP之间做选择了。如果有个分布式系统号称是CA的,那一定是扯淡。

可用性和一致性的选择

可用性和一致性之间的选择不是非此即彼的,而是根据业务的需求在它们两者之间做妥协。比如,我们可以放弃对强一致性的追求,让其变成最终一致性,也就是说当服务器A不能把数据传给服务器B时,它先将数据缓存在其本地,等到网络恢复以后再将数据传给服务器B。这样,服务还是可用的,只是在一定的时间窗口内两者的数据是不一致的。

对网络分区的处理

对网络分区的处理有以下几个步骤: 
1. 检测网络是否出现分区 
2. 当分区出现了,进入分区模式并限制某些操作 
3. 当网络恢复后,启动分区恢复

handling partition 
从图中可见(图片来自 InfoQ),系统最开始是处于一致的状态S,然后分区出现了,每个分区的状态分别变成了S1和S2(这是为了保证系统的可用性,每个分区继续响应客户端的请求)。接着,网络恢复后开始分区合并,将S1和S2状态合并成为新的一致状态S‘。是不是看起来和代码版本管理很类似?

小结

其实CAP定理本身很简单,或许被人为地搞复杂了。简单地说,就是分布式系统中,架构师只能在一致性和可用性之间妥协。而复杂的是如何根据业务系统的需要在二者之间取舍,以及如何应对网络出现分区。


分布式系统CAP理论

CAP理论在互联网界有着广泛的知名度,知识稍微宽泛一点的工程师都会把其作为衡量系统设计的准则。大家都非常清楚地理解了CAP:任何分布式系统在可用性、一致性、分区容错性方面,不能兼得,最多只能得其二,因...
  • xiaofei0859
  • xiaofei0859
  • 2016年12月09日 15:14
  • 582

科普一下,什么是分布式架构设计中的CAP原理?

大家在看书或者参加会议的时候,对于数据架构设计的时候,一定经常听到CAP原理,比如根据CAP原理,对于分布式设计系统,只能做到数据的最终一致性而不是实时事务的一致性;那么,这些行家或者架构师常挂在嘴边...
  • chancein007
  • chancein007
  • 2016年12月18日 23:03
  • 2781

分布式系统的CAP定理

在理论计算机科学中,CAP定理(CAP theorem),又被称作布鲁尔定理(Brewer’s theorem),它指出对于一个分布式计算系统来说,不可能同时满足以下三点:1. 一致性(Consist...
  • apexlj
  • apexlj
  • 2015年11月15日 16:31
  • 532

分布式系统之二:CAP定理

本博文主要介绍CAP定理的起源、定义、意义与影响,以及ACID模型和BASE模型 CAP定理        CAP定理(Consistency,Availability,Partition Tol...
  • sinat_16596967
  • sinat_16596967
  • 2014年07月19日 14:18
  • 760

分布式系统的思考及CAP理论

在讨论常见架构前,先简单了解一下CAP理论: CAP是Consistency、Availablity和Partition-tolerance的缩写。分别是指: 1.一致性(Consistency)...
  • lavorange
  • lavorange
  • 2016年09月09日 20:36
  • 2898

谈谈对CAP定理的理解

谈谈对CAP定理的理解 CAP定理的常规解释是任何分布式系统只能在一致性(Consitency),可用性(Availability)和分区容忍性(Partition Tolerance)中三选二...
  • jewes
  • jewes
  • 2015年02月04日 22:11
  • 4562

CAP原理的证明

CAP概述 C: Consistency 一致性 A: Availability 可用性 P:Partition Tolerance分区容错性 CAP理论的核心是:一个...
  • abcd1f2
  • abcd1f2
  • 2015年08月24日 11:27
  • 401

【分布式设计与开发3】什么是分布式架构设计中的CAP原理

分布式系统;CAP原理;架构设计 一、引言 在2000年7月ACM (美国计算机协会) 组织的PODC (PrinciplesofDistributedComputing分布式计算原理) 会议上,UC...
  • truelove12358
  • truelove12358
  • 2017年07月05日 15:21
  • 275

分布式系统之三:CAP定理的实践

本博文主要介绍CAP定理的现状、与延迟的关系、实践 本博文内容主要摘自Computer杂志,由InfoQ和IEEE提供的中文版,可能比较枯燥,但是极其有趣,如果您读完此文,会对CAP定理乃至整个分布...
  • sinat_16596967
  • sinat_16596967
  • 2014年07月19日 14:18
  • 937

从分布式一致性谈到CAP理论、BASE理论

问题的提出 在计算机科学领域,分布式一致性是一个相当重要且被广泛探索与论证问题,首先来看三种业务场景。 1、火车站售票 假如说我们的终端用户是一位经常坐火车的旅行家,通常他是去车站的售票处购买车...
  • zhangyuan19880606
  • zhangyuan19880606
  • 2016年04月13日 15:08
  • 2593
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:分布式系统CAP定理
举报原因:
原因补充:

(最多只允许输入30个字)