WEEK6- 作业 - 对 CAP 理解
![WEEK6-作业-对CAP理解](https://static001.geekbang.org/infoq/25/258baeaf7833d30be0c085fdf81c19ca.jpeg)
CAP的各要素的理解
1. 数据一致性(Consistency):
对于服务端来说,所有节点在同一时刻的数据都相同;
对于客户端来说,读操作保证能够返回最新的数据。
但是实际:对于系统执行事务来说,在事务执行过程中,系统其实处于一个不一致的状态,不同节点的数据并不完全一致。
2. 系统可用性(Availability):
非故障的节点在合理的时间内返回合理的响应(不是错误和超时的响应)
3. 分区容错性(Partition Tolerance):
出现消息丢失或分区错误时,系统能够继续运行,即当网络分区出现后,系统能够继续保持运行。
CAP 原理:
对于一个分布式系统而言,不能同时满足一致性、可用性和分区容错性三个设计的约束。放到分布式环境中,我们通常必须选择P(分区容忍)要素,因为网络无法保障100%可靠,有可能出故障,所以出现分区是必然的现象。
无法同时选择CA原因:
假设,如果我们选择CA而放弃P,当发生分区故障时候,为了保证C,系统就需要禁止写入,当有写入请求时,系统就会返回ERROR,这就和A冲突了,因为A需要 NO ERROR 或 NO TIMEOUT。
所以,在分布式系统理论上,我们只能选择CP 或 AP 架构,这个就需要根据具体的业务场景来定。
1、CP 架构:
如下图所示,为了保证一致性,当发生分区现象后,N1和N2的通道故障,N1 节点上的数据y不能写入N2,此时如果客户端C去访问N2,N2需要返回ERROR ,提示客户顿有错误,即牺牲了可用性A。
![](https://static001.geekbang.org/infoq/38/387a5c7cf3b4ccaefb0625dad61ffcb5.png)
2、AP 架构:
如下图所示,为了保证可用性,当发生分区现象后,N1和N2的通道故障,N1 节点上的数据已更新到y,但是不能写入N2,N2上的数据还是x。 此时如果客户端C去访问N2,N2返回了x,而实际上最新的数据已经是y了。虽然不是最新的结果,但是也是一个合理的结果,此时牺牲了数据一致性C。
![](https://static001.geekbang.org/infoq/13/1324b3630122c016c1d2bf73ca92a0f0.png)
评论