什么是 CAP 理论
CAP 是 Consistency、Availability、Partition tolerance 三个词语的缩写,分别表示一致性、可用性、分区容错性。
-
一致性(Consistency):所有节点在同一时间读到的数据都是相同的,写操作后的数据能立即在所有节点上读取到。CAP 理论中的一致性是强一致性。
-
可用性(Availability):系统在任何非故障情况下,都能在有限的时间内对客户端的请求给出响应,即使是错误响应。高可用意味着系统总是可以访问和操作。
-
分区容错性(Partition tolerance):即使网络出现分区(即部分节点之间的通信中断),系统仍然能够继续提供服务。在分布式系统中,由于网络问题的不可避免性,分区容错性是非常重要的。
CAP 不可能三角
CAP 理论表明,在设计分布式系统时,只能同时满足 2 个特性。
-
CA 系统:如果放弃 P(分区容错性),即假设网络永远不会分区,那么可以设计出一致性和可用性都高的系统。(但在现实世界中,网络分区是难以避免的,因此这样的系统在实际部署中可能不太可行。)
-
CP 系统:如果放弃 A(可用性),在发生网络分区时,优先保证数据的一致性,牺牲部分请求的响应,直到系统恢复一致状态后再提供服务。(许多分布式数据库系统属于此类,如 MongoDB 的某些配置。)
-
AP 系统:如果放弃 C(强一致性),则在分区发生时,系统仍能继续提供服务,但可能会返回旧的数据或临时不一致的数据,以保证高可用性。许多面向互联网的服务会选择这种模式,如 DynamoDB,通过最终一致性模型来实现。
为了达到良好的响应性能来提高用户体验,大多数互联网服务选择保证 AP 这 2 个特性,放弃强一致性,保证 最终一致性。
最后,关于 CAP 理论有个误解:就是认为无论在什么情况下,分布式系统都只能在 C 和 A 中选择 1 个。 事实上,在不存在网络分区的情况下(也就是分布式系统正常运行时),C 和 A 能够同时保证。只有当发生分区故障的时候,也就是说需要 P 时,才会在 C 和 A 之间做出选择。
Reference