分布式事务(二)之两阶段提交

本文详细介绍了两阶段提交(2PC)协议,包括一致性概念、2PC的原理、各阶段流程、存在的问题及解决方案。还讨论了MySQL对XA事务的支持和JTA在实现分布式事务中的角色与组件交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面的文章中,我们介绍了分布式系统中的CAP理论和BASE理论,本文会就分布式事务的实现方案之一:两阶段提交(2PC)进行介绍。2PC是一个非常经典的强一致、中心化的原子提交协议。中心化是指协议中有两类节点:一个是中心化协调者节点(coordinator)和N个参与者节点(partcipant)。

2PC

一致性概念

一致性,是指对每个节点一个数据的更新,整个集群都知道更新,并且是一致的,假设一个具有N个节点的分布式系统,当其满足以下条件时,我们说这个系统满足一致性:

  • 全认同: 所有N个节点都认同一个结果;
  • 值合法: 该结果必须由N个节点中的过半节点提出;
  • 可结束: 决议过程在一定时间内结束,不会无休止地进行下去;

一致性的挑战

消息传递异步无序: 现实网络不是一个可靠的信道,存在消息延时、丢失,节点间消息传递做不到同步有序:

  • 节点宕机: 节点持续宕机,不会恢复;
  • 节点宕机恢复: 节点宕机一段时间后恢复,在分布式系统中最常见;
  • 网络分化: 网络链路出现问题,将N个节点隔离成多个部分;
  • 拜占庭将军问题: 节点或宕机或逻辑失败,甚至不按套路出牌抛出干扰决议的信息。

2PC原理

2PC(tow phase commit)两阶段提交。所谓的两个阶段是指:

  1. 第一阶段:准备阶段(投票阶段)
  2. 第二阶段:提交阶段(执行阶段)。

我们将提议的节点称为协调者(coordinator),其他参与决议节点称为参与者(participants, 或cohorts)。

2PC第一阶段

2PC的第一阶段是投票环节,投票由协调者节点发起,可以进一步细分为以下步骤:

  1. 事务询问:协调者向所有的参与者发送事务预处理请求,称之为Prepare,并开始等待各参与者的响应。
  2. 执行本地事务:各个参与者节点执行本地事务操作,但在执行完成后并不会真正提交数据库本地事务,而是先向协调者报告说:“我这边可以处理了/我这边不能处理”。
  3. 各参与者向协调者反馈事务询问的响应:如果参与者成功执行了事务操作,那么就反馈给协调者Yes响应,表示事务可以执行,如果没有参与者成功执行事务,那么就反馈给协调者No响应,表示事务不可以执行。

第一阶段执行完后,会有两种可能。1、所有都返回Yes. 2、有一个或者多个返回No。

2PC第一阶段

2PC第二阶段:正常提交

如果第一阶段所有的参与者都返回Yes,那么我们就可以继续执行2PC第二阶段的正常提交步骤:

  1. 协调者节点通知所有的参与者Commit事务请求;
  2. 参与者收到Commit请求之后,就会正式执行本地事务Commit操作,并在完成提交之后释放整个事务执行期间占用的事务资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-御狐神-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值