前言
在互联网时代,我们的应用都是分布式系统,部署在 N 台机器上。说到分布式系统我们就不得不说分布式系统的祖先——集中式系统。它和分布式系统是两个完全相反的两个概念,集中式系统就是把所有的程序和功能都放到一台主机上,从而对外提供服务。集中式系统的优点就是容易理解、维护方便,它的的弊端也很明显,如果这个主机出故障了那么整个系统就崩溃了。著名投资家巴菲特有个关于投资的名言:
不要把鸡蛋放在一个篮子里
对于我们的系统而言也是如此,我们不可能保证主机永远不坏、也无法保证自己的程序永远不会出 bug
,所以问题是无法避免的,我们只能把“鸡蛋”分散到不同的“篮子”里,降低系统出故障的风险,这就是我们为什么需要分布式系统的原因之一。使用分布式系统的另一个理由就是扩展性,毕竟单台主机都会有性能的极限,分布式系统可以通过增加主机数量来实现横向水平性能的扩展。接下来我们看看分布式系统中的一个基本定理 —— CAP定理
。
什么是 CAP 定理
CAP 定理
指出对于一个分布式系统来说,不可能同时满足以下三点:
- 一致性(Consistency)
- 可用性(Availability)
- 分区容错性(Partition tolerance)
定理看起来很简单,但是一致性
、可用性
、分区容错性
究竟是代表什么意思呢?理解定理的最简单的方式就是想象一个有两个节点分别处在不同的分区(PS:可以简单的把分区理解为不同的子网络)的分布式系统。
场景假设
我们假定一个很简单的分布式系统,系统由两个系统 S1
和 S2
组成。两个系统上面有两个相同的变量 K
,该变量在两个系统对应的初始值为 V0
。系统 S1
和 S2
可以进行通信同时也对外提供服务。我们假定的分布式系统如下所示: