`
liufei.fir
  • 浏览: 687165 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

【分布式系统工程实现】CAP理论及系统一致性

阅读更多


印象中CAP理论开始流行是从Amazon Dynamo的论文开始的,Amazon的CTO还在他的博客中介绍了最终一致性的概念,从此以后,各种会议和交流中都少不了CAP的影子。然而,对于分布式系统工程设计和开发来说,CAP意味着什么呢?

CAP 理论由 Berkerly 的 Brewer 教授提出,三者的含义如下:

    一致性 ( Consistency) :任何一个读操作总是能读取到之前完成的写操作结果;
    可用性 ( Availability) :每一个操作总是能够在确定的时间内返回;
    分区可容忍性 (Tolerance of network Partition) :在出现网络分区的情况下,仍然能够满足一致性和可用性;

CAP 理论认为,三者不能同时满足,并给出了证明,简单阐述如下:假设系统出现网络分区为 G1 和 G2 两个部分,在一个写操作 W1 后面有一个读操作 R2 , W1 写 G1 , R2 读取 G2 ,由于 G1 和 G2 不能通信,如果读操作 R2 可以终结的话,必定不能读取写操作 W1 的操作结果。

由于CAP三者无法同时满足,Amazon Dynamo论文中引入了用户可配置的NWR策略,在CAP三个特性中作出权衡。比如N=3, W=3, R=1强调一致性;N=3, W=1, R=1强调可用性;N=3, W=2, R=2是一种折衷的策略。另外,还有一些NOSQL系统把CAP理论当成一种借口,认为既然我们不能同时满足一致性和可用性,那NOSQL系统就牺牲一致性。这些说法本身虽然不能说有错,但我们至少需要思考两个问题:

    CAP理论在工程的角度意味着什么?
    一致性的具体含义?

笔者认为,最初的CAP理论只是粗略地告诉我们”天下没有免费的午餐”,对于NOSQL系统设计指导意义不大。原始的CAP理论描述有如下缺陷:

    缺少时间因素。比如对于可用性描述,10s中停服务和1个小时停服务完全是两个概念,只停写服务和同时停读写服务的影响也是很不一样的。
    一致性描述问题。每个读操作虽然能够读取到之前写操作结果,但是假设某些写操作发生在机器A,某些写操作发生在机器B,一致性依赖于对机器A和机器B上写操作的合并,操作的顺序是无法保证的。比如Dynamo&Cassandra系统中由于可能出现同一个<key, value>对被多个节点同时修改的情形,即使在NWR策略中配置W + R > N,也需要依赖冲突合并来保证一致性,这从理论上是没有完美做法的。
    网络分区描述过于模糊。工程上容易出现的网络问题一般是机房之间网络不通,某个机房停电,某台机器故障或者某些机器因为机架电源或者交换机的原因发生故障。单个机器故障也可以认为是网络分区,但这和机房网络不通对系统设计带来的挑战差别是很大的。

一般可以认为:工程上网络分区总是存在,比如机器故障或者网络异常,一致性和可用性不能同时满足。且工程上从来不要求绝对的一致性或者可用性,而是寻求一种平衡,可以将一致性和可用性分别重定义为Harvest和Yield。

    Harvest (对应一致性):percent of required data actually included in the responses (请求结果的真实程度);
    Yield (可用性):percent of requests answered successfully (成功请求占的百分比);

CAP理论可以演化为在工程上寻找一种方法,在”成功请求占的百分比”和”请求结果的真实程度”之间取得一个权衡,详细描述可以参考Coda的博客。然而,这个描述仍然不够具体,下面我们就有总控节点的系统(如GFS+Bigtable)和P2P系统(如Amazon Dynamo)两类系统的CAP含义分别进行说明。

首先我们必须明确一致性的概念。NOSQL系统经常提到最终一致性模型:假如客户端A写入一个值到存储系统,客户端B最终总是能够读取到A写入的最新值,这里有一个时间窗口,依赖于交互延迟,系统负载以及复制技术中的replica的个数。Amazon CTO宣称Dynamo为最终一致性系统,然而,这里的最终一致性具有很大的欺骗性,因为虽然客户端B能够读到其它客户端写入的所有数据,但是可能出现多个节点更新同一个值的情况,需要依赖冲突合并来解决多机操作顺序问题。后续的文章中,我们都会把Amazon Dynamo这种需要依赖操作合并,可能会丢失数据的模型从最终一致性模型中排除出去。最终一致性模型要求同一份数据同一时刻只能被一台机器修改,也就是说机器宕机时需要停很短时间写服务。

对于带有总控节点的系统,将CAP理论的定义做出适当的调整如下:

    一致性:读操作总是能读取到之前完成的写操作结果,且不需要依赖于操作合并;
    可用性:读写操作总是能够在很短的时间内返回,即使某台机器发生了故障,也能够通过其它副本正常执行,而不需要等到机器重启或者机器上的服务分配给其它机器以后才能成功;
    分区可容忍性:能够处理机器宕机,机房停电或者出现机房之间网络故障等异常情况;

带有总控节点的NOSQL系统一般是最终一致性系统,允许机器宕机时停止很短时间,比如10s的部分数据写服务,但是不允许停读服务,且服务恢复时间越短越好。大多数NOSQL系统都是对一份数据保留多个备份,同一时刻只有一个备份为主,提供写服务,其它备份为辅,同步主备份的写操作,所有的备份都可以提供读取服务,且主备份提供保证强一致性的读服务。当主备份所在机器发生故障时,需要等一段时间才能由原来的辅备份接替主备份提供写服务。

类似Amazon的P2P去中心化系统提供需要依赖冲突合并的一致性,比如Cassandra中的“last write wins”冲突合并策略,虽然并不完美但确实能够解决很多问题。这样的系统能够通过用户配置NWR策略来权衡一致性和可用性,可以做到单台机器宕机时读写服务都不停止。

最后,再次提醒大家设计系统时:不要过分迷恋CAP,认清最终一致性,理智对待NWR。
分享到:
评论

相关推荐

    分布式系统工程实践_taobao

    ### 分布式系统工程实践知识点概述 ...以上内容仅为《分布式系统工程实践》文档的主要知识点概述,每一部分都包含了大量的技术细节和实践经验,对于深入学习分布式系统的设计与实现具有重要的参考价值。

    分布式系统工程实践.pdf

    分布式系统工程实践 分布式系统是一种由多个独立的计算单元组成,通过网络互相连接并协作完成任务的系统。这类系统通常具有高度的内聚性和透明性,其核心目标是提供高性能、高可用性以及可扩展性。分布式系统中,...

    分布式系统工程实战

    综上所述,本书《分布式系统工程实战》是由一线工程师撰写,内容涵盖了分布式系统从基础理论到关键技术实现的各个方面,是一本实践性很强的参考书籍。书中内容不仅仅停留在理论层面,更重要的是提供了大量的实践案例...

    分布式系统原理介绍

    CAP理论则是分布式系统设计的一个指导原则,指出在分布式系统中一致性、可用性和分区容忍性这三个目标不可能同时得到完全满足。 本文的内容虽然涉及了分布式系统的诸多方面,但侧重于介绍那些在工程实践中应用广泛...

    分布式系统原理介绍.pdf

    同时,一个分布式系统工程实践的成功,不仅取决于理论和技术的选择,还依赖于合理的架构设计和高效的工程实现。在本文的模型中,节点是一个整体的概念,它可能是一个硬件节点,也可能是一个软件进程。宕机节点是系统...

    分布式系统 国外优质课件

    - **一致性模型**:保证数据的一致性,例如CAP理论(一致性、可用性、分区容忍性)。 - **容错机制**:处理网络故障、节点故障等问题。 - **负载均衡**:合理分配请求到不同的服务器。 - **数据复制与分片**:提高...

    推荐阅读:分布式系统架构经典资料

    - **FLP Impossibility Result**:这篇论文详细阐述了分布式系统中实现一致性的难度,特别是Fischer-Lynch-Paterson不可能性定理,对于理解分布式共识问题至关重要。 - **An Introduction to Distributed Systems*...

    分布式系统CAP

    在构建分布式系统的过程中,如何平衡数据一致性(Consistency)、系统可用性(Availability)和分区容忍性(Partition Tolerance),即所谓的CAP定理,成为了工程师们面临的重要挑战。本文将深入探讨CAP定理的核心...

    分布式系统原理 刘杰

    - **CAP理论的意义**: 不可能同时满足一致性、可用性和分区容忍性。 - **协议分析**: 在不同的场景下如何做出权衡。 以上是对刘杰所著《分布式系统原理》中的核心知识点的总结。这些知识点不仅为初学者提供了入门...

    软件工程-分布式系统构架-讲义.rar

    6. **负载均衡**:为了优化资源分配和提高性能,分布式系统需要实现负载均衡策略,如轮询、最少连接数、哈希一致性等方法。 7. **容错机制**:包括备份、故障检测、恢复策略以及分布式锁等,以确保系统的健壮性和...

    分布式转型中的主机下移实践.pdf

    而在分布式系统中,CAP理论更为关键,它指出在分布式计算环境下,一致性(Consistency)、可用性(Availability)和分区容忍性(Partition tolerance)这三项中,最多只能同时满足其中的两项。因此,分布式系统在...

    软件工程中的分布式系统设计与开发.pptx

    - **一致性协议**:实现分布式系统的一致性和可靠性。 #### 进阶学习建议 - **分布式算法**:了解一致性算法、分布式事务等。 - **微服务架构**:深入学习微服务的设计思想和实践经验。 - **云计算技术**:掌握...

    从Paxos到Zookeeper分布式一致性原理与实践(完整版)

    8. **一致性模型和CAP定理**:书中会讲解分布式系统的一致性模型,包括强一致性、最终一致性等,并介绍CAP定理,即在分布式系统中不能同时满足一致性、可用性和分区容错性的基本原理。 9. **分布式一致性面临的挑战...

    软件工程中的分布式系统设计与实践.pptx

    - **CAP定理**:一致性(Consistency)、可用性(Availability)、分区容忍性(Partition tolerance),这三个特性在分布式系统中不可能同时满足。 - **BASE理论**:基本上可用(Basically Available)、软状态...

    31_体验一下面试官可能会对分布式系统发起的一串连环炮.zip

    基于CAP定理,分布式系统提出了BASE(Basically Available, Soft State, Eventually Consistent)理论,强调在大型分布式系统中,牺牲强一致性,保证基本可用、软状态和最终一致性。 4. **分布式一致性模型**: -...

    [翻译]Spanner, 真时和CAP理论1

    在传统的CAP理论中,一个分布式系统无法同时保证一致性、可用性和分区容忍性,但Spanner通过巧妙的设计策略,尤其是在引入“真时”(TrueTime)的概念,成功地在全局范围内实现了强一致性和高可用性。 2. Spanner是CA...

    软件工程中的分布式系统设计与开发1.pptx

    - **CAP理论**:在一致性、可用性和分区容忍性之间做出权衡。 - **一致性协议**:如Paxos、Raft等,确保分布式系统中数据的一致性。 综上所述,分布式系统的设计与开发不仅涉及技术层面的问题,还需要关注管理和...

    基于异步通信的微服务分布式事务管理机制研究分析.pdf

    CAP定理是分布式系统理论中的一个重要概念,它指出在分布式计算环境中,一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)三者不可兼得,最多只能同时满足其中两项。在微服务架构...

Global site tag (gtag.js) - Google Analytics