什么是CAP理论
- C(Consistency )一致性,理论上的C是一种数据的强一致性;一个操作如果返回成功,那么之后的读请求都必须读到最新的数据,如果失败,那么所有的读请求都不能读到这个数据
- A(Availability)可用性,是指服务在任何一个时间节点,都必须保证100%的可用性,99%都不行
- P(Partition-tolerance)分区容错性,是指在分布式系统中,各种网络原因导致的,系统被分割成了很多个独立的部分,他们的网络不通
概括性的其实就是:
在分布式系统中,CAP 三个中,只能有2个能够同时满足
注意!
这个只是理论的!
这个只是理论的!
这个只是理论的!
我们从现实角度出发,任何一台机器,任何一个系统,他们之间竟然是通过网络来进行通信,因此,必然必然必然会存在
- 网络请求送达不到的情况
- 机器是一定一定会有一定的概率会宕机的(火烧数据库,谁能避免)
因此CAP理论中的,P是一个必然会存在的东西,他是不可能会被舍弃的,看似3选2的理论,其实P已经是内定了
所以很多时候讨论系统的时候,我们都会说,他是CP系统,或者是一个AP系统
那么系统真的就只能是这样吗?
不是的!!
因为理论上的东西,太过于理论了,就跟高中物理学的,光滑的地面一样,这是不成立的,因为不成立,就导致,其实3个是有共存的情况的,只不过大家对于CAP的理解,不一样罢了
我们来看C,一致性,在理论中,他是【强一致性】,但是呢,实际系统中,有很多一致性,有序列一致性,最终一致性,这些其实都是一致性,就看系统怎么选择
同样的,我们来看A,可用性,可用性,理论中,他是100%可用,你觉得可能的?不存在的,成本那么高,而且,我火烧数据库,你给我扯个屁的100%可用,可用性有99%可用,90%可用,80%可用,这些都是根据具体系统的定义我们来看的。
回过头来看我们的系统的时候,会发现,那,理论上是不行的东西,换换概念,降低一下指标,没问题吧
A、分区容错率,那如果在没出现网络分区之前,我尽可能的保证,A和P都是可以的吧
B、那如果网络分区出现了,在出现的时候,我尽量保证高可用,但是能在一定程度上,我保证整个系统的最终一致性,没问题吧~
C、那如果网络分区出现了,我尽可能地保证数据强一致性的同时,来保证系统的高可用,没问题吧
因此,这个cap理论,我觉得关键在于,对于这个指标,他不是0和1的区别,他是一个从0%到100%之间的取舍,取决于系统应该怎么选择,根据自己的业务场景来选择罢了,他提供的理论基础,是让我们在选择了其中2个的同时,应该尽可能的保证另外一个指标,CAP理论,更多想表示的应该是这些指标的牵扯关系,而不是有你没我的关系