共计 1435 个字符,预计需要花费 4 分钟才能阅读完成。
导览
本大节次要介绍分布式事务的外围概念,次要包含:
- 本地事务
- 两阶段 XA 事务
- Seata 柔性事务
两阶段事务 -XA
两阶段事务提交采纳的是 X /OPEN 组织所定义的 DTP 模型,通过形象进去的 AP, TM, RM 的概念能够保障事务的强一致性。其中 TM 和 RM 间采纳 XA 的协定进行双向通信。与传统的本地事务相比,XA 事务减少了 prepare 阶段,数据库除了被动承受提交指令外,还能够反向告诉调用方事务是否能够被提交。因而 TM 能够收集所有分支事务的 prepare 后果,最初进行原子的提交,保障事务的强一致性。
Java 通过定义 JTA 接口实现了 XA 的模型,JTA 接口里的 ResourceManager 须要数据库厂商提供 XA 的驱动实现,而 TransactionManager 则须要事务管理器的厂商实现,传统的事务管理器须要同应用服务器绑定,因而应用的老本很高。而嵌入式的事务管器能够以 jar 包的模式提供服务,同 ShardingSphere 集成后,可保障分片后跨库事务强一致性。
通常,只有应用了事务管理器厂商所提供的 XA 事务连接池,能力反对 XA 的事务。ShardingSphere 整合 XA 事务时,拆散了 XA 事务管理和连接池治理,这样接入 XA 时,能够做到对业务的零侵入。
SAGA 柔性事务
- Saga 事务主动反向弥补
Saga 事务
Saga 这个概念来源于三十多年前的一篇数据库论文 Sagas,一个 Saga 事务是一个有多个短时事务组成的长时的事务。在分布式事务场景下,咱们把一个 Saga 分布式事务看做是一个由多个本地事务组成的事务,每个本地事务都有一个与之对应的弥补事务。在 Saga 事务的执行过程中,如果某一步执行出现异常,Saga 事务会被终止,同时会调用对应的弥补事务实现相干的复原操作,这样保障 Saga 相干的本地事务要么都是执行胜利,要么通过弥补复原成为事务执行之前的状态。
主动反向弥补
Saga 定义了一个事务中的每个子事务都有一个与之对应的反向弥补操作。由 Saga 事务管理器依据程序执行后果生成一张有向无环图,并在须要执行回滚操作时,依据该图顺次依照相同的顺序调用反向弥补操作。Saga 事务管理器只用于管制何时重试,何时弥补,并不负责弥补的内容,弥补的具体操作须要由开发者自行提供。
ShardingSphere 采纳反向 SQL 技术,将对数据库进行更新操作的 SQL 主动生成反向 SQL,并交由 saga-actuator 执行,应用方则无需再关注如何实现弥补办法,将柔性事务管理器的利用领域胜利的定位回了事务的根源——数据库层面。
SEATA 柔性事务
- Seata 柔性事务
- Seata AT 事务模型
Seata 柔性事务
Seata 是阿里团体和蚂蚁金服联结打造的分布式事务框架,截止到 0.5.x 版本蕴含了 AT 事务和 TCC 事务。其中 AT 事务的指标是在微服务架构下,提供增量的事务 ACID 语意,让用户像应用本地事务一样,应用分布式事务,核心理念同 ShardingSphere 一脉相承。
Seata AT 事务模型
Seata AT 事务模型蕴含 TM(事务管理器),RM(资源管理器),TC(事务协调器)。其中 TC 是一个独立的服务须要独自部署,TM 和 RM 以 jar 包的形式同业务利用部署在一起,它们同 TC 建设长连贯,在整个事务生命周期内,放弃 RPC 通信。其中全局事务的发起方作为 TM,全局事务的参与者作为 RM ; TM 负责全局事务的 begin 和 commit/rollback,RM 负责分支事务的执行后果上报,并且通过 TC 的协调进行 commit/rollback。