返回顶部
首页 > 资讯 > 数据库 >怎么理解MySQL的2PC和3PC
  • 294
分享到

怎么理解MySQL的2PC和3PC

2024-04-02 19:04:59 294人浏览 泡泡鱼
摘要

这篇文章主要介绍“怎么理解Mysql的2PC和3PC”,在日常操作中,相信很多人在怎么理解mysql的2PC和3PC问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解My

这篇文章主要介绍“怎么理解Mysql的2PC和3PC”,在日常操作中,相信很多人在怎么理解mysql的2PC和3PC问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解Mysql的2PC和3PC”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

分布式系统分布式一致性问题

  分布式系统,即运行在多台不同的网络计算机上的软硬件系统,并且仅通过消息传递来进行通信和协调。

  分布式一致性问题,即相互独立的节点之间如何就一项决议达成一致的问题。

2PC(Two-Phase Commit 二阶段提交)

二阶段提交,是指将事务提交分成两个部分:准备阶段和提交阶段。事务的发起者称之为协调者,事务的执行者称为参与者。

阶段一:准备阶段

             由协调者发起并传递带有事务信息的请求给各个参与者,询问是否可以提交事务,并等待返回结果。

             个 参与者执行事务操作,将Undo和Redo放入事务日志中(但是不提交)

              如果参与者执行成功就返回YES(可以提交事务),失败NO(不能提交事务)

阶段二:提交阶段

              此阶段分两种情况:所有参与者均返回YES,有任何一个参与者返回NO

               所有参与者均反馈YES时,即提交事务。

               任何一个参与者反馈NO时,即中断事务。

提交事务:(所有参与者均反馈YES)

  1、协调者向所有参与者发出正式提交事务的请求(即Commit请求)。

  2、参与者执行Commit请求,并释放整个事务期间占用的资源。

  3、各参与者向协调者反馈Ack完成的消息。

  4、协调者收到所有参与者反馈的Ack消息后,即完成事务提交。

中断事务:(任何一个参与者反馈NO)

  1、协调者向所有参与者发出回滚请求(即Rollback请求)。

  2、参与者使用阶段1中的Undo信息执行回滚操作,并释放整个事务期间占用的资源。

  3、各参与者向协调者反馈Ack完成的消息。

  4、协调者收到所有参与者反馈的Ack消息后,即完成事务中断。

2PC的缺陷

  1、同步阻塞:最大的问题即同步阻塞,即:所有参与事务的逻辑均处于阻塞状态。

  2、单点:协调者存在单点问题,如果协调者出现故障,参与者将一直处于定状态。

  3、脑裂:在阶段2中,如果只有部分参与者接收并执行了Commit请求,会导致节点数据不一致。

  由于2PC存在如上同步阻塞、单点、脑裂问题,因此又出现了2PC的改进方案,即3PC。

3PC(Three-Phase Commit 三阶段提交协议)

  3PC,三阶段提交协议,是2PC的改进版本,即将事务的提交过程分为CanCommit、PreCommit、do Commit三个阶段来进行处理。

阶段一:CanCommit

             1、协调者向所有参与者发出包含事务内容的CanCommit请求,询问是否可以提交事务,并等待所有参与者答复。

             2、参与者收到CanCommit请求后,如果认为可以执行事务操作,则反馈YES并进入预备状态,否则反馈NO。

阶段二:PreCommit

               此阶段分为两种情况:

                1.所有参与者均受到请求并返回YES。

                2.有任何一个参与者返回NO,或者有任何一个参与者超时,协调者无法收到反馈,则事务中断

事务预提交:(所有参与者均反馈YES时)

  1、协调者向所有参与者发出PreCommit请求,进入准备阶段。

  2、参与者收到PreCommit请求后,执行事务操作,将Undo和Redo信息记入事务日志中(但不提交事务)。

  3、各参与者向协调者反馈Ack响应或No响应,并等待最终指令。

中断事务:(任何一个参与者反馈NO,或者等待超时后协调者尚无法收到所有参与者的反馈时)

  1、协调者向所有参与者发出abort请求。

  2、无论收到协调者发出的abort请求,或者在等待协调者请求过程中出现超时,参与者均会中断事务。

阶段3:do Commit

此阶段也存在两种情况:

  1、所有参与者均反馈Ack响应,即执行真正的事务提交。

  2、任何一个参与者反馈NO,或者等待超时后协调者尚无法收到所有参与者的反馈,即中断事务。

  提交事务:(所有参与者均反馈Ack响应时)

  1、如果协调者处于工作状态,则向所有参与者发出do Commit请求。

  2、参与者收到do Commit请求后,会正式执行事务提交,并释放整个事务期间占用的资源。

  3、各参与者向协调者反馈Ack完成的消息。

  4、协调者收到所有参与者反馈的Ack消息后,即完成事务提交。

  中断事务:(任何一个参与者反馈NO,或者等待超时后协调者尚无法收到所有参与者的反馈时)

  1、如果协调者处于工作状态,向所有参与者发出abort请求。

  2、参与者使用阶段1中的Undo信息执行回滚操作,并释放整个事务期间占用的资源。

  3、各参与者向协调者反馈Ack完成的消息。

  4、协调者收到所有参与者反馈的Ack消息后,即完成事务中断。

  注意:进入阶段三后,无论协调者出现问题,或者协调者与参与者网络出现问题,都会导致参与者无法接收到协调者发出的         do Commit请求或abort请求。此时,参与者都会在等待超时之后,继续执行事务提交。

3PC的优点和缺陷

  优点:降低了阻塞范围,在等待超时后协调者或参与者会中断事务。避免了协调者单点问题,阶段3中协调者出现问题时,参与者会继续提交事务。

  缺陷:脑裂问题依然存在,即在参与者收到PreCommit请求后等待最终指令,如果此时协调者无法与参与者正常通信,会导致参与者继续提交事务,造成数据不一致。

到此,关于“怎么理解MySQL的2PC和3PC”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

您可能感兴趣的文档:

--结束END--

本文标题: 怎么理解MySQL的2PC和3PC

本文链接: https://lsjlt.com/news/63476.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么理解MySQL的2PC和3PC
    这篇文章主要介绍“怎么理解MySQL的2PC和3PC”,在日常操作中,相信很多人在怎么理解MySQL的2PC和3PC问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解My...
    99+
    2024-04-02
  • 如何理解MYSQL-GroupCommit 和 2pc提交
    这篇文章将为大家详细讲解有关如何理解MYSQL-GroupCommit 和 2pc提交,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 组提交(gr...
    99+
    2024-04-02
  • 分布式架构,刚性事务-2PC必须注意的问题及3PC详细解
    2PC必须注意的问题咱们上文介绍了分布式事务的常见方案、类型划分、2PC的起源和流程。但是不幸的是2PC还是存在几个问题:全流程的同步阻塞:不管是第一阶段还是第二阶段,所有参与节点都是事务阻塞型。当参与者占有公共资源时,其他第三方访问公共资...
    99+
    2023-06-05
  • 怎么理解MYSQL的auto_increment_offset和auto_increment_increment值
    本篇内容主要讲解“怎么理解MYSQL的auto_increment_offset和auto_increment_increment值”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让...
    99+
    2024-04-02
  • 怎么理解MySQL的innodb_flush_method
    这篇文章主要讲解了“怎么理解MySQL的innodb_flush_method”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解MySQL的innodb...
    99+
    2024-04-02
  • 怎么理解MySQL中的MVCC
    这篇文章将为大家详细讲解有关怎么理解MySQL中的MVCC,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。关系数据库管理系统使用MVCC(Multiversi...
    99+
    2024-04-02
  • 怎么理解MySQL中的table_id
    本篇内容介绍了“怎么理解MySQL中的table_id”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一 t...
    99+
    2024-04-02
  • 怎么理解MySQL的Insert buffer
    本篇内容介绍了“怎么理解MySQL的Insert buffer”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成...
    99+
    2024-04-02
  • MySQL中的锁怎么理解
    本篇内容主要讲解“MySQL中的锁怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL中的锁怎么理解”吧!01. 怎么认识"锁"...
    99+
    2024-04-02
  • 怎么理解MySQL垂直和水平切分
    这篇文章主要介绍“怎么理解MySQL垂直和水平切分”,在日常操作中,相信很多人在怎么理解MySQL垂直和水平切分问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解MySQ...
    99+
    2024-04-02
  • MySQL持久化和回滚该怎么理解
    这篇文章跟大家分析一下“MySQL持久化和回滚该怎么理解”。内容详细易懂,对“MySQL持久化和回滚该怎么理解”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一...
    99+
    2024-04-02
  • 怎么理解MySQL的EVENT事件
    这篇文章主要介绍“怎么理解MySQL的EVENT事件”,在日常操作中,相信很多人在怎么理解MySQL的EVENT事件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解My...
    99+
    2024-04-02
  • 怎么理解MySQL的GTID复制
    这篇文章主要介绍“怎么理解MySQL的GTID复制”,在日常操作中,相信很多人在怎么理解MySQL的GTID复制问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解MySQ...
    99+
    2024-04-02
  • 怎么理解MySQL的API接口
    这篇文章给大家介绍怎么理解MySQL的API接口,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 MySQL 的 API 接口为了方便应用程序的开发,MyS...
    99+
    2024-04-02
  • 怎么理解mysql innodb的行锁
    这篇文章主要讲解了“怎么理解mysql innodb的行锁”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解mysql innodb的行锁”吧! ...
    99+
    2024-04-02
  • 怎么理解mysql中的redo log
    今天就跟大家聊聊有关怎么理解mysql中的redo log,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。重做日志(redo log)前言:之前一直弄不清楚 mysql 里面 bin ...
    99+
    2023-06-06
  • 怎么理解MySQL存储过程和触发器
    这期内容当中小编将会给大家带来有关怎么理解MySQL存储过程和触发器,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。存储过程(stored procedure SP)是My...
    99+
    2024-04-02
  • 怎么理解MySQL安全
    本篇内容介绍了“怎么理解MySQL安全”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!MySQL安全当多个用...
    99+
    2024-04-02
  • 怎么理解MySQL change buffer
    本篇内容介绍了“怎么理解MySQL change buffer”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成...
    99+
    2024-04-02
  • 怎么理解MySQL事务
    这篇“怎么理解MySQL事务”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么理解MySQL事务”文章吧。事务指逻辑上的一组...
    99+
    2023-06-26
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作