一、CAP定理
2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想。2年后,麻省理工学院的Seth Gilbert和Nancy Lynch从理论上证明了CAP。之后,CAP理论正式成为分布式计算领域的公认定理。
CAP定理,又称CAP原则和作布鲁尔定理,指的是在一个分布式系统的三个指标:
C代表一致性(Consistency)
A代表可用性(Availability)
P代表分区容错性(Partition Tolerance)
在一个分布式系统中这三者不可兼得,最多只能同时满足C、A、P 这三项中的两项。
二、CAP权衡
1)CA without P
如果不要求P(不允许分区),则C(强一致性)和A(可用性)是可以保证的。但放弃P的同时也就意味着放弃了系统的扩展性,也就是分布式节点受限,没办法部署子节点,这是违背分布式系统设计的初衷的。
2)CP without A
如果不要求A(可用),相当于每个请求都需要在Server之间强一致,而P(分区)会导致同步时间无限延长,如此CP也是可以保证的。很多传统的数据库分布式事务都属于这种模式。
3)AP wihtout C
要高可用并允许分区,则需放弃一致性。
一旦网络问题发生,节点之间可能会失去联系。为了保证高可用,需要在用户访问时可以马上得到返回,则每个节点只能用本地数据提供服务,而这样会导致全局数据的不一致性。
比如12306买票,在点击购票的一瞬间是有票的,但是付款的时候可能已经没了,这就是为了保证用户体验牺牲了数据的一致性,但是还是有最终一致性的保证的,在最终购票的时候还是会保证数据一致性。