导览
本大节次要介绍分布式事务的外围概念,次要包含:
- 本地事务
- 两阶段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。