分布式系统赫赫有名的 CAP 定理,示意分布式系统只能同时满足 CAP 三个个性中的两个,其中 C-Consistency 强一致性,A-Avaliability 可用性,P-Partition Torrelation 分区容忍性,以下听我缓缓道来 分区 Partition
和 分区容忍 Partition Torrelation
是两个不同的概念,我刚开始也是傻傻分不清,这里先谈谈分区问题。因为网络的不牢靠以及程序的不稳定性,分布式系统中会有概率产生局部结点的断开,解体,脱离零碎。假如咱们的数据以分片的模式存储在分布式系统的各个节点,一旦产生分区问题就会造成局部数据分片的失落,整个零碎就无奈提供残缺的数据服务,当然咱们无法忍受这种状况产生。最无效的方法是给每个数据分片设置正本分片,备份到其余节点上,分区问题一经呈现,正本分片也能长期作为主分片持续提供服务,保障了零碎服务的完整性,这时零碎就有了分区容错的能力,也叫分区容忍性
< 放个图片 >
数据备份冗余的水平越高,零碎的分区容忍性越高,极其状况下每个节点都保留了残缺的数据,即便分布式系统只剩下一个节点,也能提供残缺的数据服务(但存储老本,同步老本太高)
分区问题是 概率 必然呈现的,所以要优先保证系统的分区容忍性 P,那么依据 CAP 定理,分布式系统只能抉择满足 A 或 C,以下别离进行解释 Availability 可用性
,示意零碎每时每刻都能提供服务,不能停机Consistency 强一致性
,示意零碎在提供服务的时间段内需保证数据强一致性
因为 P 的原理数据存在正本,当用户更新某个数据后,为了保障强一致性,零碎必须暂停服务,把更新后的数据同步到正本分片,再开启服务,而暂停服务这个操作显然违反了 A 可用性。如果优先保障 A 可用性,那么数据更新同步的时间段就无奈满足强一致性了。通常状况下,数据正本只用于备份和容灾,个别不对外提供服务,所以大部分的分布式系统都会优先选择 AP,尽管不能保障强一致性,但数据同步胜利后还是能达到最终统一的状态。