`

分布式系统设计权衡之CAP

 
阅读更多

至元数据起始

 

一致性,可用性,分区容错性

 

1.为什么学习并记录分布式设计理念一系列相关的东西

在日常工作中系统设计评审的时候,经常会有一些同事抛出一些概念,高可用性,一致性等等字眼,他们用这些最基本的概念去反驳系统最初的设计,但是很多人理解的可用性,一致性等等问题,都是自己拍脑袋想的,或者根本和最原始表达的意思就不是一个东西,在这种情况下PK,就像不再一个频段的人在交流,除了争论,没有任何实质性的进展,所以有必要熟悉其理论基础,以免贻笑大方。(其实类似的例子还有很多,国内的技术人员都喜欢把一些此词模糊化,混淆而谈。例如XX云,实际卖的就是vps 和一小部分saas,这就叫cloud computing?)

2.准备说哪些东西

分布式系统设计在评审时,争论得最多的地方,其实也就是著名的cap理论,本文也主要对CAP理论加以自己的理解和应用

CAP理论

什么是分布式系统

部分在不同的节点上,通过网络协同工作的系统叫做分布式系统

CAP分别代表什么

• Consistency 
  • (all nodes see the same data at the same time)
• Availability 
  • Reads and writes always succeed.
• Partition tolerance 
  • (the system continues to operate despite arbitrary message loss or failure of part of the system)

一致性: 更新操作成功并返回客户端完成后,分布式的所有节点在同一时间的数据完全一致

可用性:     读和写操作都能成功

分区容错性:再出现网络故障导致分布式节点间不能通信时,系统能否继续服务

CAP的是什么关系

It states, that though its desirable to have Consistency, High-Availability and Partition-tolerance in every system, unfortunately no system can achieve all three at the same time.
在分布式系统的设计中,没有一种设计可以同时满足一致性,可用性,分区容错性 3个特性

注意:不要将弱一致性,最终一致性放到CAP理论里混为一谈(混淆概念的坑真多)
弱一致性,最终一致性 你可以认为和CAP的C一点关系也没有,因为CAP的C是更新操作完成后,任何节点看到的数据完全一致, 弱一致性。最终一致性本身和CAP的C一致性是违背的,所以你可以看到那些谎称自己系统同时具备CAP 3个特性是多么的可笑,可能国内更多的场景是:一个开放人员一旦走上讲台演讲,就立马转变为了营销人员,连最基本的理念也不要了
这里有一篇标题很大的文章  cap-twelve-years-later-how-the-rules-have-changed ,实际上本文的changed更多的是在思考方式上,而本身CAP理论是没有changed的

为什么会是这样

我们来看一个简单的问题, 一个DB服务   搭建在两个机房(北京,广州),两个DB实例同时提供写入和读取

  1. 假设DB的更新操作是同时写北京和广州的DB都成功才返回成功
      在没有出现网络故障的时候,满足CA原则,C 即我的任何一个写入,更新操作成功并返回客户端完成后,分布式的所有节点在同一时间的数据完全一致, A 即我的读写操作都能够成功,但是当出现网络故障时,我不能同时保证CA,即P条件无法满足


  2. 假设DB的更新操作是只写本地机房成功就返回,通过binlog/oplog回放方式同步至侧边机房
      这种操作保证了在出现网络故障时,双边机房都是可以提供服务的,且读写操作都能成功,意味着他满足了AP ,但是它不满足C,因为更新操作返回成功后,双边机房的DB看到的数据会存在短暂不一致,且在网络故障时,不一致的时间差会很大(仅能保证最终一致性)


  3. 假设DB的更新操作是同时写北京和广州的DB都成功才返回成功且网络故障时提供降级服务
      降级服务,如停止写入,只提供读取功能,这样能保证数据是一致的,且网络故障时能提供服务,满足CP原则,但是他无法满足可用性原则

选择权衡

通过上面的例子,我们得知,我们永远无法同时得到CAP这3个特性,那么我们怎么来权衡选择呢?
选择的关键点取决于业务场景

对于大多数互联网应用来说(如网易门户),因为机器数量庞大,部署节点分散,网络故障是常态,可用性是必须需要保证的,所以只有设置一致性来保证服务的AP,通常常见的高可用服务吹嘘5个9 6个9服务SLA稳定性就本都是放弃C选择AP

对于需要确保强一致性的场景,如银行,通常会权衡CA和CP模型,CA模型网络故障时完全不可用,CP模型具备部分可用性,实际的选择需要通过业务场景来权衡(并不是所有情况CP都好于CA,只能查看信息不能更新信息有时候从产品层面还不如直接拒绝服务)

延伸

BASE(Basically Available, Soft State, Eventual Consistency  基本可用、软状态、最终一致性) 对CAP AP理论的延伸, Redis等众多系统构建与这个理论之上
ACID  传统数据库常用的设计理念, ACID和BASE代表了两种截然相反的设计哲学,分处一致性-可用性分布图谱的两极。

扩展阅读

Daniel Abadi认为  CAP  应该叫 PACELC   http://dbmsmusings.blogspot.jp/2010/04/problems-with-cap-and-yahoos-little.html
Brewer's CAP Theorem   http://www.julianbrowne.com/article/viewer/brewers-cap-theorem
Foundationdb 的CAP权衡选择  https://foundationdb.com/white-papers/the-cap-theorem

<!-- <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"> <rdf:Description rdf:about="http://10.11.112.49:8090/pages/viewpage.action?pageId=3285293" dc:identifier="http://10.11.112.49:8090/pages/viewpage.action?pageId=3285293" dc:title="分布式系统设计权衡之CAP" trackback:ping="http://10.11.112.49:8090/rpc/trackback/3285293"/> </rdf:RDF> -->

 

 

分享到:
评论

相关推荐

    分布式系统设计 分布式系统设计

    分布式系统设计是现代互联网服务和企业级应用的核心技术之一,它涉及到多个计算机节点通过网络进行协同工作,共同处理任务和数据。在这个领域,我们需要深入理解并掌握一系列关键知识点,以构建高效、可扩展且容错的...

    杨波-分布式系统设计案例课材料.zip

    分布式系统设计是现代互联网技术的核心组成部分,它涉及多个计算节点通过网络进行协同工作,以处理大规模数据和提供高可用的服务。杨波的分布式系统设计案例课材料深入浅出地介绍了这个领域的关键概念和技术。 首先...

    分布式系统设计PDF

    其中,CAP定理指出在分布式系统中无法同时满足一致性、可用性和分区容忍性,因此设计时需要根据业务需求进行权衡。例如,许多大型互联网公司选择牺牲强一致性以换取高可用性和分区容错性。 接着,分布式系统的关键...

    分布式系统 概念与设计 习题答案(完整版).

    CAP理论指出,一个分布式系统无法同时满足一致性、可用性和分区容错性,必须在三者之间做出权衡。 5. 负载均衡:通过策略将工作负载分散到多台服务器上,以优化资源利用率,提高系统响应时间和吞吐量。负载均衡可以...

    分布式系统设计

    在分布式系统设计中,首先会涉及“一致性”和“可用性”的权衡,这是CAP理论的基础。CAP理论指出,任何分布式系统都无法同时保证一致性(所有节点看到相同的数据)、可用性(对每个请求都能给出响应)和分区容错性...

    分布式系统原理与范型答案(第二版)答案

    2. **CAP理论**:分布式系统设计的核心原则之一是CAP定理,它指出一个分布式系统不能同时满足一致性、可用性和分区容错性这三个特性。理解和权衡这三者在实际系统设计中的重要性是至关重要的。 3. **Paxos算法**:...

    分布式系统CAP理论模型

    ### 分布式系统CAP理论模型 #### 一、引言 在分布式系统设计与实现的过程中,CAP理论...通过深入了解CAP理论的基本概念及其背后的权衡关系,可以有效地指导分布式系统的架构设计,构建出既高效又可靠的分布式应用。

    Linux下分布式系统以及CAP理论分析

    CAP理论是分布式系统设计中的核心概念之一,由加州大学伯克利分校的Eric Brewer教授于2000年的PODC会议上提出,并在2003年由MIT的研究员Seth Gilbert和Nancy Lynch正式证明。该理论指出,在分布式系统中,一致性...

    分布式系统概念与设计 原书第5版

    例如,CAP理论指出,在分布式系统中,一致性、可用性和分区容错性无法同时达到最优,设计时需要权衡取舍。另外,微服务架构和SOA(面向服务的架构)是常见的设计模式,它们提倡将复杂系统分解为独立的服务,以提高...

    分布式系统网络教程之采用分布式系统的必要性

    通过学习这些知识点,开发者可以更好地理解分布式系统的本质,从而设计出更加健壮、高效和适应性强的系统。在实际应用中,还需要结合具体的业务场景和技术栈,选择合适的分布式框架和工具,如Hadoop、Spark、Docker...

    分布式系统教程 原理与程序设计

    例如,CAP定理指出,在分布式系统中不能同时满足一致性、可用性和分区容忍性,需要根据场景权衡选择。此外,使用一致性哈希和分区策略可以有效地处理大规模数据。 7. **案例分析** 分析实际的分布式系统案例,如...

    分布式系统设计.rar

    1. **CAP定理**:在分布式系统中,无法同时满足一致性、可用性和分区容错性,设计时需要在这三者之间做出权衡。 2. **Gossip协议**:一种去中心化的信息传播算法,用于高效地传播和更新状态。 3. **MapReduce**:...

    CAP理论与分布式系统设计.docx

    在实际的分布式系统设计中,如Google的Bigtable、Amazon的Dynamo等,往往需要在CAP三者之间做出权衡。例如,Dynamo选择了AP(可用性和分区容忍性),牺牲了一致性,以确保在分区发生时仍能提供服务,而Bigtable则更...

    设计开发 分布式系统原理与范型 第二版 完整版

    CAP理论(一致性、可用性、分区容忍性)指导开发者在设计时做出权衡。ACID(原子性、一致性、隔离性、持久性)事务模型保证了操作的完整性,而BASE(基本可用、软状态、最终一致性)原则更适合大规模分布式系统。 ...

    分布式系统小书

    - **第二章:抽象层次与不可能性结果**:深入探讨了抽象层次的概念及其在分布式系统中的应用,同时引入了一些著名的不可能性定理,如FLP定理和CAP定理等,解释了为什么在分布式系统中达到某些理想状态是不可行的。...

    大规模分布式系统架构与设计实战

    2. **CAP理论**:分布式系统设计中,通常需要在一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)之间做出权衡。通常无法同时满足这三个属性,理解这一理论对于设计分布式服务至关...

    关于分布式系统的ppt

    9. **分布式系统设计原则**:讲解CAP、FALLacies of Distributed Computing(分布式计算的七个谬误)等设计原则,以及如何在实际系统设计中应用这些原则。 10. **容错与恢复机制**:介绍如何设计高可用的分布式系统...

    分布式系统课件PPT

    11. **分布式系统的设计原则与模式**:例如微服务架构、服务网格、事件驱动架构等,以及如何设计高可用、高性能的分布式系统。 12. **案例分析**:可能会介绍实际的分布式系统案例,如Google的GFS、BigTable,...

Global site tag (gtag.js) - Google Analytics