画图证明CAP理论

Posted IT原理

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了画图证明CAP理论相关的知识,希望对你有一定的参考价值。

https://mwhittaker.github.io/blog/an_illustrated_proof_of_the_cap_theorem/


CAP理论是分布式系统的基础理论.CAP理论阐述到,任意的分布式系统最多含有下列三个属性中的最大两个.

  • 一致性

  • 可用性

  • 分区容忍性

什么是CAP理论?
1

CAP理论讲到分布式系统是不能同时具有一致性,可用性以及分区容忍的.听起来非常简单,但是一致性\可用性\分区容忍性都是什么意思呢?

在这个章节中,我们将要介绍一个简单的分布式系统,并且解释在这个系统里,一致性\可用性\分区容忍性都意味着什么.


分布式系统
2


让我们试想一个简单的分布式系统。这个系统有两个服务器G1、G2组成。这两个服务器都持有相同的变量V,其初始值为v0。G1和G2之间可以进行通信,并且可以与外部的客户端进行交互.下面是我们系统的样子.

画图证明CAP理论

客户端可以请求对任意服务器进行读写.当服务端收到请求时候,会进行必要的计算然后进行响应. 下面是写请求的系统图.

画图证明CAP理论画图证明CAP理论画图证明CAP理论

下面是读请求看起来的样子:

画图证明CAP理论画图证明CAP理论

目前我们的系统已经建立起来了,让我们过一下一致性/可用性/分区容忍性对这个系统意味着什么.

一致性
3

在一致性系统里,一旦将值写入到任意的服务器并且得到响应,并且从任意的其它服务器中能够获取到最新值.

下面是非一致性系统样子:

画图证明CAP理论

客户端将V1写入到G1,并且G1进行了确认.但是当从G2读取的时候,读取的是过期值V0.

另一方面,下面是一致性系统的例子.

画图证明CAP理论

在这个系统里, G1在对客户端进行确认前,会将它的值备份到G2上.因此当客户端从G2读取的时候,会读取最新的值V1.


可用性
4


画图证明CAP理论

系统里任一个非奔溃节点在收到请求的之后,必须给出响应结果.


在一个可用的系统里,如果客户端发送请求到服务器,并且服务器没有崩溃,那么服务器最终必须对客户端进行响应.服务器不允许忽略请求.

分区容忍性
5
画图证明CAP理论

允许网络将一个节点发送到另一个节点的任意消息丢弃


这意味着G1和G2发送到另一个节点的消息可以丢弃.如果所有的消息都被丢弃,那么我们系统就看起来如下图这样:

画图证明CAP理论

为了分区容忍性,尽管任意的网络分区,我们的系统必须能够正确的提供功能。


证明

现在我们已经对一致性、可用性、分区容忍性的概念熟悉了,我们就可以证明一个系统里不能同时拥有三个特性.

为了反向证明,假设存在一个一致的,可用的,分区容忍的系统.第一件事就是将系统进行分离.看起来是这个样子的.

画图证明CAP理论


下一步,我们有个客户端,请求将v1写入G1。因为我们的系统是可用的,所以 G1必须进行响应.因为网络是分离的,所以说G1不能将它的值备份到G2.

画图证明CAP理论



下一步,客户端发送一个对G2的读请求.又一次,因为我们系统是可用的,G2必须进行响应.并且因为网络是分离的,G2不能更新来自G1的值,G2会返回V0.


在客户端已经将v1写入到G1后,G2返回V0给客户端.这是不一致的.

我们假设一致的,可用的,分区容忍的系统存在是存在的,但是我们刚看到这样系统的情况下,实际上这样的系统是不一致的.

因此是没有这样的系统的.




个人总结:

CAP分别都是什么意思?

C:强一致性.所有分布式节点在任意时刻都是强一致的

A:  基本可用性

P: 分区容忍性

能否同时支持CAP和CA?

当发生网络分区时,也就不能保证一致性和可用性.因为节点数据不能同步,所以一致性无法满足. 同时因为网络问题,可用性也就不能保证了.

因此只能在AP和CP里选择一个.

AP: 暂时牺牲节点间的强一致性,保证可用性和分区容忍性.

CP: 暂时牺牲可用性,保证一致性和分区容忍性. 当网络分区发生时,为了保证一致性,返回客户端为error.




更多推荐

以上是关于画图证明CAP理论的主要内容,如果未能解决你的问题,请参考以下文章

CAP 理论

分布式CAP理论浅析

cap理论与分布式事务的解决方案

分布式初探——分布式系统的CAP理论

大数据开发者应该知道的分布式系统 CAP 理论

神一样的 CAP 理论被应用在何方?