面试中偶尔碰到HR会问CAP,所以总结一下
什么是CAP原则?为什么只能满足两个?
分布式系统最大的难点就是各个节点的状态如何同步,CAP定理是这方面的基本定理
C:数据一致性
A:高可用性
P:分区容错性
首先是为什么只能满足两个? 当有多个分区时,必须保证分区间的信息是互通的,因此必须保证P使用;
而CA是互相矛盾的,当保证两个区数据一致时,当G1分区进行写操作,那么G2分区就要加锁,
保证G1分区写操作完成,并进行数据更新到G2分区,再此期间,无法保证能提供服务,
因此无法保证A高可用性。同理保证高可用时无法保证数据一致性。
举例
**zookeeper** :**CP**只能有一个主机器(没有多主),多个从机器,因此只能保证数据一致性。
**redis** : AP 可以有多个主机器,多个从机器,因此只能保证高可用性。
实例
电商项目:有时页面抢购显示还有10个,但是实际已经没有了,只是保证了高可用性吗,没有保证数据一致性。
金融项目:转账时,有页面奔溃或者其他情况时必须保证前后vv端的数据一致性。所以遇到问题,经常直接崩溃,不能保证高可用性。