seata的二阶段提交与三阶段提交

分布式事务与分段提交 seata

Seata 是一款开源的分布式事务解决方案,它支持高并发、高性能的分布式事务场景。Seata 主要通过两阶段提交(2PC)协议来实现分布式事务的一致性。在 Seata 中,分布式事务通常涉及多个服务之间的协调,这些服务可能分布在不同的数据库或者微服务中。

分布式事务与分段提交(Saga)

虽然 Seata 主要使用两阶段提交(2PC)来处理分布式事务,但它在设计上也支持了基于 Saga 模式的分段提交(Saga),这是一种长事务解决方案,适用于业务流程较长或需要补偿逻辑的情况。

两阶段提交(2PC)

两阶段提交协议包括两个阶段:

  1.  准备阶段(Prepare Phase)

      • 事务协调器(Transaction Coordinator, TC)通知所有的参与者(Resource Manager, RM)准备执行事务。

      • 每个 RM 执行事务操作的本地事务,但不提交,而是报告事务是否可以提交。

      • 如果所有 RM 都准备好提交,则进入第二阶段。

  2.  提交阶段(Commit Phase)

      • 如果所有 RM 都准备好,TC 将发送全局提交命令给所有的 RM。

      • RM 执行本地事务的提交操作。

      • 如果任何一个 RM 报告无法准备或提交,则进入回滚阶段。

分段提交(Saga)

Saga 模式是一种长事务的实现方式,它将一个长事务拆分为多个本地事务,每个本地事务可以有自己的补偿逻辑。如果某个步骤失败,可以通过补偿操作来撤销之前的操作,保证数据的一致性。

在 Seata 中,可以使用 Saga 模式来实现复杂的业务流程,步骤如下:

  1.  定义 Saga 流程

      • 在 Seata 控制台或通过编程方式定义 Saga 的各个步骤及其补偿逻辑。

  2.  实现服务: 

      • 每个服务实现各自的本地事务逻辑。

      • 服务间通过事件或消息进行通信。

  3.  补偿逻辑: 

      • 为每个操作定义补偿逻辑,以处理失败情况。

      • 补偿逻辑可以是反向操作或其他恢复数据一致性的操作

  4.  

    执行和监控:使用 Seata 的 Saga 服务管理器来协调和监控整个 Saga 流程的执行。

      • Seata 提供监控和回溯机制来查看和调试 Saga 流程的执行情况。

配置和使用 Seata 的 Saga 模式

在 Seata 中配置和使用 Saga 模式通常涉及以下步骤:

  1.  

    添加依赖:确保你的项目包含了 Seata 的相关依赖 

    <dependency>
    <groupId>io.seata</groupId>
    <artifactId>seata-all</artifactId>
    <version>版本号</version>
    </dependency>
  2.  配置 Seata:在 file.conf 和 registry.conf 中配置 Seata 服务。

  3.  定义 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日志回滚数据。

posted @ 2025-08-29 15:42  人在代码在  阅读(41)  评论(0)    收藏  举报