分布式事务笔记
实现思路
- 基于XA的两段式事务(2pc)和三段式事务(3pc)
- 基于消息的最终一致性解决方案
- TCC编程式补偿性事务(生产中应用最广泛)
两段式事务
若在第一阶段中某一个资源管理器没有准备就绪(即本地事务执行失败),则事务管理器(协调者)在第二阶段向所有的资源管理器发送回滚消息,回滚本地事务。
两段式分布式事务方式缺陷
- 若一个资源管理器未发出已提交指令,事务管理器无法知晓其本地事务是否已经提交
三段式事务
三段式事务在两段式事务的两次阶段之间加一个预阶段,此阶段询问所有资源管理器是否已经准备好提交事务,都准备好以后才会在第三阶段发出提交指令,减少本地事务commit失败的风险。
基于XA的分布式事务的缺陷
- 事务执行过程中各节点在占据数据库资源,系统性能会出现问题
- 事务管理器单点故障问题
- 消息丢失导致不一致性问题,可能会因为网络问题导致一部分资源管理器受到事务提交的消息而一部分没有受到。
基于消息的最终一致性解决方案
TCC补偿性事务方案(Try Confirm Cancel)
基于消息和TCC的比较
- 基于消息的事务是强一致性事务,会存在资源浪费,尤其是时效性上,会存在等待的情况
- TCC事务是柔性事务,在try阶段要对资源做预留
- TCC事务在确认或取消阶段释放资源
- 与基于消息事务对比,TCC的时效性更好
分布式事务框架
- Global Transaction Service(全局事务服务)GTS
- 蚂蚁金服分布式服务DTX
- 开源TCC框架1:TCC-Transaction
- 开源TCC框架2:ByteTCC
还没有评论,来说两句吧...