架构训练营第六周作业
作业:
请简述 CAP 原理
解答:
CAP原理阐述的是,在一个分布式的系统里面,C,A,P代表的三个特性只能同时满足两个。
三种特性
C: 代表一致性,要求数据在每一个分区都是一致的。读取要么得到最新的数据,要么返回错误。如果返回和最新数据不一致的数据,就不能满足该特性。
A: 代表可用性,和一致性的(可以返回错误)是矛盾的,要求每次请求,系统都应该返回响应。可用性不要求返回的响应一定是最新的,所以如果返回过期数据,也算是满足可用性。但是这样又不满足一致性。
P:代表分区耐受性,服务器经常会因为网络等原因,导致节点间通讯收到影响。该特性要求,即使发生了通讯上的消息丢失,延迟等情况,系统依然可以正常操作。
为何只能三选二?
因为分布式系统各节点之间需要使用网络通信。而网络通信是必然会在一定的时候出现问题的。这时候,一致性和可用性就不能同时满足。
根据一致性、可用性的描述,我们知道只有成功地返回最新的数据这一种情况是同时满足二者的。
如果有节点通讯发生问题,我们想满足一致性,因为不能把最新的数据成功写入所有节点(也就有的节点可能存在过期数据),只能考虑返回错误,这就不满足可用性。而如果考虑返回各节点自己存储的数据来满足可用性,一致性就满足不了了。
三选二
满足一致性,可用性
如果选择C和A,不满足P,也就是说分区耐受性不满足,这通常不会作为分布式系统的选择。因为既然是分布式系统,网络通信失败是必然会发生的。如果发生了网络通信失败,系统就失去响应,这是不能接受的。而我们设想如果没有网络通信失败,那只能发生在单机系统,这样就不是分布式系统了。
满足一致性,分区耐受性
这样的选择表示,及时对响应返回错误(不满足可用性),也必须保证一致性。这种情况通常发生在系统一致性非常重要的情况,比如银行ATM机的系统,如果是分布式系统,就必须要求强一致。即使返回交易失败,也不能牺牲一致性。
满足可用性,分区耐受性
一般的分布式系统考虑这种方式。比如,发布一张网页到 CDN,多个服务器有这张网页的副本。后来发现一个错误,需要更新网页,这时只能每个服务器都更新一遍。
一般来说,网页的更新不是特别强调一致性。短时期内,一些用户拿到老版本,另一些用户拿到新版本,问题不会特别大。当然,所有人最终都会看到新版本。所以,这个场合就是可用性高于一致性。
版权声明: 本文为 InfoQ 作者【一期一会】的原创文章。
原文链接:【http://xie.infoq.cn/article/690e1c552b5aea8336dc97d07】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论