关于分布式CAP的一些问题.

来源:11-9 总结

melanch_0001

2018-11-21

老师您好,
很多以前不太容易理解的概念从您这里都一下有恍然大悟的感觉.
对于CAP我看过很多网上的解释,但是都没有理解的太透彻.想请教一下.
CAP分别代表什么.为啥P是必须实现的.为啥没有CA的系统.为啥只能实现其中两个.
麻烦您了,谢谢!

写回答

1回答

Allen

2018-11-21

CAP理论是一个比较著名的理论,适用场景主要是分布式系统,记住这个前提哦!~ 

CAP理论是什么?

Consistency (一致性):

“all nodes see the same data at the same time”,即更新操作成功并返回客户端后,所有节点在同一时间的数据完全一致,这就是分布式的一致性。一致性的问题在并发系统中不可避免,对于客户端来说,一致性指的是并发访问时更新过的数据如何获取的问题。从服务端来看,则是更新如何复制分布到整个系统,以保证数据最终一致。


Availability (可用性):

可用性指“Reads and writes always succeed”,即服务一直可用,而且是正常响应时间。好的可用性主要是指系统能够很好的为用户服务,不出现用户操作失败或者访问超时等用户体验不好的情况。


Partition Tolerance (分区容错性):

即分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。

分区容错性要求能够使应用虽然是一个分布式系统,而看上去却好像是在一个可以运转正常的整体。比如现在的分布式系统中有某一个或者几个机器宕掉了,其他剩下的机器还能够正常运转满足系统需求,对于用户而言并没有什么体验上的影响。


以上内容是我复制的概念,如果觉得不好理解,就简单点说 C是一致性,数据无论何时何地都是一样的。 A是可用性,就是服务不会随随便便的就不能用了。 P是分区容错性,说白了就是不同网络分区【可能是跨机房,跨地域】之间的服务可以做到对外提供统一服务。


CAP理论的根本是教导我们在一个分布式系统里,设计的时候不要追求三者都有,这是不可能的。 不存在你说的P是必须实现这件事,至于为什么,给你举个例子:

大部分分布式中间件都是只能满足AP,既高可用和分区容错,从性能与一致性之间它们选择了性能,所以它们追求的是最终一致性【也就是常说的软一致性】,所以它们并不能满足C, 你可以想象Redis、ES等等,读取不同节点是可能会读取到脏数据的,这就是证明

但是类似于MySQL集群,就很明显对CA,既一致性和可用性更看重, 在一定程度上忽略了分区容错性

这一类的例子很多,主要思考一下各个你见过的中间件, 就能解释CAP原则给我们带来的思考了


1
1
melanch_0001
非常感谢!
2018-11-21
共1条回复

Dubbo主流版本打造仿猫眼项目 理解微服务核心思想

实战Dubbo项目+面试技巧,老司机带你畅游微服务

1410 学习 · 582 问题

查看课程