首页 > Java > 关于 CAP 理论 和 BASE 理论

关于 CAP 理论 和 BASE 理论

一、CAP 理论

CAP 理论是分布式计算领域公认的一个定理,是分布式架构师必须掌握的理论,目前网上关于这块的资料也很多,各种说法,其实 CAP 理论自身也是一个不断发展的过程,相比之下比较准确的说法应该是:在一个分布式系统(指互相连接并共享数据的节点的集合)中,当涉及读写操作时,只能保证一致性(Consistence)、可用性(Availability)、分区容错性(Partition Tolerance)三者中的两个,另外一个必须被牺牲。也就是说必须是相关连接并且共享数据的分布式系统才是我们讨论 CAP 的基础,另外就是 CAP 理论关注的是对数据的读写操作,而不是分布式系统的所有功能。明白了这些之后,下面对 CAP 逐一讲解:

1. 一致性(Consistency)

很多资料都说,对一致性的讲解时所有节点在同一时刻都能看到相同的数据,其实更准确的应该是:对某个客户端来说,读操作保证能够返回最新的写操作结果,是否数据一定一直呢?还真不一定,对于系统执行事务来说,在事务执行过程中,系统其实处于一个不一致的状态,不同的节点的数据并不完全一致,因为事务在执行过程中,client 是无法读取到未提交的数据的,只有等到事务提交后,client 才能读取到事务写入的数据,而如果事务失败则会进行回滚,client 也不会读取到事务中间写入的数据。

2. 可用性(Availability)

一般的解释是,每个请求都能得到成功或者失败的响应,更准确的是,非故障的节点在合理的时间内返回合理的响应(不是错误和超时的相应),其实什么是成功和失败?超时报错算不算失败的响应?所以应该是合理的响应,另外故障节点肯定是不能返回结果了。

3. 分区容错性(Partition Tolerance)

一般说法是,出现消息丢失或者分区错误时系统能够继续运行,其实更准确的是,当出现网络分区后,系统能够继续“履行职责”。因为关于运行,只要不宕机就可以说在运行。
综上,其实 CAP 理论也是一个自身不断发展的历程,虽然以前的理论也能说明问题,但是仔细深究起来发现有些问题,下面会有说明。

CAP 应用

CAP 理论开明宗义就说我们必须放弃一个,但是其实仔细想想我们可以放弃 P 吗?因为网络本身无法做到 100% 可靠,有可能出故障,所以分区是一个必然的现象。如果我们选择了 CA 而放弃了 P,那么当发生分区现象时,为了保证 C,系统需要禁止写入,当有写入请求时,系统返回 error(例如,当前系统不允许写入),这又和 A 冲突了,因此,分布式系统理论上不可能选择 CA 架构,只能选择 CP 或者 AP 结果,但是需要说明的是,按照通常解释,是可以 CA 的,因为通常的解释 A 是返回失败或者成功的结果,而不允许写入,其实就是失败的结果,满足 A 的定义

1. CP

为了保证一致性,当发生分区现象后,N1 节点上的数据已经更新到 y,但由于 N1 和 N2 之间的复制通道中断,数据 y 无法同步到 N2,N2 节点上的数据还是 x。这时客户端 C 访问 N2 时,N2 需要返回 Error,提示客户端 C“系统现在发生了错误”,这种处理方式违背了 A 的要求,因此 CAP 三者只能满足 CP

2. AP

为了保证可用性,当发生分区现象后,N1 节点上的数据已经更新到 y,但由于 N1 和 N2 之间的复制通道中断,数据 y 无法同步到 N2,N2 节点上的数据还是 x。这时客户端 C 访问 N2 时,N2 将当前自己拥有的数据 x 返回给客户端 C 了,而实际上当前最新的数据已经是 y 了,这就不满足 C 的要求了,因此 CAP 三者只能满足 AP。注意:这里 N2 节点返回 x 虽然不是一个“正确”的结果,但是一个“合理”的结果,因为 x 是旧的数据,并不是一个错乱的值,只是不是最新的数据而已。

二、BASE 理论

BASE 是指基本可用(Basically Available)、软状态( Soft State)、最终一致性( Eventual Consistency),核心思想是即使无法做到强一致性,应用可以采用适合的方式达到最终一致性

1. 基本可用

分布式系统在出现故障时,允许损失部分可用性,即保证核心可用

2. 软状态

允许系统存在中间状态,而该中间状态不会影响系统整体可用性。这里的中间状态就是 CAP 理论中的数据不一致。

3. 最终一致性

系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。

BASE 理论本质上是对 CAP 的延伸和补充,更具体地说,是对 CAP 中 AP 方案的一个补充。其实就算采用 CP 方法,C 不能节点数据复制,可以保证没有时延吗?其实也是最终一致性,只是这个时延很短而已;而 AP 方案中牺牲一致性,不是永远放弃一致性,所以:CAP 是分布式系统设计理论,BASE 是 CAP 理论中 AP 方案的延伸。

全文完,如果本文对您有所帮助,请花 1 秒钟帮忙点击一下广告,谢谢。

作 者: BridgeLi,https://www.bridgeli.cn
原文链接:https://www.bridgeli.cn/archives/614
版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。
分类: Java 标签: , ,
  1. 本文目前尚无任何评论.

请输入正确的验证码