说明:本系列内容不是本人原创,而是数位专家学者的经验和观点的一些集合,在此也向做出有效工作的各位前辈先驱们致敬。
首先说一下CAP理论的这三个单词都是什么:
(1)所谓C,即Consistent,也就是一致性。
(2)所谓A,也就是Availability,即可用性,所谓可用性,可以理解为快速获取数据。
(3)所谓P,也就是Partition,即Tolerance of Network Partition,也就是分区容忍性,其实就是分布式。
CAP理论的提出者是Eric Brewer教授,后来由Seth Gilbert和Nancy Lynch两个人证明其正确性。该理论的主要内容就是:一个分布式系统不可能同时满足一致性、可用性和分区容错性这三个需求,最多只能同时满足两个。
也就是说,如果我们关注一致性,那么我们就需要处理因为系统不可用二导致的写操作失败的情况。如果我们关注可用性,那么我们就必须注意到系统的读操作可能不能精确的读取到写操作写入的最新值。因此系统的关注点不同,我们采用的策略也不同。
一般我们有两个方向来利用该理论:
(1)KV存储,我们可以选择不同倾向的数据库产品,这样可以适应不同的环境。
(2)领域模型+分布式缓存+存储,我们可以自由定制相应的分布式方案,它的难度相对高一些。
对于稍微大型的系统来说,可用性与分区容忍性的优先级要高于一致性,也就是说我们尽可能朝着A和P的方向去设计,然后通过其他手段来保证数据的一致性,既然我们对一致性放松了要求,其实我们对一致性也会有新的认识。不同数据对于一致性的要求是不同的,比如咱们CSDN的博客的排名是每天更新一次的,这一般我们都是可以接受的,这种不一致性不会影响用户体验。但是设计到价格和金额等方面的敏感话题,此时我们就不能一天刷新一次了,否则绝大多数用户都会抓狂。
那么我们对一致性又会有怎么样的定义呢?我们可以有如下几个分类:
(1)强一致性: 所谓强一致性就是即时一致性,可以理解为某个会话对数据的修改立即生效。比如某个会话写入了一个数据,那么其他会话会立即感知到该数据的变化。
(2)弱一致性: 所谓弱一致性可以理解为某个会话对数据的修改不会立即生效。比如某个会话写入了一个数据,其他会话需要等待一段时间才能感知到该数据的变化。
(3)最终一致性:最终一致性可以理解为弱一致性的一个特列。它的意思是在最后我们都会看到最新的值,它不会出现我们一直是新旧数据同时存在的情况。
原文地址:http://blog.csdn.net/xinguimeng/article/details/43882513