分布式事务的概念

Posted 疾风java

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式事务的概念相关的知识,希望对你有一定的参考价值。

分布式事务的概念

要了解分布式事务,我们要先清楚什么是事务。事务就是多个原子操作的组合,他们就像是一条绳上的蚂蚱,要么一起生,要么一起死,在事务中,如果其中一个操作执行失败,那么剩下的操作都不再执行,而之前执行过的操作也需要回滚。至于分布式事务,顾名思义就是包含对分布式系统中不同节点的操作的事务。

事务的目的

我们使用事务的目的是为了防止一些执行失败的操作对数据造成影响,产生错误数据。比较典型的例子就是转账、下订单等关于交易的事务。比如转账业务,我们从A账户转账500块钱给B账户,那么这一条事务的操作就是:从A账户减去500块钱;向B账户中增加500块钱。如果我们执行第一个操作成功,从A账户中扣除了500块钱,但是执行第二个操作失败,B账户中没有增加500块钱。这样子就产生了错误数据,500块钱“凭空消失”了。这时我们就需要使用事务,当第二个操作执行失败后,我们将第一个操作进行回滚,将从A账户中减去的500块钱“还回去”,这样子就保证了数据的正确性。


事务的特性

事务有原子性、一致性、隔离性、持久性四个特性,取英文名的首字母,简称为ACID特性。


1.原子性(atomicity):一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。


2.一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。


3.隔离性(isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。


4.持久性(durability):持久性也称永久性,指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。


BASE思想

事务的特性是ACID特性,然后我们由CAP定理可知,如果要保证分布式系统的分区容错性,那么一致性和可用性是不可兼得的,但是在分布式系统中缺少任何一个可能都会造成很大影响,为了处理这种情况,就有了BASE思想。


BASE思想是通过牺牲强一致性来满足可用性,然后通过达到最终一致性来保证数据的正确性。BASE思想包含如下三个元素:


1.BA(Basically Available):基本可用,允许损失部分可用性。


2.S(Soft State):软状态,状态可以在一段时间内不同步。


3.E(Eventually Consistent):最终一致,允许在一段时间内数据不一致,数据最终达到一致即可。


软状态是实现BASE思想的方法,基本可用和最终一致是BASE思想的目标。比如在事务的目的中所提的转账的例子,当执行第二个操作时失败,这时我们不回滚第一个操作,然后我们将失败的B操作记录下来,在一定时间内将其执行,这样子就保证了最终一致性。


如何解决分布式一致性问题

保证最终一致性的模式

保证最终一致性的模式是用来解决分布式事务中的某个问题,就像设计模式用来解决系统中的某一个问题。比如事务结束了,但是某个状态不一致;高并发场景下,如何保证基本可用性和最终一致性。


查询模式

任何事务操作都需要提供一个查询接口,用来向外部输出操作执行的状态。事务操作的使用方可以通过查询接口得知事务操作执行的状态,然后根据不同的状态来做不同的处理操作。

补偿模式

通过查询模式,可以知道事务操作的状态,如果操作处于错误的状态,就需要对其未完成的子操作进行修复,来让系统达到一致。这种后期通过努力让系统最终达到一致的操作就叫做补偿。

异步确保模式

异步确保模式是使用补偿模式一个经典例子。在高并发的场景下,把使用方对响应时间要求不高的操作从主流程中摘除,通过异步的方式进行处理,将操作封装后持久化到数据库,然后定时捞取未完成的操作进行补偿模式。

定期校对模式

系统中各节点之间可能存在不一致,就需要定期执行校对操作,如果发现不一致,则运用补偿模式,进行补偿操作,来使系统最终达到一致。


分布式一致性协议

1.两阶段提交协议(2PC):


在分布式事务中,一个事务贯穿多个节点,每个节点仅仅知道自己操作的结果,但是并不知道其它节点的操作结果。为了保证事务的一致性,就需要一个统一的协调者,每个节点把操作的结果告知协调者,协调者再根据操作结果再通知各节点是将操作提交还是取消操作,下图是执行成功的示例:




两阶段提交协议有准备阶段和提交阶段两个阶段,可以保证强一致性,但是复杂,不够灵活,而且还有以下缺点:阻塞(每个节点必须收到响应才会继续向下执行,否则则一直处于阻塞状态,占用资源),节点故障(如果在执行事务的过程中有节点发生故障,则协调者只能等待,会阻塞其他节点资源,而如果发生这种情况后,协调者也发生故障,新选取的协调者无法处理这种情况)。


2.三阶段提交协议(3PC):


三阶段提交协议是两阶段提交协议的改进,目的是解决两阶段协议的缺点。它加入了超时机制来解决两阶段协议的阻塞问题,并在准备阶段前增加了询问阶段(协调者询问节点是否可以提交,节点只需要返回是或否即可)。如果发生响应超时的问题,则可以回滚,不会使节点进入阻塞状态等待。


三阶段提交协议的缺点是需要更多的通讯次数,实现比较复杂。两阶段提交协议和三阶段提交协议都是强一致性的分布式事务解决方案。




分布式事务最终一致性解决方案

  1. 可靠消息服务

  2. 最大努力通知

  3. TCC模式

以上是关于分布式事务的概念的主要内容,如果未能解决你的问题,请参考以下文章

分布式事务-01:分布式事务产生原因及相关概念

分布式事务--01---基本术语概念 事务准入规则 事务基本规范

分布式事务--01---基本术语概念 事务准入规则 事务基本规范

分布式事务专题-基本概念

分布式事务专题-基本概念

分布式事务专题-基本概念