CAP理论

什么是CAP理论?阮一峰-CAP 定理的含义

CAP

1998年,加州大学的计算机科学家Eric Brewer 提出,分布式系统有三个指标。

  1. Consistency(一致性) - C
  2. Availability(可用性) - A
  3. Partition tolerance(分区容错性) - P

Partition tolerance

大部分分布式系统都分布在多个子网络,每个子网络叫做一个区(Partition),分区容错的意思是区间通信可能会失败。

cap-p

上图中,G1和G2是两台跨区的服务器,G1向G2发送一条消息,G2可能无法收到,系统设计的时候,需要考虑到这种情况。
一般来说,分布式系统中分区容错性无法避免,因此可以认为CAP中的P总是成立,根据CAP定理,剩下的C和A无法同时满足

Consistency

一致性的意思是,写操作之后的读操作,必须返回该值,举例来说,某条记录是V0,用户向G1发起一个写操作,将其改为V1。
cap-c-1
接下来,用户的读操作就会得到V1,这叫做数据的一致性
cap-c-2
问题是,用户有可能向G2发起读操作,由于G2的值没有变化,因此返回的是V0,G1和G2读操作的结果不一致,这就不满足一致性了。
cap-c-3
为了让G2也能变成V1,就要在G1写操作的时候,让G1向G2发送一条消息,要求G2也改成V1.
cap-c-4
这样的话,用户向G2发起读操作,也能得到V1.
cap-c-5

Availability

只要收到了用户的请求,服务器就必须给出回应。(不论对错)
用户可以向G1或G2发起读操作,不管是那台服务器,只要收到请求就必须返回用户到底是V1还是V0,否则就不满足可用性

Consistency和Availability的矛盾

Q:一致性和可用性为什么不能同时满足?
A:因为通信可能会失败(出现分区容错)

如果保证G2的一致性,那么G1必须在写操作时,锁定G2的读写操作。只有数据库同步后,才能重新开放读写操作。锁定期间,G2没有可用性
如果保证G2的可用性,那么不能锁定G2,G2没有一致性

几点疑问

  • 怎样同时满足CAP?

除非是单体架构

  • 何时要满足CP?

对一致性要求高的场景,Zookeeper就是这样,在服务节点数据同步时,服务对外不可用。

  • 何时要满足AP?

对可用性要求高的场景,Eureka就是这样,必须保证注册中心随时可用,不然拉取不到服务就可能出问题,所以可能会出现eureka节点间数据不一致的问题。

Base理论

base是三个单词的缩写

  • Basically Available(基本可用)
    不能满足完全可用,等一小段同步时间,就满足基本可用,只要时间足够短。
  • Soft state(软状态)
    保留一个中间状态
  • Eventually consistent(最终一致性)
    不能实时的一致性,等待数据同步完成后,满足一致性。

解决分布式事务,就是根据Base理论来实现的。