图解分布式系统CAP定理

CAP定理是分布式系统的基础理论。其中C代表一致性(Consistency),A代表可用性(Avalability),P代表分区容错性(Partitiontolerance)。CAP定理说的是,在一个分布式系统中,不可能同时满足一致性、可用性和分区容错性这三个条件。为了说明CAP定理为什么成立,我们先要搞清楚其中这三个条件的具体含义。

为了便于解释,我们以一个非常简单的分布式系统作为例子。这个系统由两台服务器组成,分别为G1和G2。在这两台服务器上,记录着同一个变量值v。该变量的初始值是v0。G1和G2之间可以通过网络进行通信。同时,它们也可以和一个客户端之间进行通信。我们的系统看起来是这样的:

客户端可以对任意一台服务器发送读写请求。当服务器收到请求后,它会对变量v进行更新,并将更新后的结果返回给客户端。读的过程是这样的

图解分布式系统CAP定理

现在我们有了一个分布式系统,下面我们就在这个系统上解释一致性、可靠性和分区容错性的具体含义。一致性如果一个读请求发生在一次写请求之后,那么该读请求返回的值必须是这次写请求的值,或者是更晚的写请求的值。这意味着,在一个满足一致性的系统中,客户端向任意一个服务器写入数据,得到的返回值至少是这次写入的值,或者是由更晚一些的其它写操作产生的更新的值。对于一个不一致的系统,它的读写过程是这样的:

这里,客户端向G1发送写请求,并得到响应。但是当它向G2读取时,读到的依然是初始值v0。而在一个一致性系统中,读写过程是这样的:

在这个系统中,G1在发送响应之前,先将自己的值同步给G2。当客户端向G2读取数据时,得到的就是最新的值v1。可用性系统中正常工作的结点必须响应每一个请求。也就是说,如果客户端发送请求给一个服务器,并且该服务器没有挂掉,那么它就必须响应客户端的这个请求,而不能将其忽略掉。分区容错性网络中可以丢失任意多的消息。也就是说,G1发给G2的消息可以在网络中被丢掉。

分区容错性要求系统必须在网络被任意分割的情况下还能够正常工作。CAP定理的证明下面我们来证明,一个分布式系统不可能同时满足上面定义的一致性、可用性和分区容错性三个条件。我们使用反正法,即假设存在这样一个系统可以同时满足这三个条件。如果是这样的话,我们就将这个系统中的结点间的网络断开,

然后客户端向G1发送写请求,G1中值被更新为v1。由于系统满足可用性,所以G1必须响应写请求,客户端认为写成功。同时,由于系统是分区隔断的,所以G1不能将v1值同步给G2。

接着,客户端向G2发送读请求。同样,由于系统满足可用性,所以G2必须响应。但是由于G2无法同步G1的值,所以G2只能返回v0。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181027A0XQPK00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券