Seata 是什么? | Apache Seata
1、四种模式的选择
1.1 只有AT、 XA模式是代码无侵入的。首选这两个。
1.2 XA模式
XA 是一种基于两阶段提交协议(2PC)的分布式事务协议,它由 X/Open 组织提出。在这种模式下,事务管理器(Transaction Manager, TM)需要与多个资源管理器(Resource Manager, RM)进行协调,以确保事务的原子性。
两阶段提交协议(2PC)的工作过程:
- 第一阶段(准备阶段):事务管理器指示参与事务的所有资源管理器准备提交事务。每个资源管理器将对事务进行准备,如果可以提交事务,就将事务数据写入日志文件并向事务管理器返回一个“准备好”响应。
- 第二阶段(提交/回滚阶段):如果所有资源管理器都报告准备好,则事务管理器指示它们提交事务。如果任何资源管理器不能提交事务,则事务管理器指示所有资源管理器回滚事务。
Seata XA 模式的实现使用了上述两阶段提交协议来确保分布式事务的原子性。在 Seata 中,TM 负责协调整个事务的提交或回滚,而 RM 则是分布式事务中各个数据库实例或其他事务资源。
Seata XA 模式的优点:
- 一致性:通过使用 2PC 确保事务的强一致性。
- 遵循标准:XA 协议是一个成熟的、经过广泛验证的分布式事务协议。
Seata XA 模式的缺点:
- 性能成本:由于涉及多个阶段和网络往返,性能可能低于其他轻量级事务协议(如AT模式)。
- 锁资源:在两阶段提交过程中,会在涉及的资源上持有锁,可能导致资源锁定时间较长。
使用场景:
Seata XA 模式适合于对数据一致性要求极高的场景,以及对性能要求不是非常敏感的环境。由于它提供了强一致性保证,因此常用于金融、支付等领域的应用。
1.3 AT模式
Seata AT模式(Automatic Transaction Mode)是Seata提供的一种创新的分布式事务解决方案,它不同于传统的XA模式。AT模式旨在通过一种轻量级的方式,提供高性能且易于使用的分布式事务能力。AT模式主要针对关系型数据库的分布式事务处理。
AT模式的工作原理:
AT模式通过以下三个核心组件来管理分布式事务的生命周期:
-
事务协调器(TC,Transaction Coordinator): TC是分布式事务的协调者,负责维护全局事务的状态,并驱动全局事务的提交或回滚。
-
事务管理器(TM,Transaction Manager): TM负责定义事务的范围,即开始和结束全局事务的边界,它会在适当的时机向TC注册并报告全局事务的状态。
-
资源管理器(RM,Resource Manager): RM负责管理分布式事务中涉及的资源,通常是数据库连接。它将具体的数据库操作与TC进行通信,并接受TC的指令来提交或回滚分支事务。
AT模式的事务处理过程:
AT模式通过以下步骤来处理事务:
-
开始全局事务: 当应用需要执行分布式事务时,TM向TC发起一个新的全局事务,并获得一个全局事务ID(XID)。
-
业务执行: 在执行业务操作时,每个数据库操作都被看作是全局事务的一个分支。RM负责拦截数据操作请求,并执行两件事情:一是在本地数据库中执行实际的SQL操作;二是记录数据操作前后的状态差异,称为
before image
和after image
,用于后续的事务提交或回滚。 -
请求事务提交: 业务执行完毕后,TM会向TC请求提交全局事务。
-
TC驱动二阶段提交/回滚: 在第一阶段,TC会询问所有参与当前全局事务的RM是否准备好提交事务。如果所有RM都报告准备就绪,TC将进入第二阶段,指示所有RM提交分支事务。 如果任何一个RM报告准备失败,或者业务逻辑中发生异常导致TM请求回滚全局事务,TC则会指示所有RM回滚分支事务。
-
事务回滚处理: 如果分支事务需要回滚,RM会使用记录的
before image
来撤销之前的操作,确保数据的一致性。
AT模式的优点:
- 高性能:与XA模式相比,AT模式不需要两阶段锁定资源,因此可以减少锁的竞争,提高性能。
- 简单易用:AT模式对开发者更加友好,避免了XA中复杂的API和协议。
AT模式的缺点:
- 资源占用:由于需要记录数据修改的前后镜像,会增加存储的消耗。
- 数据一致性:在某些极端情况下,例如服务宕机或网络分区,可能会暂时出现数据不一致的情况。
AT模式适用于需要处理高并发事务,且对一致性要求不是极端严格的分布式系统。它能够很好地平衡分布式事务的性能和一致性需求。在实际部署Seata和使用AT模式之前,建议对Seata的架构和工作机制有一个深入的理解,并进行充分的测试以确保它适合你。