分布式基本理论
# 分布式事务理论
# 1 CAP理论
CAP:consistency(强一致性)、Availability(可用性)、Partition Tolerance(分区容错性)
- 一致性:所有节点访问同一份最新的数据副本。
- 可用性:非故障节点在合理的时间内返回合理的响应(不是错误或者超时的响应)
- 分区容错性:分布式系统出现网络分区的时候,仍然能够对外提供服务。(即使出现单个组件无法可用,操作系统依然可以完成)。必须要满足!
当发生网络分区时,如果我们要继续服务,那么强一致性和可用性只能 2 选 1,也就是说当网络分区之后 P 是前提,决定了 P 之后才有 C 和 A 的选择,也就是说分区容错性我们时必须要实现的。因此,分布式系统理论上不可能选择 CA 架构,只能选择 CP 或者 AP 架构。
选择 CP 还是 AP 的关键在于当前的业务场景,没有定论,对于需要确保强一致性的场景如银行一般会选择保证 CP。
# 2 一致性
更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致,不能存在中间状态。分布式环境下,一致性是指多个副本之间能否保持一致的特性。
强一致性:时刻保证客户端看到的数据都是一致的。
弱一致性:允许存在部分数据不一致。
最终一致性:允许存在最终状态,经过一段时间后,数据最终是一致的。
# 3 可用性
系统提供的服务必须一直处于可用的状态,对于用户的每一个操作请求总是能够在有限的时间内返回结果。
- 有限时间:能够在指定的时间(响应时间)内返回对应的处理结果,如果超过这个时间范围,那么系统就被认为是不可用的。
- 返回正常结果:要求系统在完成堆用户请求的处理后,返回一个正常的响应结果。正常的响应通常能够反映出对请求的处理结果,成功或失败,而不是一个让用户感到困惑的返回结果,比如系统错误或 OutOfMemeroy,则认为系统是不可用的。
# 4 分区容错性
分布式系统在遇到任何网络分区故障时,仍需要能够保证对外提供满足一致性和可用性的服务,除非时整个网络环境都发生了故障。
网络分区,是指分布式系统中,不同的节点分布在不同的子网络(机房/异地网络)中,由于一些特殊的原因导致这些子网络之间出现网络不连通的状态,但各个子网络的内部网络是正常的,从而导致整个网络系统的网络环境被切分成了若干独立的区域。
# 5 为什么分布式系统中无法同时保证一致性和可用性?
对于分布式系统,分区容错性是一个最基本的要求,因此只能从一致性和可用性进行取舍。
保证一致性:对于节点 N1 和 N2,当往 N1 里写数据时,N2 的操作必须被暂停,只有当 N1 同步数据到 N2 时才能对 N2 进行读写请求,在 N2 被暂停操作期间客户端提交的请求会收到失败或超时。
保证可用性:不能暂停 N2 的读写操作,但同时 N1 在写数据的话,就违背了一致性的要求。
# 6 BASE理论
BASE:Basically Available(基本可用)、Soft-state(软状态)、Eventually Consistent(最终一致性)
BASE 理论是对CAP中C和A权衡的结果。核心思想是,既然无法做到强一致性,但每个应用可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。是 CAP 理论中 AP 方案的延申。
基本可用
指分布式系统在出现不可预知故障的时候,允许损失部分可用性。但不等价于系统不可用。
什么叫允许损失部分可用性呢?
- 响应时间上的损失:当出现故障时,响应时间增加。
- 系统功能上的损失:当流量高峰时,屏蔽一些功能的使用以保证系统稳定性(服务降级)
软状态
软状态指允许系统中的数据存在中间状态(CAP 理论的数据不一致),并不会认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步的过程存在延时。
最终一致性
最终一致性强调的是系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态。因此,最终一致性的本质是需要系统保证最终数据能够达到一致,而不需要实时保证系统数据的强一致性。