一文搞懂CAP理论

Posted amcto

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一文搞懂CAP理论相关的知识,希望对你有一定的参考价值。

            

    互联网系统中,分布式事务是无法避免的,目前多数解决方案是BASE理论,最终一致性,结合事务补偿。

1.什么是CAP理论。

CAP理论,又称为布鲁尔定理,是加州大学伯克利分销的计算机科学家埃里克.布鲁尔(Eric Brewer)在2000年的ACM PODC提出的猜想。2年后,麻省理工学院的Seth Gilbert和Nancy Lynch从理论上证明了CAP。Robert Greiner的发表的两篇博文更容易理解,第一篇已经被自己标识为过时。

CAP是一致性(Consistence)、可用性(Availability)、分区容错性(Partition tolerance)三个字母的首字母。

  • 一致性(Consistence)

    对于指定节点,读操作保证能返回最新的写操作结果。注意,这里不是同一时刻都能看到相同的数据。因为事务过程中,系统处于一个不一致状态,不同的节点的数据并不完全一致。比如,client无法读取到未提交的事务的数据,也不会读到事务中间写入的数据。

  • 可用性(Availability)

    非故障节点在合理的时间内返回合理的响应(不是错误和超时响应)。不能是错误或者是超时,结果是合理的,并不是一定是"正确"的结果。

  • 分区容错性(Partition tolerance)

    当出现网络分区后,系统能够继续“履行职责”。发生分区现象,不管什么原因,可能是丢包、连接中断、阻塞等,系统都应该能够继续“履行职责”。

    总结:网络分区后,节点之间就出现隔离。要提高分区容忍性,就要把数据多分布在各个节点中,分区容忍性就提高了。各节点复制数据,就会带来数据不一致的问题。数据分布的节点数越多,容忍性越高,复制数据带来不一致的问题发生的概率就越高,总之,是需要一个权衡的问题。

    2. CAP为什么不能同时满足?

    假如现在两个节点A、B同时满足CAP理论,C:AB节点数据同时更新。A:AB同时保证可用性。P:当出现网络分区时,必须保证对外可用。

    现在假如出现网络分区,A 肯定满足不了,AB不能互相通信,得不到最新的数据。假如必须满足C,就必须同时停止A和B,这时候A就满足不了。

    总结:分布式系统中,必然选择P,也是选择AP或CP。如果不选择P,当发生网络分区时,为了满足C,系统需要禁止写入,当写入请求时,系统会返回error,这和A冲突了。

    正常运行情况下,不存在CP和AP的选择,可以同时满足CA。CAP理论说只能选择CP或者AP,前提是系统发生了分区现象。如果没发生分区,我们没必要放弃C和A。也就是说,设计架构时,既要考虑分区发生时选择CP和AP,也要考虑分区没有发生时如何保证CA。

      



以上是关于一文搞懂CAP理论的主要内容,如果未能解决你的问题,请参考以下文章

内含面试|一文搞懂HBase的基本原理

一文搞懂Raft算法

微服务分享--解析CAP理论

分布式系统基础理论之CAP理论

分布式架构之「 CAP理论」

画图证明CAP理论