目录:数据库
- 什么是 CAP 定理
- 为何只能 3 选 2
- 能不能解决 3 选 2 的问题
- 引用
1. 什么是 CAP 定理
2000 年的时候,Eric Brewer 教授提出了 CAP 猜测,2年后,被 Seth Gilbert 和 Nancy Lynch 从理论上证实了猜测的可能性,今后,CAP 理论正式在学术上成为了分布式计算领域的公认定理。并深深的影响了分布式计算的发展。markdown
CAP 理论告诉咱们,一个分布式系统不可能同时知足一致性(C:Consistency),可用性(A: Availability)和分区容错性(P:Partition tolerance)这三个基本需求,最多只能同时知足其中的2个。网络
选项 | 描述 |
---|---|
C(Consistence) | 一致性,指数据在多个副本之间可以保持一致的特性(严格的一致性)。 |
A(Availability) | 可用性,指系统提供的服务必须一直处于可用的状态,每次请求都能获取到非错的响应——可是不保证获取的数据为最新数据。 |
P(Network partitioning | 分区容错性,分布式系统在遇到任何网络分区故障的时候,仍然可以对外提供知足一致性和可用性的服务,除非整个网络环境都发生了故障。 |
什么是分区?分布式
在分布式系统中,不一样的节点分布在不一样的子网络中,因为一些特殊的缘由,这些子节点之间出现了网络不通的状态,但他们的内部子网络是正常的。从而致使了整个系统的环境被切分红了若干个孤立的区域。这就是分区。post
2. 为何只能 3 选 2
为何只能 3 选 2?htm
首先问,能不能同时知足这三个条件?blog
假设有一个系统以下:图片
整个系统由两个节点配合组成,之间经过网络通讯,当节点 A 进行更新数据库操做的时候,须要同时更新节点 B 的数据库(这是一个原子的操做)。ip
上面这个系统怎么知足 CAP 呢?C:当节点A更新的时候,节点B也要更新,A:必须保证两个节点都是可用的,P:当节点 A,B 出现了网络分区,必须保证对外可用。
可见,根本完成不了,只要出现了网络分区,A 就没法知足,由于节点 A 根本链接不上节点 B。若是强行知足 C 原子性,就必须中止服务运行,从而放弃可用性 C。
因此,最多知足两个条件:
组 合 | 分析结果 |
---|---|
CA | 知足原子和可用,放弃分区容错。说白了,就是一个总体的应用。 |
CP | 知足原子和分区容错,也就是说,要放弃可用。当系统被分区,为了保证原子性,必须放弃可用性,让服务停用。 |
AP | 知足可用性和分区容错,当出现分区,同时为了保证可用性,必须让节点继续对外服务,这样必然致使失去原子性。 |
3. 能不能解决 3 选 2 的问题
难道真的没有办法解决这个问题吗?
CAP 理论已经提出了 13 年,也许能够作些改变。
仔细想一想,分区是百分之百出现的吗?若是不出现分区,那么就可以同时知足 CAP。若是出现了分区,能够根据策略进行调整。好比 C 没必要使用那么强的一致性,能够先将数据存起来,稍后再更新,实现所谓的 “最终一致性”。
这个思路又是一个庞大的问题,同时也引出了第二个理论 Base 理论,咱们将在后面的文章中详细介绍。