seata介绍
Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。
Seata元素
TC (Transaction Coordinator) - 事务协调者
维护全局和分支事务的状态,驱动全局事务提交或回滚。
TM (Transaction Manager) - 事务管理器
定义全局事务的范围:开始全局事务、提交或回滚全局事务。
RM (Resource Manager) - 资源管理器
管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
Seata AT模式
AT(自动事务)模式是Seata最主推的分布式事务解决方案,它是基于XA演进而来的一种分布式事务模式,所以它同样分为三大模块,分别是TM、RM和TC,其中TM和RM作为Seata的客户端与业务系统集成,TC作为Seata的服务器独立部署。TM表示事务管理器(Transaction Manager),它负责向TC注册一个全局事务,并生成一个全局唯一的XID。在AT模式下,每个数据库资源被当作一个RM(Resource Manager),在业务层面通过JDBC标准的接口访问RM时,Seata会对所有请求进行拦截。每个本地事务进行提交时,RM都会向TC(Transaction Coordinator,事务协调器)注册一个分支事务。
AT模式和XA一样,也是一个两阶提交事务模型,不过和XA相比,做了很多优化。
工作流程
image.png1.Business主业务通过TM通知TC开启全局事务。
2.Businiess调用的每个分支事务(比如Storage,order,account)需要注册到TC中,并时时汇报状态。
3.通过RM实时汇报事务状态,TC掌握每个分支事务的状态。
4.因为TC实时掌握每个分支事务,一旦某个事务失败,TC可以命令所有分支事务回滚。
可以看出TC就是seat抽离出的一层,用来维护全局和分支事务的状态(这种抽离出一层的方案,分布式组件中到处可见),此图中TC协调三个远程的事务(Storage,Order,Account),Business是主业务代码(TM),开启全局事务,控制总事务,RM资源管理应用在每一个服务中,负责和数据库交互,每一个服务里面对于本地事务的管理通过RM。
notice:
如果分支事务发现失败,默认情况下seata采用AT模式,每个服务的事务维系一个UNDO_LOG (回滚日志表)表,每个分支事务都是已提交的,TC通过每个事务的回滚表将之反向补偿,这整个过程都是自动回滚的。
网友评论