回头细品CAP理论

0.前言

对于分布式系统,CAP是大家耳熟能详的定理,是加州大学伯克利分校的计算机科学家Eric Brewer 在 2000年提出的猜想,后被证明,cap三个单词分别代表:

  • C:Consistency
  • A:Availability
  • P:Partition Tolerance

而Robert Greiner对CAP的理解也写了两篇文章,其中第一版一些定义是不准确的,怎么准确理解CAP定理,本文整理了更准确的定义和其中的细节点,汇总于此。

1.CAP理论

In a distributed system(a collection of interconnected nodes that share data),you can only have two out of the following three guarantees across a write/read pari:Consistency、Availability、and Partition tolerance - one of them must be sacrificed.

有两个细节点:

  • 【注意1】cap理论探讨的是:互联和共享数据的分布式系统
  • 【注意2】cap理论关注的是:对数据的读写操作

CAP理论探讨的分布式系统,强调的是互联和共享数据 ,而比如memcache的集群,相互之间就没有连接和共享数据,不属于cap理论探讨的范畴

此外,cap关注的是对数据的读写操作,而不是分布式系统的所有功能,例如zookeeper的选举机制就不是cap理论探讨的范围

2.1 Consistency 一致性

第一版:

all nodes see the same data at the same time.

翻译:所有节点在同一时刻都能看到相同的数据

不精确原因:事务执行过程中,不同节点的数据并不会完全一致.

第二版:

consistency:a read is guaranteed to return the most recent write for a given client.

翻译:对于某个指定的客户端来说,读操作保证能返回最新的写操作结果

第二版从客户端角度描述,去掉了同一时刻相同数据的描述,强调最新的写结果,对于事务执行过程中的数据,只要未提交都读取不到

2.2 Availability 可用性

第一版:

every request get a response on success/failure

不精确原因:只有非故障节点才能返回响应,并且success / failure 定义太宽泛.

第二版:

a non-failing node will return a reasonable response within a reasonable amount of time(no error or timeout)

翻译:非故障节点在合理的时间内返回合理的响应(不是错误和超时的响应)【注意:没有说是“正确”的结果,但可以是合理的结果】

2.3.partition tolerance 分区容错

第一版:

system continue to work dispite message loss or partial failure.

翻译:出现消息丢失或者分区错误时,系统能继续运行.
不精确原因:网络分区定义过于狭隘.

第二版:

system continue to function when network partitions occor.

翻译:当出现网络分区后,系统能继续履行职责

分区现象:即网络故障

分区现象:可能丢包,可能连接中断,可能拥塞

3.

CA架构理论上是不存在的
原因如下:
由于网络不可能是100%无故障的
当我们选择了CA,牺牲了P,当出现分区现象时(网络故障),为了保证一致性C,系统必须禁止写入,不然由于网络故障导致的数据不能及时更新,数据会不一致;而禁止写入又和可用性A违背了,因为A要求返回no error or no timeout

CP架构:
网络不可能100%可靠的,当发生分区现象,导致最新数据不能从节点1同步到节点2,那么在访问节点2时,拒绝请求,牺牲掉可用性A,等待网络恢复后将数据同步,满足一致性C

CA架构
网络不可能100%可靠,当发生分区现象,导致数据不一致现象,而客户端请求访问数据,为了保证可用性A,返回不准确的结果,牺牲掉一致性C

CAP关注的是粒度
CAP不是对整个系统而言的,不是整个系统都选择CP或者AP,有些数据必须选择CP,有些数据必须选择AP

正常网络情况下,可以同时满足CA
如果没有发生分区现象,当P不存在时,网络连接一切正常时,一致性和可用性都可以保证,仅仅需要在分区期间牺牲C或者A

最典型的就是在分区期间记录一些日志,分区故障解决后,根据日志恢复

CAP理论是忽略延时的,而实际应用中延时是无法避免的

BASE指的是

  1. 基本可用 basically availability(BA)
  2. 软状态 soft state(S)
  3. 最终一致性 eventual consistency(E)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值