分布式理论 之 CAP 定理

-----------------------------------------------------入巷间吃汤面 笑看窗边飞雪.html


 

目录:数据库

  1. 什么是 CAP 定理
  2. 为何只能 3 选 2
  3. 能不能解决 3 选 2 的问题
  4. 引用

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 理论,咱们将在后面的文章中详细介绍。

4. 引用

  1. 《从 Paxos 到 Zookeeper —— 分布式一致性原理实践》倪超
  2. CAP理论十二年回顾:"规则"变了
  3. 维基百科CAP定理
相关文章
相关标签/搜索