Seata 在数据源做了一层代理层,所以我们使用 Seata 时,我们使用的数据源实际上用的是 Seata 自带的数据源代理 DataSourceProxy,Seata 在这层代理中加入了很多逻辑,主要是解析 SQL,把业务数据在更新前后的数据镜像组织成回滚日志,并将 undo log 日志插入 undo_log 表中,保证每条更新数据的业务 sql 都有对应的回滚日志存在。这样做的好处就是,本地事务执行完可以立即释放本地事务锁定的资源,然后向 TC 上报分支状态。当 TM 决议全局提交时,就不需要同步协调处理了,TC 会异步调度各个 RM 分支事务删除对应的 undo log 日志即可,这个步骤非常快速地可以完成;当 TM 决议全局回滚时,RM 收到 TC 发送的回滚请求,RM 通过 XID 找到对应的 undo log 回滚日志,然后执行回滚日志完成回滚操作。
六、其他模式上面说的是seata的模式模式AT,seata也针对TCC做了适配兼容,支持TCC事务方案,原理前面已经介绍过,基本思路就是使用侵入业务上的补偿及事务管理器的协调来达到全局事务的一起提交及回滚。
七、总结 1)优点阿里背书,社区活跃,github1.3w start。
相对2pc来说性能有较大提升,避免多个库锁定导致的性能急剧下降。
使用简单,学习成本低,对业务无入侵,对于AT模式来说,只需一个注解就可以实现分布式事务。
可通过HA-Cluster保证高可用。
灵活,拓展性高,配置,服务发现和注册,全局锁,可由用户自己实现。
2)缺点TC不支持集群部署,一旦TC宕机会导致无法处理分布式事务。
Seata的引入全局锁会额外增加死锁的风险。
单机多数据源跨服务目前不支持。