分布式中的CAP定理

141 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

2.1.CAP定理

1998年,加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标。

  • Consistency(一致性)
  • Availability(可用性)
  • Partition tolerance (分区容错性)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FEziz2XR-1648950495354)(assets/image-20210724170517944.png)]

它们的第一个字母分别是 C、A、P。

Eric Brewer 说,这三个指标不可能同时做到。这个结论就叫做 CAP 定理。

2.1.1.一致性

Consistency(一致性):用户访问分布式系统中的任意节点,得到的数据必须一致。

比如现在包含两个节点,其中的初始数据是一致的:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9gEvcgJw-1648950495355)(assets/image-20210724170704694.png)]

当我们修改其中一个节点的数据时,两者的数据产生了差异:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nh965huC-1648950495356)(assets/image-20210724170735847.png)]

要想保住一致性,就必须实现node01 到 node02的数据 同步:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CcH7knNZ-1648950495356)(assets/image-20210724170834855.png)]

2.1.2.可用性

Availability (可用性):用户访问集群中的任意健康节点,必须能得到响应,而不是超时或拒绝。

如图,有三个节点的集群,访问任何一个都可以及时得到响应:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K51dGGQj-1648950495357)(assets/image-20210724170932072.png)]

当有部分节点因为网络故障或其它原因无法访问时,代表节点不可用:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EkqGvbIZ-1648950495357)(assets/image-20210724171007516.png)]

2.1.3.分区容错

Partition(分区):因为网络故障或其它原因导致分布式系统中的部分节点与其它节点失去连接,形成独立分区。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MqWOwZjQ-1648950495357)(assets/image-20210724171041210.png)]

Tolerance(容错):在集群出现分区时,整个系统也要持续对外提供服务

2.1.4.矛盾

在分布式系统中,系统间的网络不能100%保证健康,一定会有故障的时候,而服务有必须对外保证服务。因此Partition Tolerance不可避免。

当节点接收到新的数据变更时,就会出现问题了:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MVg15hQU-1648950495358)(assets/image-20210724171546472.png)]

如果此时要保证一致性,就必须等待网络恢复,完成数据同步后,整个集群才对外提供服务,服务处于阻塞状态,不可用。

如果此时要保证可用性,就不能等待网络恢复,那node01、node02与node03之间就会出现数据不一致。

也就是说,在P一定会出现的情况下,A和C之间只能实现一个。