CAP 理论
CAP 是反应了分布式系统中的三个指标:Consistency (一致性), Availlability (可用性)Partion Tolerance(分区容错性)。
CAP 理论的核心是说 ,C、A 、P 这三个指标不能同时做到。
Consistency(一致性)
指数据在多个副本之间能够保持一致的特性(严格的一致性)
Availability(可用性)
指系统提供的服务必须一直处于可用的状态,每次请求都能获取到非错的响应(不保证获取的数据为最新数据)
Partition tolerance(分区容错性)
分布式系统在遇到任何网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务,除非整个网络环境都发生了故障
为啥不能同时满足?
比如说 G1 G2 两台跨区服务器。G1 向 G2 发送一条消息,G2 是收不到的,这样分区问题就必须考虑, 也就是分区容错性。一般来说 P(分区容错是要成立的)。剩下的C 与 A 是无法同时满足的。
G1 G2 服务器开始都是 v0 但是对 G1 进行了写操作,记录变成了 v1 。
用户向 G1 发起读操作,返回v1; G2 返回的是 v0 这样就不一致了。
为了数据一致性,也就是为了让 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 理论十二年回顾:"规则"变了:https://www.infoq.cn/article/cap-twelve-years-later-how-the-rules-have-changed
- CAP 定理的含义:http://www.ruanyifeng.com/blog/2018/07/cap.html