正好公司要做分布式事务相关的解决方案,着手了解了下分布式事务。
分布式事务概述
1.分布式事务概念 :
分布式事务就是将多个节点的事务看成一个整体处理,分布式事务由事务参与者、资源服务器、事务管理器等组成。
2.分布式事务解决方案
2.1实现思路
1.两段式事务和三段式事务

图(1)两段式事务
第一个阶段 : 所有参与全局事务的节点都开始准备,告诉事务管理器它们准备好提交了。
第二个阶段 : 事务管理器告诉资源管理器执行rollback或者commit,如果任何一个节点显示不能commit,那么所有的节点就得全部rollback。 缺点异常明显,如果第一个事务提交给了资源管理器,第二个事务提交的时候服务挂了,这条事务的状态也是不确定的,没人知道事务是否已经被提交,当事务管理器出错时,两阶段无法保证事务执行的完整性。
2.基于X、A的分布式事务

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

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

2.2 两种主流事务的比较
- 基于消息事务是强一致性事务,A系统开启事务的时候,会等B系统给反馈,才会继续进行,这时候A系统会起线程锁住,存在资源浪费。
- TCC事务在确认和取消阶段释放资源。重点在try的时候会预留资源,会把一些事务数据资源存到库。
- 与基于消息事务对比,TCC对并发量,时效性更好,所有操作都集中在confirm中,结果实时返回。
2.3 分布式事务框架介绍
- 阿里云自带的全局事务服务 (收费不介绍)

- 开源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 会不断的修改数据库内的状态 (初始化事务,修改事务状态),这样就可以保证每一个环节记录状态,可以知道事务执行到那个环节。


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