-
什么是 CAP ?
CAP即 一致性 (Consistency)、可用性 (Availabiility)、分区容错性 (Tolerance of network Partition) C:多个数据副本间 在同一时间数据保持一致 A:系统提供的服务一直处于可用状态,每个用户请求要在限定的时间内返回结果 P:除非整个分布式系统瘫痪,否则在某些分区发生故障时,系统对外提供的服务仍需保证一致性和可用性
-
定义理解
C:一致性,可从客户端 和 服务端两个角度进行理解: 客户端:一致性主要指 多并发访问时 数据被更新后 如何获取数据的问题 服务端:如何将被更新的数据同步到 整个分布式系统,以保证数据最终一致性 一致性又可以再分为 强一致性、弱一致性(如:最终一致性) 1. 强一致性:更新过的数据对后续的访问都可见。即同一时间,所有分布式节点中数据保持一致 2. 弱一致性:能够容忍后续的部分节点或者全部节点访问不到。 3. 最终一致性:是弱一致性的其中一种,保证用户一段时间内最终能读取到某操作对系统特定数据的更新。 可以理解为,在一段时间后,节点的数据会最终达到一致状态。 比如DNS系统,由于DNS系统采用多级缓存,所以修改DNS记录后并不会使全部DNS服务节点同时生效, 需要等待DNS服务器缓存过期后,向其他服务器进行记录更新才能实现数据一致性。 A: 可用性,即服务可用,且响应时间正常 P:分区容错性,即某个节点故障时,仍能对外提供满足一致性、可用性的服务
-
Eric Brewer猜想:一致性、可用性、分区容错性 三者无法同时在分布式系统中被满足,只能三选二。
- CA : 即牺牲 分区容错性,强调强一致性、可用性。但是分布式系统没有了分区还是分布式系统吗?
这种情况一般出现在单服务器上,数据库和程序均部署在同一台机器,也就不存在所谓的分布式了。 - CP:即不要求可用性,换句话说就是不要在指定时限内响应请求,但要求数据一致性、分区容错性。
这样可能出现请求无限等待响应的情况发生。很多传统的分布式数据库事务都属于这种模式。 - AP:即不要求数据强一致性。一旦分区故障,可能导致节点间数据不一致。
- CA : 即牺牲 分区容错性,强调强一致性、可用性。但是分布式系统没有了分区还是分布式系统吗?
推荐一篇不错的博文: https://blog.csdn.net/chen77716/article/details/30635543