使用分布式事务涉及两个核心角色:
发起方:指的是开启分布式事务的应用系统。
参与者:指的是提供分支事务的应用系统。同一个应用系统可能兼具发起方和参与方两个角色。
分布式事务目前提供了三种参与者接入模式:TCC 模式、FMT 模式 与 Saga 模式。
TCC 模式
TCC(Try-Confirm-Cancel)是一种高性能的分布式事务接入模式,该模式提供了更多的灵活性,几乎可满足任何您能想到的事务场景。TCC 模式提供自定义补偿型事务、自定义资源预留型事务、消息事务等场景,用户可以介入两阶段提交的过程,以达到特殊场景下的自定义优化及特殊功能的实现。
TCC 模式架构如下:
TCC 模式的特性如下:
最终一致:事务处理过程中,会有短暂不一致的情况,但通过恢复系统,可以让事务的数据达到最终一致的目标。
协议简单:TCC 模式定义了类似 2PC 的标准两阶段接口,业务系统只需要实现对应的接口就可以使用 TCC 模式的事务功能。
与 RPC 服务协议无关:在 SOA 架构下,一个或多个数据库操作往往被包装成一个或多个 Service,不同的 Service 之间通过 RPC 协议通信。TCC 模式构建在 SOA 架构上,与底层协议无关。
与底层事务实现无关:TCC 是一个抽象的基于 Service 层的概念,与底层事务实现无关,也就是说在 TCC 的范围内,无论是关系型数据库 MySQL、Oracle,还是 KV 存储 MemCache,或者列存数据库 HBase,只要将对其的操作包装成 TCC 的参与者,就可以接入到 TCC 事务范围内。
FMT 模式
为了解决 TCC 模式的易用性问题,分布式事务推出了框架管理事务模式(Framework-managed transactions,简称 FMT)。FMT 是一种无侵入的分布式事务解决方案,该模式解决了分布式事务的易用性问题,最大的特点是易于使用、快速接入以及对业务代码无侵入。
FMT 模式架构如下:
Saga 模式
Saga 模式是 SEATA 提供的长事务解决方案,适用于业务流程长、业务流程多、参与者包含其它公司或老系统服务等场景。在 Saga 模式中,业务流程中每个参与者都提交本地事务。当出现某一个参与者失败则补偿前面已经成功的参与者,一阶段正向服务和二阶段补偿服务都由业务开发实现。
Saga 模式架构如下图所示。其中,左侧是正常事务流程,当执行到 T3 时出现异常,则开始执行右侧的事务补偿流程,反向执行 T3、T2、T1 的补偿服务。
Saga 模式的特性如下:
一阶段提交本地数据库事务,无锁,高性能。
参与者可以采用事务驱动异步执行,高并发高吞吐。
补偿服务即正向服务的“反向”,易于理解,易于实现。
支持服务编排、有可视化的设计器和执行轨迹监控。