一篇文章搞清楚什么是分布式系统 分布式cap工作原理

专注于Java领域优质技术号,欢迎关注来自:小气旋锋
CAP定理是分布式系统中的一个基本定理,指出任何分布式系统最多可以有以下三个属性中的两个 。
一致性 (Consistency)可用性 (Availability)分区容错性 (Partition tolerance)在本文中,吉尔伯特和林奇对cap定理的说明和证明将以图表的形式简明扼要地加以概括 。
什么是 CAP 定理?CAP定理指出分布式系统不能同时具有一致性、可用性和分区容错性 。听起来很简单,但是一致性、可用性和分区容错是什么意思呢?分布式系统到底是什么意思?
本文将介绍一个简单的分布式系统,并说明分布式系统的可用性、一致性和分区容错性 。有关分布式系统和这三个属性的正式描述,请参考Gilbert和Lynch的论文 。
分布式系统
让我们考虑一个非常简单的分布式系统,它由两台服务器G1和G2组成;两台服务器存储同一个变量V,V的初始值为V 0;G1和G2可以相互通信,也可以与外部客户端通信;我们的分布式系统的架构如下图所示:

一篇文章搞清楚什么是分布式系统 分布式cap工作原理


一个简单的分布式系统
客户端可以向任何服务器发送读写请求 。服务器收到请求后,会根据请求进行一些计算,然后将请求结果返回给客户端 。例如,下图是一个写请求的示例:
一篇文章搞清楚什么是分布式系统 分布式cap工作原理


客户端发起写请求 。
接下来,下图是一个读请求的例子 。
一篇文章搞清楚什么是分布式系统 分布式cap工作原理


客户端发起读取请求 。
现在我们的分布式系统已经建立了,我们来回顾一下分布式系统的可用性、一致性和分区容错的意义 。
一致性
吉尔伯特和林奇在他们的论文中描述如下:
any read operation that begins after a write operation completes must return that value, or the result of a later write operation也就是说,在一致的系统中,客户端向任意服务器发起写请求,向服务器写入一个值并得到响应,之后再向任意服务器发起读请求,它必须读取这个值(或者更新的值) 。
下图是一个不一致的分布式系统的例子:
一篇文章搞清楚什么是分布式系统 分布式cap工作原理


不一致的分布式系统
客户端向G1发起写请求,将V的值更新为v1,得到G1的确认响应;当向G2发起读取v的请求时,读取旧值v0,这与预期的v1不一致 。
符合下图的分布式系统示例:
一篇文章搞清楚什么是分布式系统 分布式cap工作原理


一致分布式系统
在这个系统中,G1在向客户端返回确认响应之前,会将V的新值复制到G2,这样当客户端从G2读取V的值时,就可以读取最新的值v1 。
可用性
吉尔伯特和林奇在他们的论文中描述如下:
every request received by a non-failing node in the system must result in a response也就是说,在一个可用的分布式系统中,如果一个客户端向其中一个服务器发起请求,而服务器没有崩溃,那么这个服务器最终必须响应客户端的请求 。
分区容差
吉尔伯特和林奇在他们的论文中描述如下:
the network will be allowed to lose arbitrarily many messages sent from one node to another也就是说,在服务器G1和G2之间发送的任何消息都可能丢失 。如果所有的消息都丢失了,那么我们的系统将如下所示:
一篇文章搞清楚什么是分布式系统 分布式cap工作原理

推荐阅读