Seata TCC邏輯是什么?

Seata TCC邏輯是什么?

展开
收起
真的很搞笑 2023-05-30 16:07:55 98 发布于黑龙江 分享
分享
版权
举报
阿里云 AI 助理回答

Seata TCC(Try-Confirm-Cancel)逻辑是一种分布式事务解决方案,旨在通过两阶段提交的方式确保跨服务调用和分库分表等场景下的数据一致性。以下是Seata TCC模式的核心逻辑和实现细节:


1. TCC模式的基本概念

TCC模式将事务分为三个阶段: - Try阶段:预留资源或检查业务前置条件,确保后续的Confirm或Cancel操作能够成功执行。 - Confirm阶段:确认并提交事务,执行实际的业务操作,通常要求幂等性。 - Cancel阶段:回滚事务,释放Try阶段预留的资源,同样要求幂等性。

TCC模式适用于需要高度灵活性和高性能的分布式事务场景,例如金融交易、库存管理等。


2. TCC模式的实现规范

在Seata中,TCC模式的实现需要遵循以下规范:

(1) 接口定义

  • Try方法
    • 第一个参数类型必须是BusinessActionContext,用于传递事务上下文。
    • 后续参数可以自定义,用于传递业务数据。
  • Confirm方法
    • 有且仅有一个参数,类型为BusinessActionContext
    • 返回值必须为boolean类型,表示操作是否成功。
  • Cancel方法
    • 有且仅有一个参数,类型为BusinessActionContext
    • 返回值必须为boolean类型,表示操作是否成功。

(2) 幂等性控制

  • Confirm和Cancel方法必须支持幂等性,即同一笔事务的重复提交或回滚不会对业务数据造成影响。

(3) 数据可见性与隔离性

  • 在事务处理过程中,需兼容未处理完的中间数据的可见性,例如通过文案提示用户当前冻结金额。
  • 对于状态类数据(如账户余额),需提供隔离性控制,确保不同事务操作的资源互不干扰。

(4) 空回滚与空提交

  • 允许空回滚:当回滚请求到达时,如果对应的具体业务数据为空,则返回成功。
  • 拒绝空提交:当提交请求到达时,如果对应的具体业务数据为空,则返回失败。

3. Seata TCC模式的接入方式

Seata TCC模式可以通过多种框架接入,包括SOFARPC、Dubbo和Spring Cloud。以下是具体的接入步骤:

(1) 基于SOFARPC和Dubbo框架

  • 接口定义
    • 在TCC参与者的接口中,添加@TwoPhaseBusinessAction注解,并声明Try、Confirm和Cancel方法。
    • 注解属性包括:
    • name:TCC参与者的全局唯一名称。
    • commitMethod:二阶段Confirm方法的名称。
    • rollbackMethod:二阶段Cancel方法的名称。
  • 实现类
    • 编写实现类,分别实现Try、Confirm和Cancel方法。
    • Try方法的第一个参数必须是BusinessActionContext,后续参数可自定义。

(2) 基于Spring Cloud框架

  • Controller定义
    • 在Controller中定义Try、Confirm和Cancel方法。
    • Try方法需添加@TwoPhaseBusinessAction注解。
  • Feign API
    • 定义Feign接口,暴露Try方法的服务。
    • 实现类中完成Try、Confirm和Cancel方法的逻辑。

(3) 配置注意事项

  • 开启TCC模式
    • 单独使用TCC模式时,需在配置文件中显式开启TCC模式。
    • 如果同时使用AT模式并将MQ事务消息纳入全局事务管理,则需同时开启AT和TCC模式。
  • 配置顺序
    • 在GTS中使用MQ时,必须先声明MTRelationShipManager,再声明TxcTransactionScaner,以确保MQ事务消息能够正确纳入全局事务管理。

4. 样例逻辑说明

以下是一个典型的TCC模式样例逻辑,模拟用户下订单和扣减库存的业务流程: 1. 第一阶段(Try): - 订单服务将订单信息插入临时表temp_orders。 - 库存服务将商品ID和数量插入临时表temp_stock,并检查库存是否充足。 2. 第二阶段(Confirm/Cancel): - 如果事务成功,删除临时表中的数据。 - 如果事务失败,执行回滚操作,恢复库存。


5. 重要提醒

  • 幂等性保障:Confirm和Cancel方法必须设计为幂等操作,避免重复提交或回滚导致的数据异常。
  • 事务协调器(TC)依赖:TCC模式依赖Seata的事务协调器(TC)来记录全局事务状态、驱动分支事务提交或回滚等操作。
  • 性能优化:TCC模式的一阶段仅预留资源,二阶段才真正提交或回滚,因此具有较高的性能优势,但需要开发者自行实现复杂的业务逻辑。

通过以上内容,您可以全面了解Seata TCC模式的逻辑和实现方式,并根据具体业务需求进行接入和优化。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答标签:
问答地址:

阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。

还有其他疑问?
咨询AI助理
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等