分布式事务

发布于 2022-04-07  104 次阅读


基础概念

基本概念:事务ACID
事务:要么全部执行成功,要么全部失败
分布式事务的概念:
分布式事务指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上,且属于不同的应用,分布式事务需要保证这些操作要么全部成功,要么全部失败。本质上说,分布式事务就是为了保证不同数据库的数据一致性。

分布式解决方案

2PC即两阶段提交协议,是将整个事务流程分为两个阶段,P是指准备阶段,C是指提交阶段
准备阶段:老板要求男方付款,南方付款。老板要求女方付款,女方付款。
提交阶段:老板出餐,两人纷纷落座。
回滚:如果女方拒绝付款,老板就不会出餐,并且吧已收取的钱原路返回。
整个事务过程由事务管理器与参与者组成的,店老板就是事务的管理器,男女双方就是事务的参与者,事务管理器选择整个分布式事务在计算机中关系数据库知识的两件段提交协议:
准备阶段:事务管理器给美国参数者发送Prepare消息,每个数据库参与者在本地执行事务,并写本地的Undo/Redo日志,此时事务没有提交。
Undo log是记录修改前的数据,用于数据库回滚,Redo log记录修改后的数据,用于提交事务后写入数据的文件。
提交阶段:如果事务管理前期收到了参与者的执行失败或者超时消息时,直接给美国参与者发送回滚消息;否则发送提交消息,参与者根据事务管理器指令进行提交或者回滚操作,并释放事务处理过程中的资源。

Seata AT模式

一阶段

在一阶段中,Seata会拦截“业务SQL”,首先解析SQL语义,找到要更新的业务数据,在数据更新钱,保存下“undo log”,然后执行“业务SQL”更新数据,更新之后保存数据“redo log”,最后生成锁,这些操作都是在本地数据库事务内完成,这样保证了一阶段的原子性。

二阶段

相对一阶段,二阶段比较简单,负责整体的回滚和提交,如果之前的一阶段中有本地事务没有通过,那么就执行全局回滚,否则执行全局提交,回滚用到的就是一阶段记录的“undo log”,通过回滚记录生成反向更新SQL并执行,已完成分支事务的回滚,当然执行未完成后会释放所有资源和删除所有日志。

知道的越多 不知道的越多
最后更新于 2022-04-07