写点什么

第 6 周作业

用户头像
MR.X
关注
发布于: 2021 年 02 月 08 日

1.请简述 CAP 原理。

C:Consistency,表示一致性的意思,在分布式系统架构中,指的是多个分区节点的数据强一致性,比如一个更新操作后,每个分区节点的数据都要保持一致;

A:Availability,表示可用性的意思,指的是分布式系统架构中,各个节点保持高可用;

P:Partiton tolerance,表示分区容忍性,即当分布式系统中,由于网络不可靠性,可能导致分区间无法通信时,保证系统可正常服务;


CAP 原理,一个数据分布式系统不可能同时满足 C 和 A 和 P 这 3 个条件。所以在设计系统时,很难做到能满足三者的完美分布式系统,肯定要对他们进行取舍。由于网络的不可靠性质,大多数开源的分布式系统都会实现 P,也就是分区容忍性,然后在 C 和 A 中做抉择;


下面分别讨论各个特性的组合情况:

1. 保证 C 和 P 的情况


为了保证数据一致性,A 需要将数据复制给 B,即 A 和 B 需要进行通信。但是由于网络是不可靠的,系统有保证了分区容忍性,也就是说这个系统是可以容忍网络的不可靠的。这时候 B 就不一定能及时的收到 A 的数据复制消息,当有请求向 B 访问数据时,为了保证数据的一致性,B 只能阻塞等待数据真正同步完成后再返回,这时候就没办法保证高可用性了。


所以,在保证 C 和 P 的情况下,是无法同时保证 A 的。


2. 保证 A 和 P 的情况


为了保证高可用性,A 和 B 都有在有限时间内返回。同样由于网络的不可靠,在有限时间内,B 有可能还没收到 A 发来的数据更新消息,这时候返回给客户端的可能是旧的数据,和访问 A 的数据是不一致的,也就是违法了 C。


也就是说,在保证 A 和 P 的情况下,是无法同时保证 C 的。


3.保证 A 和 C 的情况


如果要保证高可用和一致性,只有在网络情况良好且可靠的情况下才能实现。这样 A 才能立即将更新消息发送给 B。但是我们都知道网络是不可靠的,是会存在丢包的情况的。所以要满足即时可靠更新,只有将 A 和 B 放到一个区内才可以,也就丧失了 P 这个保证。其实这时候整个系统也不能算是一个分布式系统了。


总结:虽然在系统设计的时候,不能保证三者都能完全满足,但是可以在保证其中两个方面的情况下,对第三点进行一部分牺牲;比如在保证 CP 的情况下,虽然没办法保证高可用性,但这不意味着可用性为 0,我们可以通过合理的设计尽量的提高可用性,让可用性尽可能的接近 100%。同理,在 AP 的情况下,也可以尽量的保证数据的一致性,或者实现弱一致性,即最终一致性。


用户头像

MR.X

关注

还未添加个人签名 2020.12.01 加入

还未添加个人简介

评论

发布
暂无评论
第6周作业