其他分享
首页 > 其他分享> > 分布式系统概念 | 分布式事务:2PC、3PC、本地消息表

分布式系统概念 | 分布式事务:2PC、3PC、本地消息表

作者:互联网

文章目录


分布式事务

分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于分布式系统的不同节点之上。

简言之,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。 本质上来说,分布式事务就是为了保证不同数据库的数据一致性。


2PC(二阶段提交协议)

在分布式系统中,每一个机器节点虽然都能够明确地知道自己在进行事务操作过程中的结果是成功或失败,但是却无法直接获取到其他分布式节点的操作结果(即无法同步结果,一致性无法保证)。

为了保证事务处理的 ACID 特性,就需要引入一个称为协调者的组件来统一调度所有分布式节点的执行逻辑,这些被调度的分布式节点则被称为参与者。协调者负责调度参与者的行为,基于这个思想,衍生出了二阶段提交三阶段提交两种协议。

2PC(Two-Phase Commit): 即二阶段提交,是为了使基于分布式系统架构下的所有节点在进行事务处理过程中能够保持原子性和一致性而设计的一种算法。


执行流程

第一阶段的主要内容就是进行投票,来表明是否有继续执行事务的必要。

阶段一:提交事务请求(投票阶段)

在第二阶段中,会根据第一阶段参与者的反馈来决定是否能够提交事务,要么全都成功,要么全都失败。

阶段二:执行事务提交(执行阶段)

事务提交

在这里插入图片描述

优缺点


3PC(三阶段提交协议)

3PC(Three-Phase Commit): 即三阶段提交,为了解决二阶段的缺陷,其将二阶段提交协议的提交事务请求过程一分为二,形成了由 CanCommitPreCommitDoCommint 三个阶段组成的事务处理协议:
在这里插入图片描述

执行流程

阶段一:CanCommit

  1. 事务询问
  2. 各参与者向协调者反馈事务询问的响应

阶段二:PreCommit

阶段三:DoCommit

需要注意的是,在阶段三中可能会出现以下两种问题:

无论出现上述那种问题,最终都会导致参与者无法及时的接收到来自协调者的 DoCommit 或是 Abort 请求,针对这种异常情况,参与者都会在等待超时后继续进行事务提交

优缺点


本地消息表(异步确保)

本地消息表业务数据表处于同一个数据库中,这样就能利用本地事务来保证在对这两个表的操作满足事务特性,并且使用了消息队列来保证最终一致性。

  1. 在分布式事务操作的一方完成写业务数据的操作之后向本地消息表发送一个消息,本地事务能保证这个消息一定会被写入本地消息表中。
  2. 之后将本地消息表中的消息转发到消息队列中,如果转发成功则将消息从本地消息表中删除,否则继续重新转发。
  3. 在分布式事务操作的另一方从消息队列中读取一个消息,并执行消息中的操作。

在这里插入图片描述

这里的消息队列不是单纯的数据结构,而应该看作由标志操作两部分共同组成的中间件,用以标识某一操作是否成功,只有当左侧的分布式节点确实完成了某项操作,右侧的其他节点才有同步这项操作的必要。

标签:事务,协调者,2PC,阶段,提交,分布式系统,3PC,参与者,分布式
来源: https://blog.csdn.net/Jormungand_V/article/details/120903656