经典的俩阶段提交算法的原理及缺陷

背景笔者在过去经典的两阶段提交算法过程中,发现会遇上部分节点在执行事务提交期间发生故障,导致如下的错误,这些错误都会导致用户数据丢失或者出错。错误如下:1、一个分布式事务的一部分事务分支被提交,另一部分事务分支被回滚2、应答给客户端事务提交成功,但是分布式事务所有分支全部被回滚3、应答给客户端事务被回滚,但是分布式事务部分或者全部分支被提交4、存储节点故障恢复时,某个存储节点的事务分支不能被正确地恢复。在上面这些错误源中,第#4类错误处理由存储节点自身负责,分
摘要由CSDN通过智能技术生成

背景

笔者在过去经典的两阶段提交算法过程中,发现会遇上部分节点在执行事务提交期间发生故障,导致如下的错误,这些错误都会导致用户数据丢失或者出错。错误如下:

1、一个分布式事务的一部分事务分支被提交,另一部分事务分支被回滚

2、应答给客户端事务提交成功,但是分布式事务所有分支全部被回滚

3、应答给客户端事务被回滚,但是分布式事务部分或者全部分支被提交

4、存储节点故障恢复时,某个存储节点的事务分支不能被正确地恢复。

在上面这些错误源中,第#4类错误处理由存储节点自身负责,分布式事务处理机制负责处理前3类错误,笔者会在下篇文章做主要讨论。

对于第#4类错误,笔者曾经在FOSDEM 2021做过一次技术分享,https://fosdem.org/2021/schedule/event/mysql_xa/,国内视频连接在:昆仑分布式数据库 MySQL XA事务处理的容灾技术(https://b23.tv/h7zzmR)以后也会陆续撰文详述。

经典的两阶段提交算法原理

两阶段提交算法把事务的提交分为preapre和commit两个阶段。

第一阶段事务管理器GTM发送prepare命令给所有的resourcemanager(RM),每个RM就prepare分布式事务的本地分支,也就是把它们的WAL日志刷盘以便即使RM宕机,恢复之后仍然可以提交(或者回滚)这些prepared状态的事务。

prepare一个事务

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值