seata 分布式事务


seata(https://github.com/seata/seata)是一个分布式事务解决方案,内置了对AT、XA、TCC、saga的支持,主要由TC  TM RM三类角色,TC(事务协调器)作为服务端,TM(事务管理器)和RM(资源管理器)工作在客户端。 seata最大程度的保证了对应用的透明。 

AT模式:AT模式是通过一个两阶段提交的方式来管理事务,

  第一阶段:通过对数据库连接的代理,对分布式事务下的SQL语句进行了解析。 在SQL执行前后,生成了将要操作数据行的数据镜像(undolog),并和SQL操作一起作为一个事物插入到数据库中。

  第二阶段:在分布式操作完成后,由TM完成事物的提交或者回滚(本质上发送提交或者回滚命令给TC服务端), 再又TC服务端通知各个分支事务进行提交或者回滚。 如果是提交操作,因为在第一阶段已经完成了数据库的事物,所以只需要删除对应的undolog即可,如果是回滚操作,则需要根据undolog,生成对应的反向语句,更新数据库。

  在第一阶段末尾,有个很重要的操作是申请全局锁,如果申请失败,第一阶段的事务是不会提交的,这个全局锁,其实就是由准备更新的表的行主键Id组成。 如果这个时候其他事务需要更新对应行,在申请全局锁的时候会被拒绝,如果是查询操作,且不能未提交读,可以带上for update, seata会为select for updata查询出的数据检查是否有全局锁。

 

我的注解版(目前仅分析了AT模式):

https://github.com/zhaoyb/seata


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM