分布式事务,两阶段提交和三阶提交

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 15:46   4297   0

一、什么是分布式事务

在分布式系统中,为了保证数据的高可用,通常我们会将数据保留多个副本,同时这些副本会存储到不同的物理机器上,这就是分布式

为了保证数据的一致性,需要用到分布式事务

1.1 什么是事务?

事务是指对数据的一系列操作要么全部执行要么全部不执行

1.2事务的实现步骤

1.数据库将一系列要执行的操作全部记录成日志

2.逐条执行这一系列操作

3.如果这一系列操作全部执行成功,那么提交事务,事务也就执行成功,若这一系列操作有某一个失败,则会回滚,将所有的操作全部清除,从而达到要么全部执行要么全部不执行的效果。

分布式事务可以理解为设计多个数据库的事务可以同时根据几个不同的数据库

数据库在物理机器上是相互独立的,一个数据库在执行本地事务时,不知道其他数据库事务的执行情况,为了保持所有的执行一致,引入协调者,由协调者来统一管理多个参与者数据库的执行情况。

1.3 分布式事务 实现:

1.在开启事务之后,本地事务会将所有的操作记录成日志,并且执行事务操作,若执行成功,则向协调者发执行成功的通知,如果所有参与者数据库全部发完了执行成功的通知,那么协调者知道,所有的参与者准备好了,返回提交的消息,数据库会将事务提交,从而分布式事务就能执行成功。
在这里插入图片描述

若某一个实例在执行一系列操作失败,则会发送失败的消息,则要求所有的数据库实例操作全部回滚,不论是操作成功还是操作失败,协调者在收到操作失败的通知,就会返回回滚的通知,并且回滚通知是发送给每一个参与者,参与者收到回滚通知后,会根据日志,将刚才所执行的事务操作全部回滚,回到事务启动之前的状态,这就是分布式事务执行失败的状况。
在这里插入图片描述

根据协调者的思想,在具体的实现分布式事务上,实现的二阶段提交协议和三阶段提交协议。

二、二阶段提交

一个协调者和多个参与者 参与者1,2,3 二阶段提交时协调者方式的一种实现

1.准备阶段

协调者开启事务,向参与者发出事务执行的请求,参与者收到事务操作后,会将事务操作先记录成日志,然后逐条执行事务,执行完事务之后并不提交,如果一系列操作全部执行成功就会向协调者返回一个同意到的消息,如果有操作执行失败,那么就返回一个终止的消息,在协调者收到所有参与者返回的消息之后,就进入了第二个阶段,提交阶段。

2.提交阶段

协调者会根据所有参与者返回的情况决定下一步操作

1.理想情况,若所有的参与者都返回同意的消息,那么,协调者就知道所有的参与者已经准备好,协调者就会向所有的参与者发回一个提交的消息,参与者在收到提交消息之后,会将本地事务进行提交,并且释放占用的资源,在处理完成之后,会返回一个完成的消息,分布式事务也就完成。

2.异常情况,加入某一个参与者进行一系列操作的过程中,出现了异常,那么返回的不是同意消息,而是终止消息,这个时候为了保证所有参与者数据的一致性,需要协调者将所有参与者已经执行的擉nm.%9i9+9g,9.g9.bl,ym9./*&y.#yc' n.:/+ n. cc!y9.b+`y"yb,:/c# !Ic# !yg*9oz-yb`&n99b!n k.:f-y ":f-yo n. +i `9."zf-y9.z/+:f-y9ybi9y."c9l!.8 [OH^ Z[[LXN [OH^ Z[[Lod# !Lyi+9g,9. n.9cc!yf#y.+yh/l9ioycc!y.g. /*&ycc!y+yhm9.*b!n c# !Lc# !L&n9 /a+# !Lyc+c9o n.9Im9.*b!n g#y. :!`9."zf-y:&oy.yc.:f-y9e /anmy"yk9kb!n .#z/+."ii g*9am9k.+I$y.&.yk.&bIkl9k/c:(iy`oh.&byl9k 9. :! [OH^ Z[[Lc IXNHYH[X[KKY[]M N [X[KKY[]M N

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP