CAP 理论

CAP 是反应了分布式系统中的三个指标:Consistency (一致性), Availlability (可用性)Partion Tolerance(分区容错性)。

CAP 理论的核心是说 ,C、A 、P 这三个指标不能同时做到。

CAP 理论_开发者社区

Consistency(一致性)

指数据在多个副本之间能够保持一致的特性(严格的一致性)

Availability(可用性)

指系统提供的服务必须一直处于可用的状态,每次请求都能获取到非错的响应(不保证获取的数据为最新数据)

Partition tolerance(分区容错性)

分布式系统在遇到任何网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务,除非整个网络环境都发生了故障

为啥不能同时满足?

比如说 G1 G2 两台跨区服务器。G1 向  G2 发送一条消息,G2 是收不到的,这样分区问题就必须考虑, 也就是分区容错性。一般来说 P(分区容错是要成立的)。剩下的C 与 A 是无法同时满足的。CAP 理论_开发者社区_02

G1 G2 服务器开始都是 v0 但是对 G1 进行了写操作,记录变成了 v1 。CAP 理论_开发者社区_03

CAP 理论_分布式系统_04

用户向 G1 发起读操作,返回v1; G2 返回的是 v0 这样就不一致了。

CAP 理论_开发者社区_05

为了数据一致性,也就是为了让 G2 也变成为 v1,就要在 G1 写操作的时候, 让 G1 向 G2 发送一条消息,要求 G2 改成 v1。这样下次读的时候,读到的就是 v1。

但是要注意的是,在 G1 向 G2 的同步过程中, G2 是不可用的,只有等数据同步完之后,才放开读写,这样才能保证一致性。否则在同步过程中,放开读写,这样数据就不一致了。

BASE 理论

Base 理论,也叫做基本可用,是采用合适的方式达到最终一致性(Eventual Consitency)。

  • (Basically Available) 基本可用

分布式系统出现故障的时候,允许损失部分可用性,保证核心可用。

  • Soft State(软状态)

接受一段时间的状态不同步,与中介状态,而改中间状态不影响整体的可用性。这里中间状态就是 CAP 理论中的数据不一致。

  • Eventually Consistent 最终一致性

不可能一直都是软状态,必须有个时间期限,数据最终一定能达到一致的状态,一次所有客户端对系统的数据访问最终都能够获取最新的值。

参考资料

  • 英文版的:https://mwhittaker.github.io/blog/an_illustrated_proof_of_the_cap_theorem/

  • CAP 定理的含义:http://www.ruanyifeng.com/blog/2018/07/cap.html

CAP 理论_分布式系统_06