CAP定理的图解证明
该CAP定理是在分布式系统中的一个基本定理,指出任何分布式系统最多可以有两个以下三个属性。
- ç onsistency
- 一个 vailability
- P artition tolerance
本指南将总结 Gilbert和Lynch的规范以及 带有图片的CAP定理的证明!
什么是CAP定理?
CAP定理指出分布式系统不能同时具有一致性,可用性和分区容错性。听起来很简单,但保持一致意味着什么?可用?分区容忍?哎呀,分布式系统究竟是什么意思?
在本节中,我们将介绍一个简单的分布式系统,并解释该系统可用,一致和分区容忍的含义。有关系统和三个属性的正式描述,请参阅 Gilbert和Lynch的论文。
分布式系统
G 1G1G 2G2vvv 0v0G 1G1G 2G2
客户端可以请求从任何服务器进行写入和读取。当服务器收到请求时,它会执行它想要的任何计算,然后响应客户端。例如,这是写的样子。
这就是读取的样子。
现在我们已经建立了系统,让我们回顾一下系统的一致性,可用性和分区容忍性意味着什么。
一致性
以下是Gilbert和Lynch描述一致性的方法。
在写操作完成后开始的任何读操作都必须返回该值,或者后续写操作的结果
在一致的系统中,一旦客户端将值写入任何服务器并获得响应,它就希望从它读取的任何服务器返回该值(或更新的值)。
以下是不一致系统的示例。
v 1v1G 1G1G 1G1G 2G2v 0v0
另一方面,这是一个一致 系统的例子。
G 1G1G 2G2G 2G2vvv 1v1
可用性
以下是Gilbert和Lynch描述可用性的方法。
系统中非故障节点收到的每个请求都必须产生响应
在可用系统中,如果我们的客户端向服务器发送请求并且服务器未崩溃,则服务器必须最终响应客户端。不允许服务器忽略客户端的请求。
分区容差
以下是吉尔伯特和林奇描述分区的方法。
允许网络丢失从一个节点发送到另一个节点的任意多条消息
G 1G1G 2G2
尽管有任意网络分区,我们的系统必须能够正常运行才能实现分区容错。
证据
现在我们已经熟悉了一致性,可用性和分区容错的概念,我们可以证明系统不能同时拥有这三者。
假设确实存在一致,可用和分区容忍的系统。我们要做的第一件事是分区我们的系统。看起来像这样。
v 1v1G 1G1G 1G1G 1G1G 2G2α 1α1
G 2G2G 2G2G 2G2G 1G1v 0v0α 2α2
G 2G2v 0v0v 1v1G 1G1
我们假设存在一个一致的,可用的分区容忍系统,但我们只是表明存在执行系统不一致的任何此类系统。因此,不存在这样的系统。
来自:https://mwhittaker.github.io/blog/an_illustrated_proof_of_the_cap_theorem/