seata的二阶段提交与三阶段提交
Seata 是一款开源的分布式事务解决方案,它支持高并发、高性能的分布式事务场景。Seata 主要通过两阶段提交(2PC)协议来实现分布式事务的一致性。在 Seata 中,分布式事务通常涉及多个服务之间的协调,这些服务可能分布在不同的数据库或者微服务中。
分布式事务与分段提交(Saga)
虽然 Seata 主要使用两阶段提交(2PC)来处理分布式事务,但它在设计上也支持了基于 Saga 模式的分段提交(Saga),这是一种长事务解决方案,适用于业务流程较长或需要补偿逻辑的情况。
两阶段提交(2PC)
两阶段提交协议包括两个阶段:
-
准备阶段(Prepare Phase):
-
事务协调器(Transaction Coordinator, TC)通知所有的参与者(Resource Manager, RM)准备执行事务。
-
每个 RM 执行事务操作的本地事务,但不提交,而是报告事务是否可以提交。
-
如果所有 RM 都准备好提交,则进入第二阶段。
-
-
提交阶段(Commit Phase):
-
如果所有 RM 都准备好,TC 将发送全局提交命令给所有的 RM。
-
RM 执行本地事务的提交操作。
-
如果任何一个 RM 报告无法准备或提交,则进入回滚阶段。
-
分段提交(Saga)
Saga 模式是一种长事务的实现方式,它将一个长事务拆分为多个本地事务,每个本地事务可以有自己的补偿逻辑。如果某个步骤失败,可以通过补偿操作来撤销之前的操作,保证数据的一致性。
在 Seata 中,可以使用 Saga 模式来实现复杂的业务流程,步骤如下:
-
定义 Saga 流程:
-
在 Seata 控制台或通过编程方式定义 Saga 的各个步骤及其补偿逻辑。
-
-
实现服务:
-
每个服务实现各自的本地事务逻辑。
-
服务间通过事件或消息进行通信。
-
-
补偿逻辑:
-
为每个操作定义补偿逻辑,以处理失败情况。
-
补偿逻辑可以是反向操作或其他恢复数据一致性的操作
-
-
执行和监控:使用 Seata 的 Saga 服务管理器来协调和监控整个 Saga 流程的执行。
-
Seata 提供监控和回溯机制来查看和调试 Saga 流程的执行情况。
-
配置和使用 Seata 的 Saga 模式
在 Seata 中配置和使用 Saga 模式通常涉及以下步骤:
-
添加依赖:确保你的项目包含了 Seata 的相关依赖
<dependency><groupId>io.seata</groupId><artifactId>seata-all</artifactId><version>版本号</version></dependency> -
配置 Seata:在
file.conf和registry.conf中配置 Seata 服务。 -
定义 Saga:使用 Seata 控制台或 API 定义 Saga 流程。
4.实现服务:在服务中实现本地事务和补偿逻辑。
5. 启动和测试:启动 Seata 服务并测试分布式事务的执行
通过以上步骤,你可以在 Seata 中使用两阶段提交和分段提交(Saga)来处理复杂的分布式事务场景。每种方法都有其适用场景,你可以根据实际业务需求选择合适的事务管理策略。
https://blog.csdn.net/weixin_58375621/article/details/149159149
seata的AT模式,事务管理器(开启全局事务)访问事务协调器,返回拿到xid,然后事务管理器访问事务资源服务器,生成前后镜像,undolog等,然后资源管理器把事务1注册到nacos,然后访问第二个事务资源服务器,生成对应的前后镜像,undolog日志,然后将事务2注册到nacos,然后返回事务管理器。
最后事务管理器集中提交或者回滚,成功则删除undolog日志。失败则按照undolog日志回滚数据。

浙公网安备 33010602011771号