分布式系统理论 - CAP定理和BASE理论

分布式系统理论 - CAP定理和BASE理论

一、前言

我们都知道,一个分布式系统,在可用性和一致性之间永远无法存在一个两全其美的方案,于是如何构建一个兼顾可用性和一致性的分布式系统成为了无数工程师探讨的难题,于是出现了诸如CAP和BASE这样的分布式系统经典理论。

二、CAP定理

2.1、概述

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

2.2、一致性(C:Consistency)

在分布式环境中,一致性是指数据在多个副本之间是否能够保持一致(强一致性)的特性。

对于一个将数据副本分布在不同的分布式节点上的系统来说,如果第一个节点的数据更新成功后,第二个节点(或其它所有节点)上的数据却没有得到及时更新,于是当对第二个节点读取数据时,获取到的依然是老数据(或称之为脏数据),这就是典型的分布式数据不一致的情况。在分布式系统中,如果能够做到针对某个节点上的一个数据项进行更新操作成功后,在所有节点上的数据也同步更新成功。那么这样的系统就被认为是具有强一致性。

2.3、可用性(A:Availability)

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

  • “有限的时间内” 是指,对于用户的一个操作请求,系统必须能够在指定的时间(响应时间)内返回处理结果。如果超过了这个时间,就认为系统是不可用的。例如电商系统,一般要求500毫秒内响应数据,如果超过这个时间就认为系统是不可用。

  • “返回结果”
    是指返回的是一个正常的结果,即成功或失败,而不是让用户感到困惑的返回结果(例如抛出OutOfMemoryError)。

2.4、分区容错性(P:Partition Tolerance)

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

网络分区是指在分布式系统中,不同的节点分布在不同的子网络(机房或异地网络)中,由于一些特殊的原因导致这些子网络不连通的状况,但各个子网络的内部网络是正常的,从而导致整个系统网络环境被切分成了若干孤立的区域。

2.5、CAP定理应用

实际上一个分布式系统无法同时满足上述三个需求,而只能满足其中两项,因此在进行CAP定理应用时我们就必须要抛弃其中一项。

在这里插入图片描述

  • 放弃分区容错性(P:Partition Tolerance): 就是将所有的数据都放在同一个分布式节点上(即不做异地灾备,当前节点挂了,系统将不再可用),放弃P也就是意味着放弃了系统的可扩展性。

  • 放弃可用性(A:Availability):
    当系统遇到网络分区或者其他故障时,受到影响的服务需要等待一定的时间,因此在等待期间系统无法对外提供正常服务,即为不可用。

  • 放弃一致性(C:Consistency):
    放弃一致性是指放弃数据的强一致性,而保留数据的最终一致性。

从CAP定理可以看出,一个分布式系统无法同时满足一致性、可用性、分区容错性这三个需求。另外,对于一个分布式系统而言,分区容错性可以说是一个基本要求。因为既然是一个分布式系统,那么分布式系统中的组件必然需要部署到不同的节点,否则也就无所谓分布式系统了。对于分布式系统而言,网络问题又是一个必定会出现的异常情况,因此分区容错性也就成为了一个分布式系统必然要面对和解决的问题。

三、BASE理论

3.1 概述

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

3.2 基本可用

是指分布式系统出现不可预知故障时,允许损失部分可用性,达到有损服务而不是不服务的效果。

  • 响应时间上的损失: 例如正常一个请求的响应时间为0.5s以内,但在出现故障(机房断点或断网)之后响应时间增加到了2s。
  • 功能上的损失: 例如分布式系统开发中常见的降级策略。

3.3 弱状态

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

3.4 最终一致性

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


参考资料:《从Paxos到Zookeeper 分布式一致性原理与实践》

猜你喜欢

转载自blog.csdn.net/lixiaohai_918/article/details/89446511
今日推荐