分布式事务解决方案之2PC(两阶段提交)

2PC即两阶段提交协议,是将整个事务分成两个阶段:

1.准备阶段:prepare phase

2.提交阶段:commit phase

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

准备阶段:老板要求张三付款,张三付款,老板要求李四付款,李四付款。

提交阶段:老板出票,两人纷纷落座就餐。

例子中形成了一个事务,若张三或李四中一个人拒绝付款,或钱不够,店老板都不会给出票,并且会把已收款退回。

整个事务过程由事务管理器和事务参与者组成,店老板就是事务管理器,张三、李四就是事务参与者,事务管理器负责决策整个分布式事务的提交和回滚,事务参与者负责自己本地事务的提交和回滚。

在计算机,部分关系型数据库如Oracle,MySQL支持两阶段协议,如下图:

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

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

猜你喜欢

转载自blog.csdn.net/qq2942713658/article/details/114295806