哪里能找到关于事务两阶段提交的过程的描述啊

有没有图或文字,关于事务两阶段提交的描述啊

入门三部曲,计算、调度、存储篇。

1 个赞


https://learn.pingcap.cn/learner/course
官方课程

官方文档里有,并且还配了示例
https://docs.pingcap.com/zh/tidb/stable/optimistic-transaction
https://docs.pingcap.com/zh/tidb/stable/pessimistic-transaction

块看看101课程吧,你的问题都是这里面的
https://learn.pingcap.cn/learner/course/960001

谢谢,我按照你这个去看

事务的 两阶段提交Two-Phase Commit,简称 2PC)是一种分布式事务协议,旨在保证在分布式系统中所有参与者(如数据库或服务)能够一致地提交或回滚事务。它是保证分布式系统一致性的一种重要机制。

1. 两阶段提交的基本流程

两阶段提交分为两个阶段:准备阶段提交阶段

第一阶段:准备阶段(Prepare Phase)

  1. 协调者发起请求:事务协调者(Transaction Coordinator)向所有参与者(也叫参与节点或参与者)发出准备提交(prepare)请求,询问是否可以提交事务。
  2. 参与者响应
  • 如果参与者能够完成事务,它们会准备好提交事务并返回**YES**,表示可以提交。
  • 如果参与者无法完成事务(例如因为某个操作失败、数据库出现问题等),它们会返回**NO**,表示无法提交。

第二阶段:提交阶段(Commit Phase)

  1. 协调者检查所有参与者的响应
  • 如果所有参与者都返回了**YES**,协调者会向所有参与者发送提交请求(commit),表示可以正式提交事务。
  • 如果任何一个参与者返回**NO**,协调者会向所有参与者发送回滚请求(rollback),要求所有参与者回滚事务,保证系统的一致性。
  1. 参与者响应
  • 如果协调者发出提交请求,参与者执行提交操作,并确认事务提交成功。
  • 如果协调者发出回滚请求,参与者执行回滚操作,确保事务不会影响系统的一致性。

2. 两阶段提交的工作流程示意图

以下是两阶段提交协议的工作流程图:

Copy Code

  +---------------------+
  |   客户端/应用程序   |   ----> 提交事务请求
  +---------------------+
            |
            v
  +---------------------+     提交请求
  |     事务协调者      | -------------------------> 
  +---------------------+      --> 询问参与者是否可以提交事务
            |
            v
  +---------------------+
  |    参与者节点1      | <--------------------- YES/NO
  +---------------------+
            |
            v
  +---------------------+
  |    参与者节点2      | <--------------------- YES/NO
  +---------------------+
            |
            v
  +---------------------+
  |    参与者节点3      | <--------------------- YES/NO
  +---------------------+
            |
            v
  +---------------------+
  |     事务协调者      | <-------------------- (YES/NO)
  +---------------------+
            |
            v
  +---------------------+
  |     参与者节点1     | ----> 提交/回滚
  +---------------------+
            |
            v
  +---------------------+
  |     参与者节点2     | ----> 提交/回滚
  +---------------------+
            |
            v
  +---------------------+
  |     参与者节点3     | ----> 提交/回滚
  +---------------------+
            |
            v
  +---------------------+
  |   事务协调者      |   ----> 完成事务提交或回滚
  +---------------------+

3. 两阶段提交的优缺点

优点:

  • 一致性保证:能够保证在分布式系统中的事务一致性(要么所有节点提交,要么所有节点回滚)。
  • 简单易理解:协议相对简单,易于实现。

缺点:

  • 阻塞问题:如果协调者崩溃,参与者处于等待状态,直到协调者恢复,无法继续操作。即存在阻塞情况,可能导致系统无法继续处理请求。
  • 单点故障:协调者是单点故障,一旦协调者失败,所有事务将被挂起,直到它恢复。
  • 性能问题:需要多个网络往返通信,可能导致较大的延迟,尤其是在网络不稳定时。
  • 资源锁定:在第一阶段准备期间,参与者必须锁定相关资源,可能导致长时间的资源锁定,影响系统性能。

4. 两阶段提交的改进:三阶段提交(3PC)

为了克服两阶段提交的缺点(尤其是阻塞问题和单点故障问题),有一种改进方案叫做三阶段提交(3PC)。三阶段提交在两阶段的基础上增加了一个阶段,以减少等待时间和避免协调者崩溃后的阻塞问题。

三阶段提交的三个阶段:

  1. 准备阶段:和两阶段提交的准备阶段相同,协调者向所有参与者询问是否准备好提交事务。
  2. 预提交阶段:在协调者收到所有参与者的准备好响应后,协调者通知所有参与者预提交事务,参与者执行预提交操作,但不会最终提交。
  3. 提交阶段:如果协调者在预提交阶段没有检测到错误,协调者发送提交指令,参与者最终提交事务。

三阶段提交减少了协调者崩溃时参与者的等待时间,但仍然需要更复杂的机制和更多的消息交换。

5. 总结

两阶段提交(2PC)是一种经典的分布式事务协议,旨在确保在分布式系统中事务的原子性和一致性。它保证了事务要么全部提交,要么全部回滚,从而维护了数据的一致性。但是,它也存在阻塞问题和单点故障的风险,因此在实际应用中,可能需要结合其他技术(如三阶段提交、TCC等)进行改进。

3 个赞

我能这样理解吗?你说的这个过程,是分布式事务提交的过程,不仅仅是tidb的过程

对,分布式数据库基本都是这个过程。

1 个赞

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。