从分布式事务到CAP理论和BASE理论
前言
我在《数据库事务和事务的隔离级别》和《再谈数据库事务隔离级别》两篇文章中详细介绍了数据库事务的隔离级别。本文将会从分布式的事务开始谈起,以及CAP理论和BASE理论。
分布式事务
随着分布式计算的发展,事务在分布式计算领域中也得到了广泛的应用。在单机数据库中,我们很容易能够实现一套满足ACID特性的事务处理系统,但是在分布式数据库中,数据分散在各台不同的机器上,如何对这些数据进行分布式事务处理具有非常大的挑战。
分布式事务是指事务的参与者,支持事务的服务器,资源服务器以及事务管理器分别位于分布式系统的不同节点之上,通常一个分布式事务中会涉及对多个数据源或者业务系统的操作。
我们可以设想一下最典型的的分布式事务场景。一个跨银行转账的操作,比如从建行的账户转账到农行的账户上,这一个操作包含需要调用分布式中两个不同节点上的服务1.取款服务2.目标账户的存款服务。这两个服务之间是无状态并且是相互保持独立的,共同构成一个完成的分布式事务。 如果调用第一个取款服务成功,而再目标账户的存款服务时因为某一种原因导致调用失败了,那么就必须要全部回滚到取款之前的状态,否则,用户会发现,账户中的钱不翼而飞。
一个分布式事务可以看做是由多个分布式的操作序列组成的。我们把这些操作序列叫做子事务。因此分布式事务也可以被叫做嵌套性的事务,同时也就具有ACID的事务特性。但是在分布式事务中,各个子事务的执行是分布式的。因此我们要实现能够保证ACID特性的分布式事务就变得很难很难。
在一套搞访问量,高并发的分布式系统下,如果想要去实现一个严格的ACID特性的分布式事务,那就会造成系统的可用性和严格一致性的冲突,严格的一致性,就意味着需要牺牲掉系统的可用性。因此在可用性和严格一致性存在着不能兼顾的难题,于是就cap和base这样的理论。
CAP理论
来自加州大学伯克利分校的Eric Brewer教授,这位教授好像很厉害的样子,据说是加州大学伯克利分校的终身教授,他首次提出了著名的cap猜想。后来,来自麻省理工学院的Seth Gilbert和Nancy Lynch从理论上证明了这个猜想,从此出现了公认的cap定理:一个分布式系统不可能同时满足一致性[Consistency],可用性[Availability],和分区容错性[Partition tolerance]这三个基本需求,最多只能同时满足其中的两项。
①一致性。
一致性是指数据在多个副本之间是否能够保持一致的特性。假如现在的多个结点中的数据是保持一致的,当执行完某一个更新操作之后,应当要保证系统的数据然后处于一致性的状态。
对于一个将数据副本分布在不同的分布式节点上,如果对第一个结点的数据进行了更新的操作,并且更新成功之后,却没有让第二个节点得到相应的更新。当外部系统再去调用第二个节点时,获取到的依然是原始的数据,这就是分布式数据不一致的情况了。在分布式系统中,如果能够做到针对一个数据项更新操作执行成功之后,所有的用户都可以读取到最新的值,那么这样的系统就被认为是具有强一致性的。
②可用性。
可用性是指系统提供的服务必须一致处于可用的状态,对于用户的每一个操作请求总是能够在有限的时间内,返回结果。
有限的时间内:对于用户的一个操作请求,系统必须能够在指定的时间内返回对应的结果。如果超过了这个时间,就认为系统是不可用的。
返回结果是可用性的一个非常重要的指标,它要求系统在完成对用户请求的处理后,返回一个正常的响应结果。正常的响应结果包含成功或失败,而不是一个让用户迷惑的结果。
③分区容错性。
分布式系统在遇到任何网络分区故障的时候,仍然需要对外提供满足一致性和可用性的服务。
cap定理示意图:我从proccesson模板上找到现成的一张图。
一个分布式系统既然不能同时满足上述的三个需求,因此在进行对cap定理的应用时,我们就需要去抛弃一项。
①选择CA
放弃分区容错性,比较简单的方式就是把所有的数据都放在一个分布式节点上。那不就又成为了单机应用了吗?
②选择CP
放弃可用性,一旦出现网络故障,受到影响的服务需要再等待一定时间,因为系统处于不可用的状态。
③选择AP
放弃一致性,这里所指的一致性是强一致性,但是确保最终一致性。是很多分布式系统的选择。
小结:从cap的定理可以看出,分区容错性是一个最基本的要求,因为既然是一个分布式系统,必然要部署到两个或两个以上的节点上,否则,就不是分布式系统,因此我们只能在一致性和可用性寻求平衡。
BASE理论
base是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的简写。base是对cap中一致性和可用性的权衡的结果。是根据cao理论演变而来,核心思想是即使无法做到强一致性,但是每个应用根据自身的业务特点,采用适当的方式来使系统达到最终与执行。
①基本可用
基本可用指的是分布式系统出现了不可预知故障的时候,允许损失部分可用性。响应时间合理延长,功能上适当做服务降级。
②弱状态
弱状态指的是允许系统中的数据存在中间状态,并认为该中间状态不会永祥系统的整体可用性,即允许在各个节点数据同步时存在延时。
③最终一致性
最终一致性强调的是系统中所有的数据副本,在经过一点时间 的同步之后,最终能够达到一个一致的状态。因此,最终一致性的本质是需要系统保证数据最终能够达到一致。而不需要实时保证系统数据的一致性。