有没有图或文字,关于事务两阶段提交的描述啊
入门三部曲,计算、调度、存储篇。
1 个赞
官方文档里有,并且还配了示例
https://docs.pingcap.com/zh/tidb/stable/optimistic-transaction
https://docs.pingcap.com/zh/tidb/stable/pessimistic-transaction
谢谢,我按照你这个去看
事务的 两阶段提交(Two-Phase Commit,简称 2PC)是一种分布式事务协议,旨在保证在分布式系统中所有参与者(如数据库或服务)能够一致地提交或回滚事务。它是保证分布式系统一致性的一种重要机制。
1. 两阶段提交的基本流程
两阶段提交分为两个阶段:准备阶段和提交阶段。
第一阶段:准备阶段(Prepare Phase)
- 协调者发起请求:事务协调者(Transaction Coordinator)向所有参与者(也叫参与节点或参与者)发出准备提交(prepare)请求,询问是否可以提交事务。
- 参与者响应:
- 如果参与者能够完成事务,它们会准备好提交事务并返回**
YES
**,表示可以提交。 - 如果参与者无法完成事务(例如因为某个操作失败、数据库出现问题等),它们会返回**
NO
**,表示无法提交。
第二阶段:提交阶段(Commit Phase)
- 协调者检查所有参与者的响应:
- 如果所有参与者都返回了**
YES
**,协调者会向所有参与者发送提交请求(commit),表示可以正式提交事务。 - 如果任何一个参与者返回**
NO
**,协调者会向所有参与者发送回滚请求(rollback),要求所有参与者回滚事务,保证系统的一致性。
- 参与者响应:
- 如果协调者发出提交请求,参与者执行提交操作,并确认事务提交成功。
- 如果协调者发出回滚请求,参与者执行回滚操作,确保事务不会影响系统的一致性。
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)。三阶段提交在两阶段的基础上增加了一个阶段,以减少等待时间和避免协调者崩溃后的阻塞问题。
三阶段提交的三个阶段:
- 准备阶段:和两阶段提交的准备阶段相同,协调者向所有参与者询问是否准备好提交事务。
- 预提交阶段:在协调者收到所有参与者的准备好响应后,协调者通知所有参与者预提交事务,参与者执行预提交操作,但不会最终提交。
- 提交阶段:如果协调者在预提交阶段没有检测到错误,协调者发送提交指令,参与者最终提交事务。
三阶段提交减少了协调者崩溃时参与者的等待时间,但仍然需要更复杂的机制和更多的消息交换。
5. 总结
两阶段提交(2PC)是一种经典的分布式事务协议,旨在确保在分布式系统中事务的原子性和一致性。它保证了事务要么全部提交,要么全部回滚,从而维护了数据的一致性。但是,它也存在阻塞问题和单点故障的风险,因此在实际应用中,可能需要结合其他技术(如三阶段提交、TCC等)进行改进。
3 个赞
我能这样理解吗?你说的这个过程,是分布式事务提交的过程,不仅仅是tidb的过程
对,分布式数据库基本都是这个过程。
1 个赞
此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。