分布式理论:CAP定理

分布式理论:CAP 定理

什么是 CAP 定理

2000年7月的时候,加州大学伯克利分校的Eric Brewer 教授提出了 CAP 猜想,2年后,被来自于麻省理工的Seth Gilbert 和 Nancy Lynch 从理论上证明了猜想的可能性。从此,CAP 定理正式在学术上成为了分布式计算领域的公认定理,并深深影响了分布式计算的发展。

CAP 定理告诉我们,一个分布式系统不可能同时满足一致性(C:Consistency)可用性(A:Availability)分区容错性(P:Partition tolerance) 这三个基本需求,最多只能同时满足其中的两个

选项描述
C (Consistence)一致性,分布式环境中,数据在多个副本之间能够保持一致的特性(严格的一致性)。在一致性的需求下,当一个系统在数据一致的状态下执行更新操作后,应该保证各个节点的数据仍然处于一致的状态。所有的副本都是最新的
A (Availability)可用性,指系统提供的服务必须一直处于可用的状态,每次请求都能获取到非错的响应,但是不保证获取的数据为最新数据。系统总是可写
P (Partition tolerance)分区容错性,分布式系统在遇到任何网络分区故障时,仍然能够提供满足一致性和可用性的服务,除非整个网络环境都发生了故障。允许网络通讯出现故障,不论是短暂延时或长时间故障,容忍网络隔离意味着系统横向扩展性增强

为什么只能 3 选 2

在这里插入图片描述
首先,我们反证一下,能不能同时满足这三个条件?

假设有一个系统如下:
在这里插入图片描述
上图整个系统由两个节点配合组成,节点之间通过网络通信,当节点A进行数据库更新时,需要同时更新节点B的数据库(这是一个原子操作)。

上面这个系统怎么满足CAP呢?

C : 当节点A更新时,节点B也要更新

A : 必须保证两个节点都是可用的

P : 当节点A/B 出现了网络分区,必须保证对外可用

可见,根本无法同时满足CAP,因为只要出现了网络分区,C就无法满足,因为节点A根本连不上节点B。如果强行满足C 一致性,就必须停止服务,从而放弃可用性A。

所有,最多满足两个条件。

组合分析结果
CA满足一致性和可用性,放弃分区容错。说白了,就是一个整体的应用,如果希望能够避免系统出现分区容错性的问题,一种较为简单的做法是将所有的数据(或者仅仅是那些与事务相关的数据)都放在一个分布式节点上。这样做虽然无法100%保证系统不会出错,但至少不会碰到由于网络分区带来的负面影响。但是放弃P的同时,意味着放弃了系统的可扩展性
CP满足一致性和分区容错性,一旦系统遇到网络分区或者其他故障或为了保证一致性时,放弃可用性,那么受到影响的服务需要等待一定的时间,因此在等待期间系统无法正常对外提供服务,即不可用
AP满足可用性和分区容错性,当出现网络分区,同时为了保证可用性,必须让节点继续对外服务。这样必然导致失去一致性。这里所说的放弃一致性,并不是完全不需要数据一致性,如果真是这样,那系统数据就没意义了。
这里实际上指的是放弃数据的强一致性,保留数据的最终一致性。这样的系统虽然无法保证数据实时的一致性,但是能够承诺最终会达到一个一致的状态。
这就引入了一个时间窗口的概念,具体多久能够达到数据一致取决于系统的设计,主要包括数据副本在不同节点之间的复制时间长短

从 CAP 定理可以看出,一个分布式系统不可能同时满足一致性、可用性和分区容错性这三个基本需求,最多只能同时满足其中的2个,还需要明确一点的是:

对于一个分布式系统而言,分区容错性是最基本的要求

因为既然是一个分布式系统,那么分布式系统中的组件必然需要被部署到不同的节点,否则也就没有所谓的分布式系统了。因此必然出现子网络。而对于分布式系统而言,网络问题又是一个必定会出现的异常情况,因此分区容错性也就成为了一个分布式系统必然需要面对和解决的问题。因此架构师往往需要把精力花在如何根据业务特点在 C(一致性)A(可用性) 之间寻找平衡。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值