1. 分布式事务如何理解?
分为两个阶段【二阶段提交 Alibaba组件 Smeta就是这种方式】
1. 事务协调者,向各个服务发起数据操作的请求,每一个服务进行独立的处理 ,但是数据不提交
2. 事务协调者收到各个服务完成的报告后,再次下达命令来完成事物提交,于是数据才会发生真正的变更
2. Smata的三个重要角色?
![]()
其中:这里有用到@Transactional 是Spring中的声明事物注解。同时smata对其进行了扩展,也支持了远程分布式事务
(1)、注册分支事物,会告诉TC组件,要准备向订单表插入数据了
(2)、当服务执行完成之后,会进行上报
上报后: GlobalTranstrational会自动发起全局事物的提交/回滚
3. 如何回滚? 【SqlParse】
AT模式下:需要在TM、RM所有的数据库里面,增加UNDO_LOG 回滚日志表,就是用来执行逆向操作的
![]()
4. 如何避免脏读和脏写?
主要是使用TC自带的分布式锁来完成。。。
![]()