【理论】CAP理论 - Brewer's CAP Theorem

先来看看CAP的具体含义是什么,这里是Browne本人的描述(http://www.julianbrowne.com/article/viewer/brewers-cap-theorem)
以下是我个人的理解:

CAP是theorem,不是model。CAP告诉我们的是解决问题的方法。

Consistency(一致性)
在系统内部,读和写的操作都是由多个步骤完成的。但对于系统外部的使用者来说,读和写操作应该原子性的(atomic)
使用者会认为:
1. 所有的读,数据都应该一样
2. 写之后的读,应该是最新的数据。
对于一个单机系统,一致性的保证是很简单的。但对于一个分布式系统,要做到这一点,代价是相当昂贵的。

Availability(可用性)
对请求(request)能够有应答(response),就算是可用的。Browne举的是买书的例子,作为中国人,我就拿铁道部的售票网站做个例子。
我要买一张火车票,系统告诉我有票,或者没票,这样都属于Availability
但是售票网站打不开;或者打开了网站,但是查询了半天一直在等待,就是没有结果。这样就属于Not Availability
通俗的讲,就是不管行不行,都痛快点,不要把我凉在旁边。

Partition-tolerance
这个不知道该怎么翻译(分区容忍度? 感觉不好)
作为分布式系统,不同的节点通过网络进行通讯。不可避免的,会受到网络的影响。
这里指的是对于节点间通讯失败的容忍程度。换句话说,如果所有节点都在一台机器上,就不会有这样的问题。

CAP理论就是说,三者只能取其二。三者均完美的系统是不存在的。
要保证C, 最好就是只用一个节点来处理读和写
要保证A, 就是要尽可能多的节点能响应请求
要保证P,最好把所有节点放在一台机器上

举个例子,看看如果通过CAP理论解决问题:
一个master - slave架构的系统,为了防止master 和 slave之间的网络失效所带来的问题,我们可以怎么办
drop P: 把master和slave放在一台机器上
drop A: 如果master-slave之间的网络失效,则认为系统失效
drop C: 不去理会,继续提供服务。

再扩展一下自己的思维:
1. 对于一个银行系统, 对于C要求是最高的,P也是必须的(如果放在一个机房,火灾什么的就完蛋了)。所以可以做一个CP系统。
对于读写都是3,3(即3台写入成功才认为成功,读取3台的数据,都读取成功且一致才认为读取成功)
并且节点分布在各地。任何一个节点出了问题,系统中止服务(牺牲A)

2. 对于QQ的开心农场, C是最次要的因素(19个苹果,两人都偷了一个,结果剩下18个,这样完全没有问题)。可以做一个AP系统,提高用户体验和相应速度(把节点分布到各地,电信网通的都有)

3. 对于铁路订票系统,查询的时候,C是次要的;对于订票成功,写入的时候,C是重要的(不然就会出现扣款成功但没有出票)。A也是必要的(春节旅客们的抱怨,主要就集中在A这里)。P是次要的。
所以可以建一个CA系统,将主机都放在同一个机房,并提高并发处理能力。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值