写点什么

【架构师训练营 1 期】第六周作业

用户头像
诺乐
关注
发布于: 2020 年 11 月 03 日

一、个人对 CAP 的理解:


假设一个分布式系统(数据分布式)中有两台服务器 S1 和 S2 。


一致性 C(Consitency):即数据一致性,它强调的是同一份数据。比如你向 S1 发了一条数据 A,然后你再向 S2 要数据(注意:这里不要求 S2 立即返回数据,可以等 S2 有了最新数据再返回,反正只要最终拿到的是数据 A 就行了),这时 S2 返回的数据必须是数据 A,不能是其他的。


可用性 A(Available):即高可用性,它强调的是“速度”。比如你向 S1 发了一条数据 A,然后你立马向 S2 索要数据 A,这时 S2 得立马给你返回数据,数据是不是最新的不要紧,反正它强调的是速度,是立刻马上迅速返回数据给你。


分区容忍性 P(Partion tolerence):就是 S1 和 S2 之间数据传输(由于网络的原因)会有延时,这是一定存在的,那么你就得容忍网络传输的延时。如果是单体应用就不存在这问题,因为都在同一台机器上,根本就没有网络传输。



故 CAP 三者无法同时完美兼顾。如果没有 P 只存在 AC,那就类似单体应用了,导致可以容忍网络延时,所以如果要一致性,你向 S2 索要的是同一份数据(你发给 S1 的数据 A),就会有阻塞,这时你就没法向 S2 立即索要数据了,必须得等会儿,等数据传到 S2 再去要,这样就缺失了高可用性。


所以在设计系统时,不要将精力浪费在如何设计能满足三者的完美分布式系统,而是应该进行取舍,但也并非保证了其中两点,就要完全抛弃另外一点。只是相对的要做一些牺牲。比如在保证 CP 的情况下,虽然没办法保证高可用性,但这不意味着可用性为 0,也可以通过合理的设计尽量提高可用性,同理在 AP 的情况下,也可以尽量保证数据的一致性或实现弱一致性(即最终一致性)。


用户头像

诺乐

关注

还未添加个人签名 2018.12.01 加入

还未添加个人简介

评论

发布
暂无评论
【架构师训练营 1 期】第六周作业