分布式的CAP定理

CAP定理又称布鲁尔定理,是计算机科学家 Eric brewer 提出的,是分布式系统领域的一个定理。若想设计一个分布式架构的系统,掌握这项定理不可或缺。

C是Consistency,也就是一致性,在CAP中的是强一致性。A是Availability ,可用性。P是Partition tolerance,分区容错性。在分布式系统中三者不可兼得,只能选两个。这就是CAP定理。例如你保证了一致性和分区容错性就无法保证可用性。

分布式的CAP定理_第1张图片

Consistency

这里的一致性是强一致性,强一致性的意思就是例如节点A更新了数据,节点B能同时更新,这样客户端在每次读取获得数据都是最近更新的。但是在定理中是忽略掉我们平日里的网络延迟的。现实情况网络延迟在现在还是无法避免的,所以我们只能实现最终一致性,但是目标还是贴近强一致性,也就是尽力降低延时的时间。

Availability

可用性指的是非故障的节点需要在合理的时间返回合理的响应。合理的响应的意思也就是不能搞个报错,不能是超时失败。举个例子比如说节点A更新了数据,同时要发布到节点B上,但是中间传输的电缆被挖掘机挖断了,此时用户去访问节点B,此时节点B应该返回老的数据,而不应该报错。这就是可用性。让用户感觉系统还是能用的。

Partition tolerance

分区容错性,指的是当网络分区了,系统还能正常的运行和响应。比如节点A和节点B无法通信,你要考虑这个时候系统如何应该。虽然网络分区的概率低而且时间短但是这种情况是会发生的。所以理论上是牺牲C或者A,P是一定要达到的。

举个例子,把P扔了。所以此时系统需要保证CA,然后此时发生了网络分区,节点A和B无法通信了,此时客户端想要往节点A写入数据,但是因为此时无法同步数据至节点B。所以只有保证A不写入因此才能保证一致性。那你不让客户端往A写数据,你就只能报个错返回给客户端,说此时不能写,那是不是违反了可用性了?

所以在分布式系统中P是一定要保证的。所以在分布式系统中是CP,AP这样搭配的。

那CA呢?请注意,CAP所说的CAP三者只能存在两者,所以CA是可以能搭配的。就是在系统没有P的时候,CA搭配。也就是说当系统不存在分区情况的时候要满足C和A,当系统出现分区情况的之后视情况抛弃C或者A。

注意

CAP理论不是系统级别的,是数据级别的。啥意思呢?

也就是说当出现网络分区的情况,你可以一部分数据遵守CP,一部分数据遵守AP。例如用户注册场景可以上CP,保证用户注册之后登录的成功。而用户更换头像这种就上AP,毕竟用旧的数据影响也不会很大。

因此我们要根据不同的业务场景来选择不同的应对方案。CAP是可以灵活搭配的。

CAP定理应用

放弃P(CA):如果希望能够避免系统出现分区容错性问题,一种较为简单的做法就是将所有的数据(或者是与事物先相关的数据)都放在一个分布式节点上,这样虽然无法保证100%系统不会出错,但至少不会碰到由于网络分区带来的负面影响

放弃A(CP):其做法是一旦系统遇到网络分区或其他故障时,那受到影响的服务需要等待一定的时间,应用等待期间系统无法对外提供正常的服务,即不可用

放弃C(AP):这里说的放弃一致性,并不是完全不需要数据一致性,是指放弃数据的强一致性,保留数据的最终一致性。

BASE理论

BASE是基本可用,软状态,最终一致性。是对CAP中一致性和可用性权限的结果,是基于CAP定理演化而来的,核心思想是即使无法做到强一致性,但每个应用都可以根据自身的业务特定,采用适当的方式来使系统达到最终一致性

你可能感兴趣的:(概念篇)