分布式事务之两阶段提交

本文详细介绍了分布式事务的两阶段提交(2PC)协议,包括一致性概念、2PC的原理、两个阶段的具体流程、存在的问题以及在节点故障时的处理方式。还探讨了MySQL对XA事务的支持和JTA(Java Transaction API)的实现,强调了在分布式事务中保证一致性的挑战和解决方案。
摘要由CSDN通过智能技术生成

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。

[图片上传失败...(image-3e94ae-1649067172681)]

2PC第二阶段:正常提交

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

  1. 协调者节点通知所有的参与者Commit事务请求;
  2. 参与者收
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值