什么是CAP?
分布式系统有三个指标:一致性,可用性和分区容错性,这三个指标不可能同时达到,只能保证其中的两个(CP/AP)称为CAP定理.
Consistency:
一致性:客户端的读操作能保证返回的数据一定是最新的,如下图:
客户端向服务端1写数据 x1,之后再向服务端1读数据返回x1,符合数据的一致性,客户端也可能向服务端2读数据,服务端2可能还没有同步数据返回x,为了保证一致性,服务端1需要向服务端2写数据以同步数据,服务端2应该在数据同步之前返回error,这就不能保证可用性,这里也体现出了一致性和可用性两者是不可兼得的,因此只能有CP和AP两种组合。
Availability:
可用性:客户端的请求一定要在合理的时间内返回合理的响应,如下图:
客户端向服务端1写数据 x1,之后再向服务端1读数据返回x1,客户端也可能向服务端2读数据,服务端2可能还没有同步数据返回x,这就不能保证一致性。
Partition tolerance
分区容错性:分布式系统分布在多个子网中,每个子网络就叫做一个分区,当一个子网络发生故障或网络之间通信发生故障如拥塞、中断、丢包之后,即一台服务器宕掉之后,系统仍可以提供正常的服务,这个必成立。
场景
根据不同的业务场合选择不同的组合:比如更新版本的时候需要一个个更新,这时候对一致性要求就不需要那么高,新旧版本都可以用;但比如转账的时候对数据一致性就比较高。