CAP定理

在理论计算机科学中,CAP定理(CAP theorem),又被称作布鲁尔定理(Brewer’s theorem),它指出对于一个分布式计算系统来说,不可能同时满足以下三点:

  1. 一致性(Consistency):所有节点访问同一份最新数据副本。
  2. 可用性(Availability):每次请求都能获取到非错的响应(不能保证获取的数据为最新数据)。
  3. 分区容错性(Partition tolerance):以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。

一致性

在分布式环境中,一致性是指数据在多个副本中保持一致。
假设有五个节点:[n1-n5],当n1的数据更新,[n2-n4]的数据也要更新,使得用户在访问任意一个节点时,得到的数据都是相同的。

一致性的分类

一致性是指从系统外部读取系统内部的数据时,在一定约束条件下相同,即数据变动在系统内部各节点应该是同步的。根据一致性的强弱程度不同,可以将一致性的分类为如下几种:

  1. 强一致性(strong consistency):任何时刻,任何用户都能读取到最近一次成功更新的数据。
  2. 单调一致性(monotonic consistency):任何时刻,任何用户一旦读到某个数据在某次更新后的值,那么就不会再读到比这个值更旧的值。即:可获取的数据顺序必是单调递增的。
  3. 会话一致性(session consistency):任何用户在某次会话中,一旦读到某个数据在某次更新后的值,那么在本次会话中就不会再读到比这值更旧的值。
  4. 最终一致性(eventual consistency):用户只能读到某次更新后的值,但系统保证数据将最终达到完全一致的状态,只是所需时间不能保障。
  5. 弱一致性(weak consistency):用户无法在确定时间内读到最新更新的值

可用性

系统提供的服务一直处于可用状态,对于用户的请求总能在有效的时间内返回结果。
假设有五个节点:[n1-n5],当n1宕机,还可从[n2-n4]获取到数据。

分区容错性

假设有五个节点:[n1-n5],出现网络分区被分成两组:[n1-n2]和[n3-n5],当n1处理客户端请求时,需要在C(一致性)和A(可用性)之间进行取舍。
保证 C(一致性):需要将消息复制给所有节点,但是网络分区导致消息无法复制给[n3-n5],故只能返回“处理失败”的结果给客户端,这是的系统是处于“不可用”的,所以丧失了A(可用性)。
保证A(可用性):只需要将消息复制到n2,不用复制到[n3-n5],这样就违背了C(一致性)。
如果不支持P(即不容忍网络分区),也就是假设系统不会出现网络分区,即网络永远可达(从理论上讲不存在)
总而言之:数据存在的节点越多,分区容忍性越高。

用CAP分析Zookeeper

Zookeeper 在选举期间 ,整个集群都是不可用的状态,导致注册服务在选举期间瘫痪。虽然最终服务会恢复,但是漫长的选举时间(30~120s)导致注册服务长时间不可用是不能容忍的,因此,Zookeeper满足的是CP。

你可能感兴趣的:(CAP定理)