CAP理论定义
CAP定理又称CAP原则,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),最多只能同时三个特性中的两个,三者不可兼得。
解析三原则
1、一致性原则(Consistency)
“all nodes see the same data at the same time”,即在多节点情况下,各个节点的数据同时更新保持同步,这个就是分布式一致性。
2、可用性原则(Availability)
“Reads and writes always succeed”,指的是所有的服务都可以在规定的时间内正常访问,而且是一直可用。这里可以参考euraka的失效剔除功能,保证了服务可用性。
3、分区容错性(Partition tolerance)
分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性或可用性的服务。
上面可以理解为:
- 一致性:数据同步
- 可用性:服务保活
- 容错性:集群部署
为什么CAP原则?
解析:
- 如果CA满足看P是否能满足?
- 如果AP满足看C是否能满足?
- 如果CP满足看A是否能满足?
1、如果CA满足看P是否能满足?
我们来分析:当C(Consistency)一致性A(Availability)可用性都满足时会发生什么?为了保持数据的一致性,数据在各个节点间同步需要花费时间,同时保证服务可用意味着服务器的数量不能过多,因为过多就会导致数据同步时间过长,而导致超时触发熔断降级机制,这与可用性相悖。但是如果要满足容错的话就必须是多节点,而多节点意味着同步数据同步时间必定过长,这两无法做到同时满足所以就导致了情况1是无法满足。
2、如果AP满足看C能否满足?
我们来分析:当A(Availability)可用性和P(Partition tolerance)分区容错性都满足的情况下会发生什么?服务器多节点部署,导致服务器数量剧增,同时需要保证服务节点可用,这就说明服务节点与节点之间的调用时间无法过长,否则就会导致服务节点不可用。如果在这种情况下,满足C(Consistency)一致性,就会出现服务器因同步数据而导致浪费大量的时间,导致服务器不可用(超过了规定时间范围),所以当AP满足时是无法同时满足C的。
3、如果CP满足看A是否能满足?
我们来分析:当C(Consistency)一致性和P(Partition tolerance)分区容错性都满足时,这个时候的服务器情况是怎么样的?必定是数量多并且为了保证数据同步大量的服务器节点会进入“超长待机”状态,此时如果再让服务满足A(可用性)的话,就会出现大部分的服务节点不可用,线程池被挤爆,然后整个项目宕机。所以情况3是无法满足的。
如何抉择/取舍?
一般来讲P(容错性)是一定要满足的,其他可以根据项目需求选择A或者C。
就目前市场来说,CP更加符合金融类项目,AP更加适合商城类项目。