美文网首页
分布式系统中的CAP定理

分布式系统中的CAP定理

作者: Yeah的第七章 | 来源:发表于2018-12-04 13:21 被阅读0次

    CAP的定义

    CAP是"Consistency","Availabilty","Partition Tolerance"的简称,分别代表了:强一致性,可用性和分区容忍性,它们的含义分别如下:

    强一致性:在分布式系统同一份数据有多副本的情况下,对于数据的操作效果和只有单份数据一样。

    可用性:客户端在任何时刻对数据的读/写操作都应该保证在时限内完成。

    分区容忍性:当分布式系统出现网络分区,不同分区间的机器无法进行网络通信时,系统仍然能够继续工作。

    对于一个分布式系统,无法同时实现强一致性,可用性和分区容忍性,即CAP三要素不可兼得。

    如何理解CAP三要素不可兼得


    由于网络的不可靠性,网络分区的情况不可避免的会发生,当出现网络分区时,不同分区的机器无法进行通信。分布式系统必须能够在出现网络分区的情况下继续工作,因而对于分布式系统而言,P即分区容忍性是必须要具备的要素,那么问题就转化为了,在系统满足分区容忍性的前提下,为什么强一致性和可用性不可兼得。

    假设数据项A的三个副本分别存储在不同的物理节点,在某一时刻,系统状态如下图所示:

    当客户端将节点1上的A修改为2后,系统出现了网络分区,其中节点1和节点2在一个网络分区中,而节点3在另一个分区中

    当有客户端尝试读取节点3上的A值时,系统将面临两难困境

    系统等待节点3从节点1同步A的值,待数据一致后再返回客户端响应,但是因为节点3和节点1不在一个分区中,双方无法进行通信,导致系统无法在限定时间内给客户端返回读取结果,这明显不符合可用性的要求。

    系统立即返回一个A=1的旧值给客户端,由于A的值在不同节点上不一样,导致一致性的条件被破坏。

    因而,对于满足分区容错性的系统而言,强一致性和可用性的要求难以同时被满足。其实这是很容易理解的,即使没有网络分区,因为不同节点上的数据需要经过网络通信来保持一致性,这个过程本身就比较花时间,当需要在给定很短的时限内基于客户端响应时,对于一致性的保证自然就比较弱。

    如何正确理解CAP定理

    对于分布式系统而言CAP三要素不可兼得,但并不意味着在任何时刻都必须从中做出取舍,或者在构建分布式系统之初就选择其中两个而放弃另一个,这种看法具有片面性。

    由于网络分区出现的可能性非常小,系统在正常运行的情况下还是应该兼顾AC两者,在进入网络分区模式后才需要对P进行保证,从A和C中选择牺牲一个。

    A和C并不是一个硬币的两面,只能选择其中一个;A和C应该看成天平,系统可以选择向哪边倾斜,但另一边也应该一定程度的保留。

    对于A和C之间的选择,不应该粗粒度的整个系统级别进行选取,而应该针对系统中的不同子系统,针对性的采取不同的取舍策略。

    原文地址:https://www.cnblogs.com/takumicx/p/10021538.html

    相关文章

      网友评论

          本文标题:分布式系统中的CAP定理

          本文链接:https://www.haomeiwen.com/subject/gbymcqtx.html