分布式一致性协议——2PC和3PC

一、2PC

定义

2PC即二阶段提交,是计算机网络尤其是分布式领域内,为了保持分布式系统架构下所有节点在进行事务处理过程中能够保持原子性和一致性而设计的一种算法。目前绝大多数关系型数据库都是采用二阶段提交协议来完成分布式事务处理。

协议说明

阶段一:提交事务请求
1.事务询问
2.执行事务(阶段一完成)
3.向协调者反馈

阶段二:执行事务提交或中断事务
正常流程
1.发送提交请求
2.事务提交
3.反馈事务提交结果
4.完成事务
在这里插入图片描述
异常流程
在这里插入图片描述

优缺点

优点:原理简单,实现方便
缺点:同步阻塞、单点问题、脑裂、太过保守

同步阻塞
二阶段提交执行过程中,所有参与该事务操作的逻辑都处于阻塞状态。各参与者在等待其他参与者响应过程中,将无法进行其他任何操作

单点问题
协调者为单节点,协调者出现问题,整个流程无法完成,阶段二出现问题,参与者会一直处于锁定事务资源的状态中

数据不一致
网络原因或者协调者发送commit请求是崩溃,导致只有部分参与者收到commit请求,导致没收到commit请求的参与者无法进行事务提交,分布式系统出现数据不一致情况。

太过保守
没有完善的容错机制,任意一个节点失败都会调至整个事务失败

二、3PC

将二阶段提交协议阶段一“提交事务请求”过程,一分为二,形成了Cancommit、PreCommit和do Commit三个阶段组成的事务处理请求。

阶段一:Cancommit

1.事务询问
询问是否可以执行事务
2.各参与者向协调者反馈事务询问响应
如果可以顺利执行事务,反馈yes,否则no

阶段二:PreCommit

和二阶段提交大体一样,中断事务加入了异常处理,如果没有收到协调者中断请求或者在等待协调者过程超时,参与者都会中断事务

阶段三:do Commit

和二阶段提交大体一样,参与者加入了超时机制

优缺点

优点:CanCommit阶段和超时机制降低了参与者的阻塞范围,并且能够在出现单点故障后继续达成一致
缺点:出现网络分区问题,协调者所在节点和参与者无法进行正常的网络通信,这种情况下参与者会进行事务提交,会导致数据不一致

流程图

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章