为什么CAP不能同时满足的简单理解
cap定理:前提是分布式系统中,cap三个只能满足两个,不能同时满足三个特性。
Consistency (一致性):所有节点在同一时间的数据都是完全一致的。
Availability (可用性):服务一直是可用的。
Partition Tolerance (分区容错性): 分布式系统在某个节点或分区故障时,仍然能对外提供满足一致性或可用性的服务。
cap只能取其二,不能三者皆得,为什么,我来解释下:
首先说分区容错性,基本上分布式系统都要满足这个,否则当某个节点挂了,就不对外提供服务了,那还能叫分布式系统么,挂一个就都挂了,那就是单机系统啊,分布式就没意义了。
好了,那么如果一般情况下都要满足分区容错性,那么就看看一致性和可用性能不能再同时满足。
比如说有3台机器ABC,正常情况下,3台机器互相数据同步,对外提供服务
如果某一时刻,A机器和BC机器断开了,那么应该怎么办?
要么就是继续都对外提供服务,那么此时就会出现ABC三台机器对外数据不一致的情况,这就是满足了可用性,但不满足一致性
另一种情况就是一旦发现机器不可用了,就暂停对外服务,直到ABC互相连通,再对外提供服务,这就是满足了一致性,但不满足可用性了,因为暂定服务这段时间服务就不可用了
所以说这种情况下,同时要满足可用性和一致性是不可能的,具体舍弃哪个,得看业务情况
一般情况下,比如银行业务,首要的是数据一致性,只要数据不一致,哪怕对外停止服务,也要数据一致,所以会考虑CP
而秒杀业务,首要的更多是可用性,所以会适当放弃数据一致性,大不了用户看到有货,但下订单付款的时候失败了,这种事也算勉强正常吧,所以这种业务会考虑AP