分布式事务概述

222 阅读3分钟

正好公司要做分布式事务相关的解决方案,着手了解了下分布式事务。

分布式事务概述

1.分布式事务概念 :

分布式事务就是将多个节点的事务看成一个整体处理,分布式事务由事务参与者、资源服务器、事务管理器等组成。

2.分布式事务解决方案

2.1实现思路

1.两段式事务和三段式事务

                        图(1)两段式事务                         

第一个阶段 : 所有参与全局事务的节点都开始准备,告诉事务管理器它们准备好提交了。

第二个阶段 : 事务管理器告诉资源管理器执行rollback或者commit,如果任何一个节点显示不能commit,那么所有的节点就得全部rollback。 缺点异常明显,如果第一个事务提交给了资源管理器,第二个事务提交的时候服务挂了,这条事务的状态也是不确定的,没人知道事务是否已经被提交,当事务管理器出错时,两阶段无法保证事务执行的完整性。

2.基于X、A的分布式事务

3.基于消息的最终一致性方案(目前主流)

4.TCC编程式补偿性事务(目前主流)

2.2 两种主流事务的比较

  1. 基于消息事务是强一致性事务,A系统开启事务的时候,会等B系统给反馈,才会继续进行,这时候A系统会起线程锁住,存在资源浪费。
  2. TCC事务在确认和取消阶段释放资源。重点在try的时候会预留资源,会把一些事务数据资源存到库。
  3. 与基于消息事务对比,TCC对并发量,时效性更好,所有操作都集中在confirm中,结果实时返回。

2.3 分布式事务框架介绍

  1. 阿里云自带的全局事务服务 (收费不介绍)

  1. 开源TCC框架(TCC-Transaction)

如图 所示TCC事务其实主要包含两个阶段:

Try阶段、Confirm/Cancel阶段 ,TCC会在try阶段预留资源,在Confirm阶段保证执行成功。

第一步 try(尝试执行业务)的时候,会检查所有相关业务, 预留需要的业务资源,这样就保证了一致性和隔离性。

第二步 confirm(确认执行业务) 使用try预留的业务资源 ( 注意幂等性, TCC-Transaction框架本身不支持幂等性 ,可以在代码中用分布式锁实现)

第三步 cancel(取消执行业务) 释放try预留的业务资源。

事务拦截代码

2.3.2 TCC整体流程分析

注册创建事务 -- > 管理事务 -- > 执行try方法 -- > 执行confirm和cancel方法

通过流程和代码都可以看出来,TCC 会不断的修改数据库内的状态 (初始化事务,修改事务状态),这样就可以保证每一个环节记录状态,可以知道事务执行到那个环节。

老松原创,转载注明出处。