什么是分布式事务?
简单的说,就是一次大操作由不同小操作组成,这些小操作分布在不同服务器上,分布式事务需要保证这些小操作要么全部成功,要么全部失败.
两阶段提交
两阶段提交简称2PC(two phase commitment)
基本概念
- TM(Transaction Manager) 事务管理器
- RM(Resource Manager) 资源管理器
两阶段提交:
- 在第一阶段, 资源管理器向事务管理器汇报各自事务的状态;
- 在第二阶段, 事务管理器根据资源管理器汇报的状态来来确定是回滚还是提交;
注: 两阶段提交方案锁定资源时间长,对性能影响很大,基本不适合解决微服务事务问题.
两阶段提交协议是基于XA规范, 阻塞, 属于刚性事务
数据库实现(XA, MySQL和Oracle都支持)
xa_start, xa_end, xa_prepare, xa_commit, xa_rollback
TCC
基本原理
TCC(Try Confirm Cancel), 是2PC的一种改进
事务开始时,业务应用会向事务协调器注册启动事务。之后业务应用会调用所有服务的try接口,完成一阶段准备。之后事务协调器会根据try接口返回情况,决定调用confirm接口或者cancel接口。如果接口调用失败,会进行重试。
优缺点
TCC方案让应用自己定义数据库操作的粒度,使得降低锁冲突、提高吞吐量成为可能。 当然TCC方案也有不足之处,集中表现在以下两个方面:
- 对应用的侵入性强。业务逻辑的每个分支都需要实现try、confirm、cancel三个操作,应用侵入性较强,改造成本高。
- 实现难度较大。需要按照网络状态、系统故障等不同的失败原因实现不同的回滚策略。为了满足一致性的要求,confirm和cancel接口必须实现幂等。
基于消息的最终一致性方案
消息一致性方案是通过消息中间件保证上、下游应用数据操作的一致性。基本思路是将本地操作和