分布式一致性

分布式系统

分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。《分布式系统概念与设计》

分布式系统的设计目标,一般包括如下几个方面:

  • 可用性:可用性是分布式系统的核心需求,其用于衡量一个分布式系统持续对外提供服务的能力。

  • 可扩展性:增加机器后不会改变或极少改变系统行为,并且能获得近似线性的性能提升。

  • 容错性:系统发生错误时,具有对错误进行规避以及从错误中恢复的能力。

  • 性能:对外服务的响应延时和吞吐率要能满足用户的需求。

分布式系统虽然目标很美好,但是在实际的实现过程中,还是会面临许多问题,它们主要集中在如下几个方面:

  • 通信异常:分布式系统需要在各个节点之间进行网络通信,因此每次网络通信都会伴随着网络不可用的风险,此外每一次的通信都有可能产生较大的消息延时,甚至消息丢失。

  • 网络分区:网络分区和通信异常虽然都是因为网络传输出现问题,但是在分布式系统的层面却分化出两类问题。而网络分区特指那些系统分化出大小两个网络组,每个组内都能正常通讯通信,但是组间通讯被阻隔,我们将这种现象称为"脑裂"。

  • 三态:分布式系统的每一次请求,可能存在三种结果(成功,失败和超时),当发生超时现象时,请求者无法判断当前请求是否成功处理。

  • 节点故障:节点故障是一个非常常见的问题,指分布式系统的服务器节点可能出现宕机,僵死,器件损坏等问题。

CAP和BASE理论

在单机数据库中,我们很容易能够实现一套满足ACID特性的事务处理系统,但在分布式环境下,数据分布在不同的机器上,如何对这些数据进行分布式的事务处理具有非常大的挑战(很有可能在高可用性和严格一致性之间出现冲突)。因此,如何构建一个兼顾可用性和一致性的分布式系统成功无数工程师的难题,出现了诸如CAP和BASE这样的分布式系统经典理论。

CAP定理

CAP理论告诉我们,一个分布式系统不可能同时满足一致性(C:Consistency)、可用性(A: Availability)和分区容错性(P:Partition tolerance)这三个基本需求,最多只能同时满足其中的两项。

一致性在分布式环境中,一致性是指数据在多个副本之间是否能够保持一致的特性。如果对第一个节点的数据进行了更新操作并且更新成功后,却没有使得第二个节点上的数据得到相应的更新,于是在对第二个节点的数据进行读取操作时,获取的依然是老数据(或称为脏数据),这就是典型的分布式数据不一致情况。在分布式系统中,如果能够做到针对一个数据项的更新操作执行成功后,所有的用户都可以读取到其最新的值,那么这样的系统就被认为具有强一致性(或严格的一致性)。

可用性可用性是指系统提供的服务必须一直处于可用的状态,对于用户的每一个操作请求总是能够在有限的时间内返回结果。

分区容错性:分布式系统在遇到任何网络分区故障的时候,仍然需要能够保证对外提供满足一致性和可用性的服务,除非是整个网络环境都发生了故障。

从 CAP 定理中我们可以看出,一个分布式系统不可能同时满足一致性、可用性和分区容错性这三个需求。另一方面,需要明确的一点是,对于一个分布式系统而言,分区容错性可以说是一个最基本的要求。因为既然是一个分布式系统,那么分布式系统中的组件必然需要被部署到不同的节点,因此必然出现子网络。而对于分布式系统而言,网络问题又是一个必定会出现的异常情况,因此分区容错性也就成为了一个分布式系统必然需要面对和解决的问题。因此系统架构设计师往往需要把精力花在如何根据业务特点在C(一致性)和A(可用性)之间寻求平衡。

BASE定理

BASE 是 Basically Available(基本可用)、Soft state(软状态)和 Eventually consistent(最终一致性)三个短语的简写。BASE是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的总结,是基于CAP定理逐步演化而来的,其核心思想是即使无法做到强一致性(Strong consistency),但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性(Eventual consistency)。

基本可用: 基本可用是指分布式系统在出现不可预知故障的时候,允许损失部分可用性,但这绝不等价于系统不可用。比如一个请求本来需要0.5秒返回结果,但是因为系统故障,最终花了2秒。

软状态:允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步的过程存在延时。

最终一致性 最终一致性强调的是系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态。因此,最终一致性的本质是需要系统保证最终数据能够达到一致,而不需要实时保证系统数据的强一致性。

最终一致性是一种特殊的弱一致性,系统能够保证在没有其他新的更新操作的情况下,数据最终一定能够达到一致的状态,因此所有客户端对系统的数据访问都能够获取到最新的值。同时,在没有发生故障的前提下,数据达到一致状态的时间延迟,取决于网络延迟、系统负载和数据复制方案设计等因素。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值