了解 CAP

CAP是分布式系统最基础的理论,CAP分别表示三个特性:

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

一个分布式系统最多满足其中两个特性,无法同时满足三个特性,这就是CAP理论。

特性介绍

Consistency

一致性就是无论从哪个节点读取的数据应该都是相同的、最新的。

Availability

可用性就是任何时候的请求都可以获得正确的响应,但是不保证获取的数据为最新数据。

Partition tolerance

  • 什么是分区?

    一个分布式系统里面,节点组成的网络本来应该是连通的。然而可能因为一些故障,使得有些节点之间不连通了,系统不能在一定时限内达成数据一致性,我们就称网络产生了分区。

分区容错性就是指网络出现分区后,系统仍能正常工作,即系统能够容忍节点之间的网络通信的故障。提高分区容错性的方法就是将数据复制存储在多个节点上。

数据复制存在的节点越多,分区容错性越高,但是要复制的数据就越多,一致性就越难保证。而要保证一致性,那么系统达到一致性的时间就越久,可用性就越差。

如果要满足分区容错性,就必须在多台机器上备份数据,因此只要是分布式系统,可以理解为就必须满足分区容错性。

无法同时满足

上述说到分布式系统一般满足分区容错性,那我们看看为什么不能同时满足C和A。

假设系统有两个节点S1、S2,C是访问客户端。

  • 若满足一致性,假设C给S1更新值,那么S1要将值同步到S2,这需要一定时间,或者出现网络故障,可能需要更长的恢复时间,在系统未达到完全一致的这段时间内,无法对外提供服务,即不满足可用性。

  • 若满足可用性,即S1还未更新到S2这段时间内也可对外提供服务,那么则没满足一致性。

如何选择

  • 不要 P,不满足 P 的系统不是分布式系统。
  • 不要 C,即满足可用性损失一定一致性。这是互联网环境下最多的使用场景,优先满足系统高可用,损失短暂的一致性,但随着节点同步系统会最终恢复一致性。
  • 不要 A,即满足一致性损失一定可用性。这只在数据一致性要求比较高的场合下应用,如 zookeeper、Hbase。
原文地址:https://www.cnblogs.com/cpcpp/p/15584667.html