0

分布式事务-TCC&Saga模式

2024.10.11 | cuithink | 33次围观

Seata TCC 模式

回顾总览中的描述:一个分布式的全局事务,整体是 两阶段提交 的模型。全局事务是由若干分支事务组成的,分支事务要满足 两阶段提交 的模型要求,即需要每个分支事务都具备自己的:

  • 一阶段 prepare 行为

  • 二阶段 commit 或 rollback 行为

根据两阶段行为模式的不同,我们将分支事务划分为 Automatic (Branch) Transaction Mode 和 TCC (Branch) Transaction Mode.

AT 模式基于 支持本地 ACID 事务 的 关系型数据库:

  1. 一阶段 prepare 行为:在本地事务中,一并提交业务数据更新和相应回滚日志记录。

  2. 二阶段 commit 行为:马上成功结束,自动 异步批量清理回滚日志。

  3. 二阶段 rollback 行为:通过回滚日志,自动 生成补偿操作,完成数据回滚。

相应的,TCC 模式,不依赖于底层数据资源的事务支持:

  1. 一阶段 prepare 行为:调用 自定义 的 prepare 逻辑。

  2. 二阶段 commit 行为:调用 自定义 的 commit 逻辑。

  3. 二阶段 rollback 行为:调用 自定义 的 rollback 逻辑。

所谓 TCC 模式,是指支持把 自定义 的分支事务纳入到全局事务的管理中。

Seata Saga 模式

Saga模式是SEATA提供的长事务解决方案,在Saga模式中,业务流程中每个参与者都提交本地事务,当出现某一个参与者失败则补偿前面已经成功的参与者,一阶段正向服务和二阶段补偿服务都由业务开发实现。

概述

适用场景

  1. 业务流程长、业务流程多

  2. 参与者包含其它公司或遗留系统服务,无法提供 TCC 模式要求的三个接口

优势

  1. 一阶段提交本地事务,无锁,高性能

  2. 事件驱动架构,参与者可异步执行,高吞吐

  3. 补偿服务易于实现

缺点

  1. 不保证隔离性(应对方案见后面文档)

Saga的实现

目前SEATA提供的Saga模式是基于状态机引擎来实现的,机制是:

  1. 通过状态图来定义服务调用的流程并生成 json 状态语言定义文件

  2. 状态图中一个节点可以是调用一个服务,节点可以配置它的补偿节点

  3. 状态图 json 由状态机引擎驱动执行,当出现异常时状态引擎反向执行已成功节点对应的补偿节点将事务回滚

    1. 注意: 异常发生时是否进行补偿也可由用户自定义决定

  1. 可以实现服务编排需求,支持单项选择、并发、子流程、参数转换、参数映射、服务执行状态判断、异常捕获等功能

示例状态图:


粤ICP备16076548号
发表评论