介绍
Seata 是阿里巴巴开源的分布式事务中间件,一种分布式事务解决方案,具有高性能和易于使用的微服务架构。
1:对业务无侵入:即减少技术架构上的微服务化所带来的分布式事务问题对业务的侵入
2:高性能:减少分布式事务解决方案所带来的性能消耗
微服务中的分布式事务问题
让我们想象一下传统的单片应用程序。它的业务由3个模块组成。他们使用单个本地数据源。
自然,本地事务将保证数据的一致性。
微服务架构已发生了变化。上面提到的3个模块被设计为在3个不同数据源之上的3个服务(模式:每个服务的数据库)。本地事务自然可以保证每个服务中的数据一致性。
但是整个业务逻辑范围如何呢?
Seata怎么办?
Seata只是上述问题的解决方案。
首先,如何定义分布式事务?
我们说,分布式事务是由一批分支事务组成的全局事务,通常分支事务只是本地事务。
设计
Seata中分布式事务实现方案,AT和TCC。
AT
AT模式是基于XA事务演进而来,核心是对业务无侵入,是一种改进后的两阶段提交,需要数据库支持。
基本组件:
- 事务协调器(TC):事务协调器,维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚。
- Transaction Manager(TM): 控制全局事务的边界,负责开启一个全局事务,并最终发起全局提交或全局回滚的决议。
- 资源管理器(RM):控制分支事务,负责分支注册、状态汇报,并接收事务协调器的指令,驱动分支(本地)事务的提交和回滚。
处理流程:
- TM要求TC开始新的全局事务。TC生成表示全局事务的XID。
- XID通过微服务的调用链传播。
- RM将本地事务注册为XID到TC的相应全局事务的分支。
- TM要求TC提交或回滚XID的相应全局事务。
- TC在XID的相应全局事务下驱动所有分支事务以完成分支提交或回滚。