架构学习第五天

今天学习CAP定理(布鲁尔定理),这个2000年提出的猜想在2002年被证明,使它成为分布式计算领域公认的一个定理。这意味着只要是设计分布式系统,CAP是必须要掌握和考虑的,就好像发射卫星一定要研究和遵循宇宙第一速度定律一样。可惜一些真理用在人身上就失效了,因为很多人即使知道了真理也未必去遵循。

对于CAP,有两个版本的定义:

第一版定义:对于一个分布式计算系统,不可能同时满足一致性(consistence)、可用性(availability)、分区容错性(partition tolerance )。

第二版定义:在一个分布式系统(互相连接并共享数据的节点的集合)中,当涉及读写操作时,只能保证一致性、可用性、分区容错性三者之中的两者,另一个必须被牺牲。

第二版重点强调了互相连接和共享数据,因为分布式系统不一定会互相连接和共享数据,比如memcache集群,相互之间就没有连接和共享数据,因此这类分布式系统不符合CAP理论探讨的对象,对于mysql集群来说是需要互联和进行数据复制的,因此符合这个理论的对象。

第二版还强调了读写操作,那么意思是说CAP不涉及所有操作,只关注对数据的读写,比如一些选举操作就不是CAP 探讨的对象。

有了上面精确的范围和对象限定,我想到了"鱼和熊掌不可兼得",想到了"因地制宜"。和人生一样,我们也要学会取舍:当家庭、事业、健康、财富发生失衡的时候要取舍。

一致性

含义:

第一版:所有的节点在同一时刻都能看到相同的数据。

第二版:对某个指定的客户端来说,读操作保证能够返回最新的写操作结果。

差异:

第一版从节点的角度描述,第二版从客户端的角度描述,视角不同,世界不同。

第一版的关键字是看到,其实本质上就是节点要拥有数据,第二版从客户端的读写角度来描述一致性,定义更加精确。

就像左手指月一样,相同的真理需要大量的解释,而真理很难被简单的诠释出来。

可用性

第一版含义:每个请求都能得到成功或失败响应。

第二版含义:非故障的节点在合理的时间内返回合理的响应(不是错误和超时的响应)。

分区容忍性

第一版解析:尽管出现消息丢失或分区错误,但系统能够继续运行。

第二版解析:当出现网络分区后,系统能够继续"履行工作"。

上面看起来就是带病工作呗。

CAP的应用

CAP理论定义三个要素中只取两个,但是放到分布式环境下,我们会发现必须选择P(分区容忍)要素,因为网络本身无法100%可靠。因为这个原因,CA这个组合基本排除了,只考虑CP或AP架构。

CAP细节

1.CAP关注的粒度是数据,而不是整个系统。

2.CAP是忽略网络延迟的。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。