分布式基本原则之“三选二”的CAP理论


前言

在大数据应用落地日益成熟的今天,通过网络查阅理解大数据的一些基本概念显得十分重要。
提起大数据,就离不开它的分布式架构,而把握着分布式大门的几把钥匙中无比重要的那一把,就是我们今天要讲的CAP理论(本文主要参考了《大数据日知录:架构与算法》)。


一、什么是CAP定理?

准确来说,CAP 是对“ Consistency/Availability/Partition Tolerance" 的一种简称, 其分别代表:强一致性、可用性和分区容忍性
在这里插入图片描述

强一致性(Consistency): 即在分布式系统中的同一数据多副本情形下, 对千数据的更新操作体现出的效果与只有单份数据是一样的。

可用性(Availability): 客户端在任何时刻对大规模数据系统的读/写操作都应该保证在限定延时内完成。

分区容忍性(Partition Tolerance): 在大规模分布式数据系统中, 网络分区现象, 即分区间的机器无法进行网络通信的情况是必然会发生的, 所以系统应该能够在这种情况下仍然继续工作。

二、为什么“三选二”?

1.三选二的由来

CAP 最初是由Eric Brewer于1999 年首先提出的, 他同时证明了:对于一个大规模分布式数据系统来说, CAP 三要素不可兼得, 同一个系统至多只能实现其中的两个, 而必须放宽第3 个要素来保证其他两个要素被满足。

即要么AP, 要么CP, 抑或AC, 但是不存在CAP, 这就是CAP 原则的精髓所在

2.定理证明

我们为了证明它的结论可以进行棋盘推演:

情形一 如果在这个分布式系统中数据无副本, 那么系统必然满足强一致性条件, 因为只有独本数据不会出现数据不一致的可能。
时C和P两要素具备 , 但是如果系统发生了网络分区状况或者机器宕机 , 必然导致某些数据不可访问 , 此时可用性条件是不能被满足的, 即在此情形下获得了CP系统, 但CAP不可同时满足。

情形二: 如果系统中数据有副本(见下图) , 假设变量x存在两份副本并分别存储在不同机器上 , 最初数据保持一致, 其值都为v1。在Time=t1的时刻, 在机器l上发生对x的数值更新操作 , 此操作要将x的值赋为v2。时间推移到Time=t2时刻 , 机器l上的x已经被赋予新值v2, 如果此时未发生网络分区状况 , 系统可以将x的新值v2同步到机器2, 达到数据一致性要求。但是如果此时发生了网络分区导致两台机器无法通信, 那么无法将x的新值同步到机器2,这个时刻我们不得不在 C或A之间做个权衡和选择。

在这里插入图片描述

如果希望系统高可用(选择A), 那么对于读取机器2上的x的查询请求必须在限定时间内返回值 , 此时返回的并非是最新的值v2, 所以出现了数据不一致的间题(抛弃 C)。 如果选择强一致性(选择 C) , 那么在两台机器恢复通信并将数据同步到一致状态前, 对于机器2的x读请求必须予以拒绝, 此时无法保证系统的可用性(抛弃A)。所以不论选择哪一个,必然以牺牲另外一 个因素作为代价 , 也就是说要么AP, 要么CP, 但是没有完美的CAP。

3.天然存在的“P”

为什么现在我们都说要么AP,要么CP,而不说AC呢?

其实,在一般的网络环境中,网络出现分区问题是在所难免的,所以我们的分布式系统必须具有分区容忍性,也就是P,所以架构师们往往只能在AP和CP之间进行权衡。

三、解决方案——走出“三选二”的误区

前面我们讲到P是天然存在的,所以我们要么选择A,要么选择C,但实际上,网络出问题的概率还是比较小的,我们不可能为此完全地放弃A或者C。

Eric Brewer提出CAP三者并非是绝对二元式地有或没有、 而是应该将其看作连续变量, 即可以看作在一定程度上的有或没有 , 比如可用性指标中(A)延时长度多少算可用这都是可以看作连续变量的,类似地,C和P也可以如此对待, 在实际进行取舍时并非加以完全舍弃, 而是可以考虑在多大程度上进行舍弃。

在绝大多数 系统未产生网络分区的情形下, 应该尽可能保证AC两者兼得,也即大多数情况下考虑CAP三者兼得, 当发生网络分区时,系统应该能够识别这种状况并对其进行正确处理, 具体而言,应该分为3个步骤:
在这里插入图片描述

首先能够识别网络分区发生, 然后在网络分区场景下进入明确的分区模式 , 此时可能会限制某些系统操作 , 最后在网络分区解决后能够进行善后处理, 即恢复数据的一致性或者弥补分区模式中产生的错误。


写在最后

如果以上内容对你有帮助的话,欢迎点赞关注!祝大家都能学有所成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值