《分布式事务系列教程-第三章-2PC(两阶段提交)》

追求适度,才能走向成功;人在顶峰,迈步就是下坡;身在低谷,抬足既是登高;弦,绷得太紧会断;人,思虑过度会疯;水至清无鱼,人至真无友,山至高无树;适度,不是中庸,而是一种明智的生活态度。

导读:本篇文章讲解 《分布式事务系列教程-第三章-2PC(两阶段提交)》,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

《分布式事务系列教程-第三章-2PC(两阶段提交)》

一、DTP事务处理模型

X/Open DTP(X/Open Distributed Transaction Processing Reference Model) 是X/Open 这个组织定义的一套分布式事务的标准,也就是了定义了规范和API接口,由厂商进行具体的实现

我们知道分布式事务其实是将多个独立的事务整合在一起,将多个事务看成一个整体,里面的若干个事务看出是某一个操作(如update、delete),保证这多个操作之间达到ACID。

DTP参考模型中提出了三个角色:

  • AP(Application Program):处理分布式事务的应用程序。

  • RM(Resource Manager):资源管理器,由于分布式事务通常都是多台数据库系统(或者多个数据库连接),每一个单独的数据库系统都是一个独立的RM,每一个RM都有独立的事务,我们将这个事务称之为分支事务,我们要保证多个分支事务之间的ACID

  • TM(Transaction Manager):事务管理器,多个分支事务的协调者,用于收集分支事务的执行情况,协调各个分支事务,保证多个分支事务的ACID;

在这里插入图片描述

二、2PC(两阶段提交)

分布式事务的解决方案有很多种。其中包含2PC(两阶段提交)、3PC(三阶段提交)、TCC(事务补偿)、本地消息表、MQ事务消息等。这一章我们主要讲解2PC(两阶段提交)

两阶段提交(Two-phase Commit,2PC),将事务的提交划分成了两个阶段,第一阶段为准备阶段(Prepare phase),第二阶段为提交阶段(Commit phase)。

2.1 2PC流程

准备阶段: TM(事务管理器,协调者)给每个RM(资源管理器,分支事务)发送prepare消息,RM接收到请求后,实现自身事务提交前的准备工作,并将执行的数据记录到本地日志表Undo/Redo(用于失败回滚,以及后面的真正提交),Undo日志记录数据修改前的数据,一般用于数据回滚,Redo日志记录修改后的日志,用于后续提交事务,此时事务并没有真正提交,只是记录到日志中在此阶段每个RM资源均被上锁。其他进程/线程不可操作

提交阶段: 根据RM的反馈结果来处理,如果所有的RM都返回成功,那么TM则给每个RM发送commit命令,然后每个RM执行commit,同时释放锁,之后RM返回执行成功结果给TM

在这里插入图片描述

TM接收到多个RM的回执消息时,如果发现其中有一个RM在准备阶段出现错误,那么会给剩下的所有RM发送回滚操作。

在这里插入图片描述

注意:2PC协议只是一个规范,他规定处理分布式事务可以有两个阶段来处理,第一个是准备阶段,第二个是提交/回滚阶段,具体的实现方案需要落实到对应的解决方案上面(框架),而不同的框架在第一阶段和第二阶段做的事情也可能不同,因此2PC只是让我们作为参考的一种分布式事务的处理规则。如2PC解决方案中的XA方案和seata方案虽然是基于2PC两阶段提交协议,但两者在实现细节上又稍有不同。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/131764.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!