【分布式】CAP定理和BASE理论

tech2022-07-16  184

一、CAP定理

       对于一个分布式系统来说,不可能同时满足一致性(Consistence)、可用性(Availability)、分区容错性(Partition Tolerance)。三者不可得兼。至多只能满足2个。

                                           

       1、一致性(Consistence)

       对于某个客户端来说,读操作能够返回最新的写结果。

       2、可用性(Availability)  

       非故障的节点在合理的时间内返回合理的响应(不是错误和超时的响应)。

       3、分区容错性(Partition Tolerance)

       当出现网络分区后,系统能够继续“履行职责”。

       4、CAP应用

       虽然CAP理论是三者不可得兼,只能取其二。但是在分布式环境下,我们会发现必须选择p(分区容错)要素。因为网络无法做到100%可靠。

       反证法:假如我们选择CA,当发生分区现象时,为了保证一致性(C),系统需要禁止写入,当有写请求时系统返回error(例如,当前系统不允许写入),这又和可用性(A) 冲突了。因此分布式系统只能选择CP和AP。

       ① Consistency/Partition Tolerance

       当发生分区现象后,N1 节点上的数据已经更新到 y,但由于 N1 和 N2 之间的复制通道中断,数据 y 无法同步到 N2,N2 节点上的数据还是 x 。为了保证一致性(也就是说读到的值应为y),当客户端C访问N2时,N2需要返回Error。提示客户端C“系统现在发生了错误”。这违背了可用性(Availability)的要求。

                                                               

       ② Availability/Partition Tolerance

       当发生分区现象后,N1 节点上的数据已经更新到 y,但由于 N1 和 N2 之间的复制通道中断,数据 y 无法同步到 N2,N2 节点上的数据还是 x。为了保证可用性,此时客户端C访问N2,N2将自己拥有的数据x返给客户端C。而实际上,当前最新的值已经是y了。 这就不满足一致性(Consistence)的要求了。

       (注意:这里N2节点返回x,虽然不是一个“正确”的结果。但是一个“合理”的结果。因为x是一个旧的数据,不是错换的数据,只是不是最新的数据而已)

                                                             

二、BASE

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

       1、基本可用:

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

       这里的关键词是"部分"和"核心"。具体选择哪些作为可以损失的业务,哪些是必须保证的业务,是一项有挑战的工作。例如,对于一个用户管理系统来说,“登录”是核心功能,而“注册”可以算法是非核心功能。因为未注册的用户本来就还没有使用系统的业务,注册不了最多就是损失一部分用户。但如果已经注册过了,却无法登录,那意味着用户无法使用系统。比如充了钱的游戏不能玩了。。。

       2、软状态

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

       3、最终一致性 

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

       这里的关键是"一定时间"和“最终”。一定时间和数据的特性是强关联的,不同的数据能够容忍的不一致时间是不同的。最终的含义就是不管多长时间,最终还是要达到一致性的状态。

       BASE理论本质上是对CAP的延伸和补充,更具体的说,是对CAP中AP方案的一个补充。前面在说CAP理论时,提到了其实和BASE相关的两点。

       ① CAP理论是忽略延时的,而实际应用中,延时是无法避免的。

       ② AP方案中牺牲一致性只是指分区区间,而不是永远放弃一致性。

       综上所示,CAP 是分布式系统设计理论,BASE 是 CAP 理论中 AP 方案的延伸。  

最新回复(0)