什么是分布式事务?
分布式事务(Distributed Transaction)是一种确保在分布式系统中跨多个独立的数据源或服务进行数据一致性的机制。在分布式系统中,事务可能涉及多个独立的数据库、消息队列或其他服务,每个组件都可能独立失败或成功。分布式事务的目标是确保所有参与的组件要么全部成功执行,要么全部回滚,以保持系统的一致性。
简单来说,以购买商品为例,要实现创建订单、清理购物车、扣减库存三部操作,三者分别存在三个不同的微服务中,其中调用通过远程接口调用实现,要实现微服务中的事务,让其要么全部成功,要么全部失败。
- 在购买商品服务中,进行订单创建,并调用购物车服务,库存服务接口进行数据库修改
- 在单一服务中,可以使用@Transactional事务注解开启事务,操作同一数据库中的不同表同时成功或者同时失败。
- 在微服务中,则需要引入分布式事务锁。在分布式系统中,如果一个业务需要多个服务合作完成,而且每一个服务都有事务,多个事务必须同时成功或者失败,这样的事务就是分布事务。其中的每一个服务的事务就是一个分支事务,整个业务成为全局事务。
分布式事务解决思路:
解决分布式事务,各个子事务之间必须能感应到彼此的事务状态,才能保证状态一致。
部署TC服务:
1.导入四张表(XA模式),在每一个业务表中创建一张快照表(AT模式)可参考官方
2.部署seata服务,并注册到nacos上
3.集成seata
XA模式:只需在seata中开启XA模式,并在全局事物开头处使用@GlobalTransactional注解即可
原理:
AT模式:默认使用
原理:
总结:
1.XA模式一阶段不提交,锁定资源;AT模式一阶段提交,不锁定资源。
2.XA模式依赖数据库机制实现回滚;AT模式利用数据库快照实现回滚。
3.XA模式强一致;AT模式最终一致。
注:分布式事务框架会对性能有所损耗,一般来说,使用微服务不会借用这种方式实现,而是使用消息通知的方式。