当前工作只分表并未分库
分布式事务解决方案:
两阶段提交:XA接口规范
1.表决阶段,将所有参与者的是否可提交状态都反馈给协调者
2.执行阶段,决定是否提交或者回滚;
锁定资源时间长,同步阻塞的,不能确定是准确的事务,有些会宕机
TCC方案:try,confirm,cancel
1.业务应用会向事务协调器注册事务
2.业务应用调用所有服务的try接口
3.业务应用返回给协调器状态,调用confirm或者cancel接口
业务入侵强,都需要实现接口,需要实现多种回滚策略;
基于消息队列的:
1.A系统的业务代码和消息发送代码放到同一个事务中,
2.B系统订阅消息进行数据库操作
入侵强,需要大量改造
GTS:分布式事务中间件
优点:
1.性能强:ACID,高可用,高性能;
2.应用入侵少,只加注解就可以
3.支持多种框架Dubbo,SpringCloud等,如果需要调用第三方,而第三方没有接入GTS,则需要开启MT模式,等价于TCC,自定义多种行为
4.解决协调者单点的问题,保证数据一致性
集成:
1.客户端(Client):完成事务的发起与结束。
2.资源管理器(RM):完成事务分支的创建,提交,回滚等操作.
3.事务协调器(Server):主要负责分布式事务的整体推进,事务生命周期的管理
基于GTS的开源版本FESCAR:
生命周期:
1.业务应用要求协调者开始全局的事务,并生成一个调用链的ID
2.通过微服务的调用链传播,在进行数据库操作的时候会先获取xid,进而传播到下一个服务;
3.分支事务将在协调者中注册为xid的响应的全局事务;
4.业务要求协调者提交或者回滚响应的事务;
5.协调者驱动事务分支进行提交或回滚
添加@GlobalTransactional注解就可以