目录

现在分布式系统的应用越来越广, 这是一个很容易理解的趋势, 因为毕竟单机的性能是有限的, 在量级还不大的时候, 我们能够通过升级机器的性能来支撑服务。但是当量级到达一定的瓶颈, 单机的性能总会有撑不住的时候, 这个时候就需要使用分布式系统了。

但是当引入分布式系统之后, 就必然面临一个问题, 分布式必然是一个集群,集群中的节点就需要交互, 但是网络是一个不稳定的因素, 这个时候就需要在一致性和可用性上做一个权衡。

CAP理论

CAP是Consistency、Availablity和Partition-tolerance的缩写。分别是指:

  1. 一致性(Consistency):每次读操作都能保证返回的是最新数据;

  2. 可用性(Availablity):任何一个没有发生故障的节点,会在合理的时间内返回一个正常的结果;

  3. 分区容忍性(Partition-torlerance):当节点间出现网络分区,照样可以提供服务。

CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。

首先,单机肯定不存在分区的问题, 所以肯定只能保证CA。不过既然是讨论分布式系统, 这个情况肯定不在我们考虑范围内。 

对于分布是系统,P肯定是占的, 那么到底是AP呢还是CP呢。

当出现节点间网络中断的情况,

如果选择一致性CP,意味着在网络恢复 数据在节点间同步完之前是不可用的。

如果选择可用性AP,意味着我们放弃了各个节点直接的同步

在实际操作的时候,一般的服务都要保证服务的可用性,所以一般会选择AP,然后在网络恢复后得到最终一致性

根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三 大类:

CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。

CP - 满足一致性,分区容忍性的系统,通常性能不是特别高。

AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。

CAP

BASE理论

BASE理论是对CAP理论的延伸,核心思想是即使无法做到强一致性(Strong Consistency,CAP的一致性就是强一致性),但应用可以采用适合的方式达到最终一致性(Eventual Consitency)。

BASE是指基本可用(Basically Available)、软状态( Soft State)、最终一致性( Eventual Consistency)。

基本可用(Basically Available)

基本可用是指分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用。

电商大促时,为了应对访问量激增,部分用户可能会被引导到降级页面,服务层也可能只提供降级服务。这就是损失部分可用性的体现。

软状态( Soft State)

软状态是指允许系统存在中间状态,而该中间状态不会影响系统整体可用性。分布式存储中一般一份数据至少会有三个副本,允许不同节点间副本同步的延时就是软状态的体现。mysql replication的异步复制也是一种体现。

最终一致性( Eventual Consistency)

最终一致性是指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。