[翻译]CAP理论及其证实

CAP是全部分布式系统的基础理论,任何分布式系统只能知足如下三种状态中的任意两种。node

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

何为CAP理论?

CAP理论是指一个分布式系统不能同时知足一致性、可用性和分区容错性。听起来简单,但一致性、可用性和分区容错性分别是指啥?甚至分布式系统是啥?git

在这篇文章中,咱们会引入一个简单的分布式系统来解释清楚何为可用性、一致性、和分区容错性。更多信息能够参考Gilbert和Lynch的论文Perspectives on the CAP Theoremgithub

分布式系统

假设咱们有这样一个简单的分布式系统,它包含两个服务G1和G2,这俩服务都保存着同一变量v,其初始值是v0。 G1和G2之间能够互相沟通,同时他们也能够和其余的客户端沟通,以下图所示:
在这里插入图片描述网络

客户端能够读取和修改任意一个服务端的值。当服务端收到请求,他会作相应处理后回复客户端。若是是写请求执行过程以下图所示:
在这里插入图片描述分布式

若是是读请求,执行过程以下图:
在这里插入图片描述.net

如今咱们已经创建了一个简单的分布式系统,接下来咱们分别看下一致性、可用性和分区容错性。blog

一致性

Gilbert和Lynch的论文中是这样描述一致性的:图片

any read operation that begins after a write operation completes must return that value, or the result of a later write operation
在某个写操做完成以后的任何读操做都必须返回该写操做写入的值,或者再以后的写操做写入的值。rem

在一个一致性的系统中,若是一个客户端写入了某个值到任意一个服务端上,而且获得了服务端的确认,那么客户端再去读的时候,无论是读的哪一个服务,都指望拿到写入后的值或者是更新的值。get

下图所示是有个不保证一致性的系统:
在这里插入图片描述

客户端向G1发送了写请求将v的值从v0变动到v1,而后也获得了G1的写入成功确认,但从G2读到的数据仍是旧的数据v0。

下图是一个保证一致性的系统:
在这里插入图片描述

在这个系统中,当客户端向G1写入数据v1后,G1也会把数据同步到G2,当G1 G2都完成数据更新后,G1才会告诉客户端写入成功。 以后不过是客户端从G1读仍是从G2读,读到的都是最新的值v1。

可用性

Gilbert和Lynch的论文对可用性的描述以下:

every request received by a non-failing node in the system must result in a response
任何一个在线的节点收到的请求必须都作出相应。

在保证可用性的系统中,若是客户端向某个没有宕机的服务端发送了请求,服务端必须响应客户端的请求,不能选择忽略掉客户端的请求。

分区容错性

Gilbert和Lynch的论文对分区容错性的描述以下:

the network will be allowed to lose arbitrarily many messages sent from one node to another
容许网络丢失从一个服务节点到另一个服务节点的任意信息

这就意味着在咱们的分布式系统中,G1发送给G2的信息可能会丢失,若是全部的信息都丢失了,咱们的系统可能就会变成这样。
在这里插入图片描述

为了保证分区容错性,咱们的系统必须在任意个不通的网络分区下正常工做。

证实

如今咱们已经了解了什么是一致性、可用性和分区容错性,接下来咱们证实下为何一个分布式系统不能同时知足这三者。

假设存在一个同时知足一致性、可用性和分区容错性的分布式系统。首先咱们把这个系统分红两个部分,以下图:
在这里插入图片描述
接下来客户端将G1中的v从v0改为v1,由于要知足可用性的要求,G1必须响应客户端的写入请求,可是由于网络的问题,G1无法将数据同步到G2。Gilbert和Lynch将这个阶段称为alpha1阶段,以下图:
在这里插入图片描述

再而后,假设有个客户端从G2读了v的值,由于知足可用性要求,G2也必须正常响应,由于网络的问题,G2没有更新到G1的数据,因此G2只能返回v0,Gilbert和Lynch将这个阶段称为alpha2阶段,以下图:
在这里插入图片描述

在这里G1返回v1,G2只能返回v1,产生了不一致,和咱们的假设相悖,因此证实同时知足一致性、可用性和分区容错性的分布式系统不存在。

原文连接

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

本文来自https://blog.csdn.net/xindoo

相关文章
相关标签/搜索