当前位置: 首页 > 图灵资讯 > java面试题> 分布式事务面试题-请描述两阶段提交(2PC)协议的基本过程,以及它在分布式事务中的应用。

分布式事务面试题-请描述两阶段提交(2PC)协议的基本过程,以及它在分布式事务中的应用。

来源:图灵教育
时间:2024-01-11 11:15:18
 

请描述两阶段提交(2PC)协议的基本过程,以及它在分布式事务中的应用。

 

2PC即两阶段提交协议,是将整个事务流程分为两个阶段,准备阶段(Prepare phase)、提交阶段(commit phase),2是指两个阶段,P是指准备阶段,C是指提交阶段。

 

举例:张三和李四好久不见,老友约起聚餐,饭店老板要求先买单,才能出票。这时张三和李四分别抱怨近况不如意,囊中羞涩,都不愿意请客,这时只能AA。只有张三和李四都付款,老板才能出票安排就餐。但由于张三和李四都是铁公鸡,形成了尴尬的一幕:

 

  1. 准备阶段:老板要求张三付款,张三付款。老板要求李四付款,李四付款。
  1. 提交阶段:老板出票,两人拿票纷纷落座就餐。

 

例子中形成了一个事务,若张三或李四其中一人拒绝付款,或钱不够,店老板都不会给出票,并且会把已收款退回。整个事务过程由事务管理器和参与者组成,店老板就是事务管理器,张三、李四就是事务参与者,事务管理器负责决策整个分布式事务的提交和回滚,事务参与者负责自己本地事务的提交和回滚。

 

准备阶段(Prepare phase):事务管理器给每个参与者发送Prepare消息,每个数据库参与者在本地执行事务,并写本地的Undo/Redo日志,此时事务没有提交。(Undo日志是记录修改前的数据,用于数据库回滚,Redo日志是记录修改后的数据,用于提交事务后写入数据文件)

 

提交阶段(commit phase):如果事务管理器收到了参与者的执行失败或者超时消息时,直接给每个参与者发送回滚(Rollback)消息;否则,发送提交(Commit)消息;参与者根据事务管理器的指令执行提交或者回滚操作,并释放事务处理过程中使用的锁资源。注意:必须在最后阶段释放锁资源。

 

下图展示了2PC的两个阶段,分成功和失败两个情况说明:

 

成功情况:

 

 

失败情况:

 

 

缺点:

 

两阶段提交是一个阻塞协议; 单个节点的失败阻塞了进度,直到该节点恢复。而且,如果事务协调器失败,那么数据库将处于不一致的状态,并且只有在协调器恢复后才能恢复。这将导致另一个缺点,因为协议的延迟取决于最慢的节点。因为它等待所有节点发送确认消息,所以单个慢节点将减慢整个事务的速度。