分布式数据库基础与应用
上QQ阅读APP看书,第一时间看更新

1.3.1 CAP与BASE理论

在分布式系统的设计中,数据之间的复制同步是一个需要重点考虑的问题。假设客户端C1将系统中的一个值Value由V1更新为V2,此时客户端C2不能立即读取到Value的最新值,而是需要一定的时间之后才能读取到最新值。正是由于数据库复制之间存在时延,所以数据复制所带来的一致性挑战也是每一个系统研发人员不得不面对的。

所谓分布一致性问题,是指在分布式环境中引入数据复制机制之后,不同数据节点之间可能出现的、无法依靠计算机应用程序自身解决的、数据不一致的情况。数据一致性是指在对一个副本数据进行更新的时候,必须确保其他数据副本也能得到更新,否则不同副本的数据将会不一致。

如何解决上述问题?一种思路是既然是由于时延动作引起的问题,那可以先阻塞写入动作,直到数据复制完成后,再完成写入动作。这似乎能解决问题,而且有一些系统的架构也确实直接使用了这个思路,但这个思路在解决一致性问题的同时,又带来了新的问题:写入性能的降低。若应用场景有非常多的写请求,则后续的写请求都将会被阻塞在前一个请求的写操作上,这会导致系统整体性能急剧下降。

总的来说,我们无法找到一种能够满足分布式系统所有属性的分布式一致性问题的解决方案。因此,如何既保证数据的一致性,同时又不影响系统运行的性能,是每一个分布式系统都需要重点考虑和权衡的。

1.CAP理论

CAP 理论是一个经典的分布式系统理论。CAP 理论的主要思想为:一个分布式系统不可能同时满足一致性(Consistency,C)、可用性(Availability,A)和分区容错性(Partition Tolerance,P)这3个基本需求,最多只能同时满足其中2个需求,如图1-11所示。

图1-11 CAP理论的主要思想

(1)一致性(C)

一致性是指更新操作成功后,所有节点在同一时间的数据完全一致。从客户端角度来看,一致性问题主要指多个用户并发访问时更新的数据如何被其他用户获取的问题。从服务端角度来看,一致性问题指用户在进行数据更新时如何将数据复制到整个系统,以保证数据一致的问题。一致性是在并发读/写时才会出现的问题,因此在理解一致性问题时,一定要注意结合考虑并发读/写的场景。

(2)可用性(A)

可用性是指用户访问数据时,系统是否能在正常响应时间内返回结果。好的可用性主要是指系统能够很好地为用户服务,不出现用户操作失败或者访问超时等用户体验不好的情况。在通常情况下,可用性与分布式数据冗余、负载均衡等有着很大的关联关系。

(3)分区容错性(P)

分区容错性是指分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。

分区容错性和扩展性紧密相关。在分布式应用中,一些故障(如节点故障或网络故障)可能会导致系统无法正常运行。分区容错性高指在部分节点出现故障或传输中出现丢包的情况下,分布式系统仍然能提供服务,完成数据的访问。分区容错可理解为系统中采用了多副本策略。

(4)CA(CAP 无P)

如果不要求分区容错性,即不允许分区,则强一致性和可用性是可以保证的。其实分区是始终存在的问题,因此满足CA的分布式系统更多的是允许分区后各子系统依然满足CA。

(5)CP(CAP 无A)

不要求可用性相当于每个请求都需要在各服务器之间强一致,而分区容错性会导致同步时间无限延长,在这种情况下,CP 是可以保证的。很多传统数据库的分布式事务属于这种模式。

(6)AP(CAP 无C)

如果要可用性高并允许分区,则需放弃一致性。一旦分区发生,节点之间就可能会失去联系。为了实现高可用性,每个节点只能用本地数据提供服务,而这会导致全局数据的不一致。

具体应用中可根据实际情况进行权衡,或者在软件层面提供不同的配置方式,由用户决定选择哪种CAP模式。CAP理论可用于不同的层面,也可以根据具体情况制订局部模式,例如,在分布式系统中,每个节点自身的数据能够满足CA的,但整个系统上要满足AP或CP。

2.BASE理论

BASE 是指基本可用(Basically Available)、软状态(Soft State)和最终一致性(Eventually Consistent)。BASE理论是对CAP理论中一致性和可用性进行权衡的结果,是对大规模互联网系统分布式实践的总结。BASE理论的核心思想是:即使无法做到强一致性,每个应用也可以根据自身业务的特点,采用适当的方式来使系统达到最终一致性。接下来我们介绍BASE理论中的三要素。

(1)基本可用

基本可用是指分布式系统在出现不可预知故障的时候,允许损失部分可用性,例如响应时间的损失和系统功能的损失。响应时间的损失指正常情况下一个查询结果需要在0.5 s内响应给用户,但由于出现故障,响应时间可以增加1~2 s。系统功能的损失指正常情况下,电商平台可以完成消费者每一笔订单流程,但是在消费者购物行为激增的高峰日期,为了保护系统的稳定性,部分消费者可能会被引导至一个降级页面。

(2)软状态

软状态指允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步的过程存在时延。

(3)最终一致性

最终一致性强调的是所有的数据副本在经过一段时间的同步之后,最终都能够达到一个一致的状态。由此可知,最终一致性的本质是需要系统保证数据最终能够达到一致,而不需要实时保证数据的强一致性。

总的来说,BASE 理论面向的是大型高可用可扩展的分布式系统,这和传统的事物ACID特性是相反的。它完全不同于ACID的强一致性模型,而是通过牺牲强一致性来获得可用性,并允许数据在一段时间内不一致,最终达到一致状态即可。在实际的分布式应用场景中,不同业务单元和组件对数据一致性的要求是不同的,因此在具体的分布式系统架构设计过程中,ACID特性和BASE理论往往又会结合在一起。

3.BASE与ACID的对比

关系数据库最大的特点是事务处理,即满足ACID特性,强调数据的可靠性、一致性和可用性,即同一个事务内的所有操作要么执行成功要么执行不成功,所有用户看到的数据完全一致。ACID的含义如下。

原子性(Atomicity):事务中的操作要么都做,要么都不做。

一致性(Consistency):系统必须始终处在强一致状态下。

隔离性(Isolation):一个事务的执行不能被其他事务所干扰。

持续性(Durability):一个已提交的事务对数据库中数据的改变是永久性的。

然而,若CAP中的一致性、可用性、分区容错性不能够同时得到满足,只能够对一致性或可用性进行取舍。分区容错性(P)的特性一定要保留,所以只能在一致性和可用性上考虑。当放弃可用性(A)时,系统需要满足一致性。当数据被别人操作或数据节点出现异常时,系统就必须等待,这时无法满足可用性。当放弃一致性(C)时,系统需要满足比较高的可用性。短时间内系统不需要做到数据的一致性,最终会在其他节点同步完成后使数据保持一致。总的来说,放弃一致性的CAP为BASE模式,放弃可用性的CAP为ACID模式。