开发者社区> orczhou> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

关于CAP

简介:
+关注继续查看

后知后觉仍然比不知不觉好一点,虽然我们努力最求的是先知先觉。

在阅读了Eric A. Brewer的keynote at the PODC和Gilbert and Lynch的Brewer's Conjecture and the Feasibility of Consistent,Available,Partition-Tolerant Web Service后,对CAP有了些初步的认识,也尝试弄清楚一些基本的问题。

1. 为什么我们需要知道CAP

记得当初学习数学科学(例如微分方程)的时候,如果求解一个问题,首先我们需要证明这个解的存在性。(没学过微分方程也可以回忆一下哥尼斯堡七桥问题

现实生活中,我们往往面临的是非常具体(甚至琐碎)的问题,我们也在不断付出巨大的努力的尝试解决它们。如果问题棘手,发现一时无法走出的困境后,往往会寻求新的设计方案来解决问题。每一个方案(系统)设计之初,参与设计者往往对未来这个方案充满了憧憬,事实上,新方案也一般能解决现有系统的瓶颈。但是新方案运行一段时间后,我们又会重新发现,我们绕过了一些问题,面对的是一些新的困境。

为了避免这种情况,在设计新方案的时候,我们需要尝试弄清楚我们现在系统解决了哪些问题,没有解决哪些问题,无法解决哪些问题;设计新系统,我们能够解决哪些,无法解决哪些。

CAP理论(也许不能说是严格理论,因为我们往往在C、A、P之前寻求平衡)便是基于这样的思考,产生的理论。

2. 什么是CAP

即使是现在,我仍然不是很理解CAP,所以本文也无法清楚的阐述"什么是CAP",这里将列出我的认识,和看到并觉得靠谱的认识。

CAP是Eric A. Brewer在PODC上首次提出,Brewer的一部分工作便设计大型的分布式系统设计与实现,例如Global Search Engines、Distributed Web Caches等。所以CAP理论也是基于分布式(Distributed Systems)的系统,所以下面全部的内容,都需要放到分布式系统的中去理解,否则你会迷失。


Consistency是容易理解的;关于Availability和Partition tolerance,Jeff Darcy在文章Availability and Partition Tolerance做了如下阐述CAP是指Consistency, availability and partition tolerance的缩写,不过理解这三个概念并不容易。CAP理论指出,这三者不可兼得。

“Availability is sacrificed if certain nodes are forced to wait for unbounded time because of a failure. This includes the common approach of forcing non-quorum nodes down, which Brewer alludes to.”

“Partition tolerance is sacrificed if certain requests are forced to wait for unbounded time because of a failure. This is most often the case when a node holding a lock cannot be reached, and quorum loss is not used to break the lock.”

虽然看起来很晦涩,不过这已经是能够看到最清晰的解释了。(如果你仔细看这篇文章后面的评论,还有发现很多有意思的东西)

3. Sample of CAP

符合CAP设计哲学中,两个最典型的案例便是:Google的BigTable和Amazon的Dynamo。前者是一个CA系统,后者则是一个AP系统。

4. CAP 和 MySQL

这里以MySQL Replication(Master-Slave)方案为例。在MS结构中,节点M和节点S,都可以对外提供服务,当其中的一个节点故障,另一个节点仍然能够对外提供服务,所以MS方案认为是满足Availability的;目前MS结构仍然是异步的方式运行,即当主库写入时,备库未必一定也写入了,备库甚至允许短暂和主库断开连接,而且当主库处理请求时,也无需确认备库的状态,所以MS结构是满足Partition tolerance的;但是由于MS结构的异步特性,我们看到主备的数据是可能不一致的,即不满足Consistency。

Semi-sync Replication则是在Consistency要求更严格,同时在部分失去Partition tolerance;如果MySQL使用DRBD(严格模式) 做HA方案,则实现了Consistency,就失去了Partition tolerance。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
angular21-关于指令标准属性
angular21-关于指令标准属性
10 0
我个人总结的Halcon内存管理心得笔记,关于C#/C++内存释放
我个人总结的Halcon内存管理心得笔记,关于C#/C++内存释放
591 0
关于盘古
盘古是什么? 盘古用来做什么?盘古怎么做到的?
3457 0
图表(Chart & Graph)你真的用对了吗?
工作中,我们常常会遇到各式各样的数据,例如网站性能,销售业绩,客户服务 、营销活动等数据。对于这些数据,有哪些行之有效的方法来形象化数据,挖掘数据关系,提升数据价值呢? 答案就是将这些数据可视化。
1151 0
关于某道C#上机题的OO
前两天在园子里,有人出了一道《关于一道C#上机题的一点想法》,大概的意思呢是利用OO的思想来进行编程,接着又有一位朋友,也写了自己的答案,此朋友非常厉害,从类图,接口,封装,多态,都一一实现,实在让我佩服,不过真有点过度设计的味道,接着又有一大虾,完成了自己的OO答案,把泛型,可变,不可变都一一列举,实在令人佩服啊,可我觉得,或许是我理解错了,但我觉得三位,你们都偏离了题目,偏离了OO,你们只是利用了OO的特性。
788 0
+关注
19
文章
1
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载