什么是2PC
2PC即两阶段提交,是将整个事务流程分为两个阶段,准备阶段(Prepare phase)、提交阶段(commit phase)。2是指两个阶段,P是指准备阶段,C是指提交阶段。
举例:张三和李四好久不见,一起吃饭。饭店老板要求先买单,才能出票。只有张三和李四都付款,老板才能出票安排就餐。但由于张三和李四都是铁公鸡,形成了尴尬的一面:
- 准备阶段:老板要求张三付款,张三付款。老板要求李四付款,李四付款。
- 提交阶段:老板出票,两人拿票纷纷落座就餐。
整个事务过程由事务管理器和参与者组成,店老板就是事务管理器,张三、李四就是事务参与者,事务管理器负责决策整个分布式事务的提交和回滚,事务参与者负责自己本地事务的提交和回滚。
在计算机中部分关系型数据库如Oracle、Mysql支持两阶段提交协议,如下图:
- 准备阶段:事务管理器给每个参与者发送准备消息,每个数据库参与者在本地执行事务,并写本地的Undo/Redo日志,此时事务没有提交。(Undo日志时记录修改前的数据,用于数据库回滚,Redo日志时记录修改后的数据,用于提交事务后写入数据文件)
- 提交阶段:如果事务管理器收到了参与者的执行失败或者超时消息时,直接给每个参与者发送回滚消息&#x