Seata 分布式事务,以及其应用场景,实现原理,替代方案

Seata 分布式事务

Seata (Simple Extensible Autonomous Transaction Architecture) 是一个开源的分布式事务解决方案,由阿里巴巴提出。Seata 的目标是提供简单、通用、高性能的分布式事务服务,主要用于解决微服务架构下的数据一致性问题。

应用场景

  1. 微服务架构:在微服务架构中,一个业务操作可能涉及多个微服务的数据库操作,这些操作需要在分布式环境中保持一致性。
  2. 跨数据库操作:在一个业务操作中,可能需要操作多个不同数据库中的数据,保证这些操作的原子性和一致性。
  3. 跨数据源事务:当一个业务操作涉及到多个不同的数据源(如 MySQL、PostgreSQL、Oracle 等)时,需要保证数据的一致性。

实现原理

Seata 主要基于两阶段提交协议 (Two-Phase Commit Protocol) 和 TCC 模型 (Try-Confirm-Cancel) 实现分布式事务管理。

  1. 两阶段提交 (2PC)

    • 第一阶段 (Prepare):协调者要求所有参与者准备并锁定资源,参与者执行事务并将状态改为“准备提交”。
    • 第二阶段 (Commit/Rollback):协调者根据所有参与者的准备情况决定提交或回滚事务。所有参与者根据协调者的决定执行提交或回滚操作。
  2. TCC 模型

    • Try:尝试执行业务操作,并预留必要的业务资源。
    • Confirm:确认执行业务操作,真正提交事务。
    • Cancel:取消业务操作,释放预留的业务资源。

Seata 包含三个核心组件:

  1. Transaction Coordinator (TC):事务协调器,负责维护全局事务的状态,协调全局事务的提交或回滚。
  2. Transaction Manager ™:事务管理器,负责开启全局事务,提交或回滚全局事务。
  3. Resource Manager (RM):资源管理器,负责管理分支事务,向 TC 注册分支事务,并负责分支事务的提交或回滚。

替代方案

  1. Atomikos:一个成熟的开源分布式事务管理器,支持 JTA 标准,实现了 XA 协议的两阶段提交。
  2. Narayana:Red Hat 提供的一个强大的事务管理器,支持多种事务协议,包括 JTA、REST-AT 和 WS-AT。
  3. Spring Cloud Sleuth:通过分布式日志跟踪实现微服务间的调用链跟踪和事务管理,虽然不是严格意义上的分布式事务,但可以实现类似的功能。
  4. Saga 模式:一种分布式事务管理模式,通过长时间运行的业务事务和补偿机制实现最终一致性。适用于一些允许最终一致性的业务场景。

Seata 提供了一种易于使用且高性能的分布式事务解决方案,适用于需要严格数据一致性的微服务架构和跨数据库操作。其基于两阶段提交和 TCC 模型的实现,保证了分布式事务的原子性和一致性。

Seata 实现原理的故事版解释

在一个繁忙的城市,有一个叫做“协调镇”的地方,这里有一个高效的市长——协调员(TC),还有一群负责具体事务的商人——事务管理者(TM)和资源管理者(RM)。他们一起合作,确保所有重要的交易都能顺利完成。

故事的开端

有一天,一个大客户来到协调镇,要求完成一笔复杂的交易。这个交易涉及到多个商人,每个商人都有自己负责的部分。这就是我们的分布式事务。

第一阶段:准备阶段(Prepare)

协调员(TC)接到客户的请求,决定分两个阶段来完成这笔交易。

  1. 召集商人:协调员首先召集了所有涉及到这笔交易的商人(RM),并告诉他们这个重要的任务。
  2. 准备资源:商人们各自准备好所需的资源,并告诉协调员他们已经准备好了。例如,一个商人准备好了商品,另一个商人准备好了运送工具,第三个商人准备好了支付方式。
  3. 报告准备情况:每个商人都会向协调员报告他们的准备情况,表示他们已经准备好,并锁定了所有需要的资源。

第二阶段:提交或回滚阶段(Commit/Rollback)

协调员收到了所有商人的准备报告,开始做出最终的决定。

  1. 确认提交

    • 如果所有商人都报告他们已经准备好了,协调员会向所有商人发出确认提交的命令。
    • 每个商人根据协调员的命令,完成自己的部分交易。例如,商品商人发出商品,运送商人安排运输,支付商人完成支付。
    • 最终,整个交易成功完成,客户满意地离开了协调镇。
  2. 回滚操作

    • 如果有任何一个商人报告他们无法准备好资源,协调员会发出回滚命令。
    • 每个商人根据协调员的命令,取消之前的准备操作,并释放所有锁定的资源。例如,商品商人收回商品,运送商人取消运输安排,支付商人取消支付请求。
    • 最终,这笔交易被取消,所有资源恢复原状。

另一种方式:TCC 模型

在协调镇,有时交易会更复杂。为了确保每一步都能顺利进行,商人们采用了另一个策略,叫做 TCC 模型。

  1. 尝试(Try)

    • 在交易的最初阶段,每个商人都会尝试进行交易,并预留必要的资源。
    • 例如,商品商人会暂时预留商品,运送商人会准备好运输工具,但不会真正开始运送,支付商人会预留支付金额。
  2. 确认(Confirm)

    • 如果所有商人都成功完成了尝试阶段,协调员会发出确认命令。
    • 商人们会真正完成交易:商品商人发出商品,运送商人开始运输,支付商人完成支付。
  3. 取消(Cancel)

    • 如果在尝试阶段有任何问题,协调员会发出取消命令。
    • 商人们会取消交易,并释放预留的资源。例如,商品商人收回商品,运送商人取消运输安排,支付商人释放预留的金额。

故事的结尾

通过这种方式,协调镇的市长(协调员)、事务管理者和资源管理者们,确保了每一笔复杂的交易都能顺利完成,不管是通过两阶段提交还是 TCC 模型。客户们对协调镇的高效和可靠非常满意,他们知道在这里进行的每一笔交易都能得到妥善的处理和保障。

这就是 Seata 分布式事务的故事,通过协调员、事务管理者和资源管理者的合作,确保每一笔交易的成功或安全取消。

  • 28
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宋发元

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值