网上的介绍纷繁凌乱,这里我写下自己对于cap的理解
首先,CAP理论描述的对象是一个分布式系统,其中
C:从客户端来的读请求访问任何一个分布式系统节点,一定能读到最近的一次写请求的结果
A:访问任何一个还存活的分布式系统节点,一定能够在一个时间范围内返回一个肯定的结果(成功或者失败,不能是超时或者错误)
P:分布式系统允不允许不同节点间的网络消息丢失。关于P特性,他的概念不像A和C那样直观,网上书上有很多错误的理解。想弄明白请读下面这段话。
关于P特性我有话要说,一个常见的定义,你肯定非常熟悉:“如果网络异常将一个分布式系统分成了不能通信的两个子组,那么P特性就是要求分布式应用在每一个子组内都能正常处理请求”,这个定义并不是特别的准确,我稍后解释。网络上还有很多中文文章都是抄来抄去再加上抄的人自己的错误理解的例子就太多了,不胜枚举,甚至还有更夸张明显是错误的版本,比如<从paxos到zookeeper>中分区容错的错误定义Page11,该书将P特性定义成“分布式系统在遇到任何网络分区故障的时候,仍然需要能够保证对外提供满足一致性和可用性的服务”,简直就是胡说八道。想弄明白P特性,还是要看英文文档。这里推荐一个链接
http://blog.cloudera.com/blog/2010/04/cap-confusion-problems-with-partition-tolerance/,这篇文章援引了2002 SIGACT paper中对p的准确定义。即P特性本质上描述的是对网络的一个限制要求--网络中允不允许节点间消息传递丢失。如果你的分布式系统允许网络的P特性,那么你必然不能同时满足一致性和可用性(试想,网络出现问题,如果还想保证不同group的数据一致,势必服务需要报错,从而不满足可用性。如果追求可用,在给定时间内有成功响应,那么也就失去了一致性),如果不允许,那么是能做到一致性和可用性的。满足P特性就是要求你在C和A中必须做出取舍,换一个等式也许更容易理解
Possibility of Network Partitions => not(availability and consistency)
这样的等式没有CAP现在的3选2这么简洁,但这也是很多人都错误理解CAP的原因所在。回过头来再看我提到的那个非常熟悉的定义,它看上去更像是在描述A特性(如果一个写请求到了某一个group,它会如何响应?)
上面这三点对CAP分别得定义是正确理解cap theory的精髓所在!!!!!
再回到流传最多的白话版本,Brewer的CAP理论证明了:对于任何一个分布式系统,最多只能满足cap三点中的两点,不可能同时满足全部。
这是因为,从实践的角度来看,网络是一个不稳定的存在,对于一个分布式系统而言,如果网络出现问题,系统就不能服务,这显然是不能接受的,因此,P特性往往是分布式系统首先需要满足的条件。
以此为基础,我们接下来看一下下面两种组合
1 CP
系统追求了C特性和P特性,也就是容忍了A的不足。也就是说,如果节点间网络出现问题,为了追求数据的一致性,允许读请求超时或者返回错误。
来个例子加深理解,考虑一个分布式系统由n1、n2两个节点构成,如果n1、n2之间的网络出现了问题,导致n1、n2数据同步停止,此时一个readrequest过来访问到n2节点,n2需要和n1协商谁的数据是最新的,但是由于网络中断,一直不能得出协商的结论,最后以超时或者错误返回给客户端(具体是超时还是错误由应用方而定,并没有要求)
2 AP
系统追求了A特性和P特性,也就是允许C的不足。也就是说,如果节点间网络出现问题,为了每个节点都可以及时响应不报错,那么就允许了读请求拿得不是最新更新后的数据。
来个例子加深理解,和上面一样的分布式系统,如果n1、n2之间的网络出现了问题,导致数据同步停止。这时候一个readrequest过来访问n2节点,由于不需要和n1协商谁的数据最新,因此n2可以直接响应返回,不会超时或者报错,但是返回的数据就可能不会是最新的了,也就失去了c特性
分享到:
相关推荐
### Linux 下分布式系统及 CAP 理论深入分析 ...未来,随着分布式系统的发展和技术的进步,可能会出现新的方法和技术来进一步优化CAP理论中的权衡,但当前CAP理论仍然是理解和设计分布式系统的基础。
分布式系统的CAP理论是计算机科学中分布式计算领域的一个重要原则,由加州大学伯克利分校的计算机科学家Eric Brewer在2000年提出。该理论指出,在一个分布式计算系统中,Consistency(一致性)、Availability(可用...
### 分布式系统CAP理论模型 #### 一、引言 在分布式系统设计与实现的过程中,CAP理论模型作为一项核心理论被广泛讨论和应用。CAP理论由Eric A. Brewer教授于2000年首次提出,并在PODC会议上进行了详细介绍。这一...
CAP 理论是由 Eric Brewer 于 2000 年提出的,它指出在分布式系统中, Impossible同时满足以下三个条件:一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)。这三个条件是分布式...
第一部分主要介绍分布式系统基础理论知识,总结一些在设计分布式系统时需要考虑的范式、知识点以及可能会面临的问题,其中包括线程、通信、一致性、容错性、CAP 理论、安全性和并发等相关内容;同时讲述分布式系统的...
理解分布式系统的基石,如CAP理论(一致性、可用性和分区容错性)和FLP不可能性结果,是学习的基础。 2. **进程间通信**:分布式系统中的节点需要有效地交换信息,这就涉及到了各种进程间通信机制,包括消息传递、...
本文档中介绍的关键知识点涵盖了分布式系统的核心概念、数据分布策略、副本协议、lease机制、Quorum机制、日志技术、两阶段提交协议、基于MVCC的分布式事务以及Paxos协议和CAP理论等。 在分布式系统的模型部分,...
CAP理论则是分布式系统设计的一个指导原则,指出在分布式系统中一致性、可用性和分区容忍性这三个目标不可能同时得到完全满足。 本文的内容虽然涉及了分布式系统的诸多方面,但侧重于介绍那些在工程实践中应用广泛...
2. **CAP理论**:分布式系统设计的核心原则之一是CAP定理,它指出一个分布式系统不能同时满足一致性、可用性和分区容错性这三个特性。理解和权衡这三者在实际系统设计中的重要性是至关重要的。 3. **Paxos算法**:...
2. **CAP理论**:在分布式系统中,无法同时保证一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)。设计时需要根据业务需求权衡这三者。 3. **ACID特性**:在事务处理中,分布式...
分布式系统是一种由多台计算机通过网络互相连接,协同工作以实现共同目标的系统。李西宁老师的这门课程,...通过学习,你将能够理解分布式系统的核心理念,熟悉相关工具和技术,并有能力解决实际项目中的分布式问题。
CAP理论是分布式计算中的一个著名理论,指出在一个网络分区发生的情况下,系统要么保证一致性,要么保证可用性,但不能同时保证两者。 由于分布式系统的复杂性,系统设计者需要掌握多种技术和算法,并在实践中不断...
CAP理论指出,一个分布式系统无法同时满足一致性、可用性和分区容错性,必须在三者之间做出权衡。 5. 负载均衡:通过策略将工作负载分散到多台服务器上,以优化资源利用率,提高系统响应时间和吞吐量。负载均衡可以...
分布式系统原理与范型是IT领域中至关重要的一个主题,特别是在云计算、大数据处理以及现代互联网服务的背景下,理解和掌握分布式系统的概念与实践至关重要。本书作为第二版,深度探讨了这一领域的核心理论和常见模式...
第一部分主要介绍分布式系统基础理论知识,总结一些在设计分布式系统时需要考虑的范式、知识点以及可能会面临的问题,其中包括线程、通信、一致性、容错性、CAP 理论、安全性和并发等相关内容;同时讲述分布式系统的...
分布式系统是计算机科学中的一个重要领域,它涉及到多个独立计算节点通过网络进行协同工作,以解决单个计算机无法处理的大规模问题。在电子科技大学的2020年期末考试中,这个主题显然成为了考察的重点。这份回忆版...
2. **CAP理论**:描述了在分布式系统中,一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)这三个属性无法同时达到最优。开发者需要根据实际需求权衡这三者。 3. **Paxos算法**:...
如CAP定理(Consistency、Availability、Partition Tolerance)和BASE理论(Basically Available、Soft state、Eventually consistent),以及分布式一致性算法如Paxos、Raft等,这些都是构建分布式系统的基础。...
- **一致性模型**:介绍CAP理论,以及在强一致性和最终一致性之间的权衡。 - **负载均衡**:讨论了如何分配工作负载,避免单点故障,可能包括软件负载均衡器和硬件解决方案。 - **分布式数据库**:讲解如何设计...