分布式系统学习(一) 从 ACID 到CAP/BASE

在分布式系统中,存储基本都是多副本形式的,之所以采用这种模式,有以下两种原因:

  1.提高系统可用性,防止单点故障引起的系统不可用

  2.提高系统性能,利用负载均衡,让多副本分担流量压力

数据复制在可用性和性能方面给分布式系统带来的好处是不言而喻的,但是数据复制所带来的一致性挑战,也是所有开发人员需要面对的。

如何保证数据的一致性,同时又不影响系统的可用性及高性能,是每一个分布式系统都需要重点考虑和权衡的,一致性级别由此诞生。

强一致性:这种级别是最符合用户直觉的,系统写入什么,读出来也会是什么,用户体验好,但往往对系统写入性能影响比较大。

弱一致性:这种级别约束了系统在写入成功后,不承诺能立即读到写入的值,也不承诺具体多久数据能够达到一致,但会尽可能保证在某个时间级别后,数据达到一致状态。

     弱一致性还可以具体分为 会话一致性,用户一致性。

最终一致性:这种级别是弱一致性中的一个特例,系统会保证在一定时间内,能够达到一个数据一致的状态。目前也是业界主流的一种模型。

分布式环境中的各种问题

  • 通讯异常 分布式系统中各节点通过网络连接,路由器,网络光纤,DNS等硬件设备发生故障以及系统不可用都会对节点间的通信产生影响,另外,各节点正常通信,其延时也远高于单机操作, 通常单机内存访问的延迟是10ns左右,网络通信的延迟在0.1ms-1ms左右,因此消息丢失和消息延迟都是非常普遍的。
  • 网络分区 
  • 三态
  • 节点故障

从 ACID 到CAP/BASE

  ACID :从狭义上讲是数据库事务的四个特性(原子性,一致性,隔离性,持久性)

  CAP :一致性,可用性,分区容错性。 一个分布式系统不可能同时满足这三个特性,另一方面对于分布式系统而言,网络问题是一个必定会出现的一个异常情况,所以          P(分区容错性)可以说是一个最基本的要求,因此我们往往需要根据业务特点在C(一致性)和A(可用性)之间权衡利弊。

  BASE:基本可用:指分布式系统在出现不可预知的故障时,允许损失部分可用性。

        软状态:允许系统中的数据存在中间状态,即允许系统在不同节点的数据副本间进行数据同步的过程中存在延迟

       最终一致性 :系统中的所有数据副本,经过一定的时间的同步后,最终达到一个一致的状态。