分布式系统的CAP理论

分布式系统的CAP理论

马草原 837 2020-12-12

分布式系统的CAP理论

什么是CAP理论?

CAP 理论告诉我们,一个分布式系统不可能同时满足数据一致性、服务可用性和分区容错性这三个基本需求,最多只能同时满足其中的两个。
CAP理论描述了分布式系统设计的边界:在满足分区容错性的前提下,系统无法同时满足数据一致性和服务可用性。

  • C:数据一致性(Consistency)

指一个分布式系统里的所有节点上的数据做到线性一致性(强一致性),在一个成功的写入操作之后,不管写入操作是从哪个节点写入的,后续读取的时候不管访问任何一个节点,都可以读取到正确的数据。

  • A:服务可用性(Availability)

指只要访问到分布式系统的一个正在运行的节点,都可以在一定时间内获得响应。

  • P:分区容错性(Partition-tolerance)

指在分布式系统网络出现分区的时候,分布式系统依然可以保障数据一致性、服务可用性,并且正常对外提供服务。由于分布式系统本身就是基于网络通信构建的,而网络通信一定有延迟,因此这个特性我们没有其他的选择。

CAP理论的证明

为什么分布式系统中,网络分区的情况下,我们必须在一致性或可用性之间进行权衡?

下图表示的是一个常见的分布式系统架构,如果数据中心1和数据中心2之间的网络断了,这时候就发生了网络分区,接下来我们有2个选择:

  • AP:客户依然可以正常使用应用系统,但是数据中心1和数据中心2的数据是不一致的
  • CP:假如数据中心1是主机房,为了达到线性一致性,这时候所有连到数据中心2的客户都不能使用应用程序,直到两个数据中心之间的网络恢复。

cporap

思考

  • CAP里的可用性,是指访问到任何一个正在运行的节点,都会在合理的时间内返回结果。这里合理的时间是多久,不同业务场景下对于响应时间的要求是不一样的,在线业务系统的耗时非常敏感,但是离线批处理系统则耗时不敏感。
  • CAP里的一致性,是指强一致性,在现实的分布式系统中,要达到强一致性,要付出的成本是很高的,很多业务场景下并不需要这种强一致性而是最终一致性。
  • 对于 CAP 理论,我们不会简单地三选二或者二选一。对于 AP 模型的系统,我们会努力去提升数据一致性的级别,而对于 CP 模型的系统,我们会努力去提升系统可用性的级别。