zookeeper学习特别篇二:zookeeper一致性协议---2pc二阶段提交、三阶段提交

四:一致性协议

数据在跨越多个分布式节点时,为了保障食物的ACID事务,需要一个协调者来协调分布式各个节点的调度,基于这个思想衍生了一致性协议

4.1:2PC阶段提交

顾名思义,二阶段提交,将事务的提交分为两个阶段

  • 阶段一 提交事务请求
1、协调者向所有的参与者节点发送事务内容,询问是否可以执行事务操作,并等待其他参与者节点的反馈
2、各参与者节点执行事务操作
3、各参与者节点反馈给协调者,事务是否可以执行
  • 阶段二 事务提交
根据一阶段各个参与者节点反馈的ack,如果所有参与者节点反馈ack,则执行事务提交,否则中断事务
事务提交:
1、协调者向各个参与者节点发送commit请求
2、参与者节点接受到commit请求后,执行事务的提交操作
3、各参与者节点完成事务提交后,向协调者返送提交commit成功确认消息
4、协调者接受各个参与者节点的ack后,完成事务commit
  • 中断事务
1、发送回滚请求
2、各个参与者节点回滚事务
3、反馈给协调者事务回滚结果
4、协调者接受各参与者节点ack后回滚事务
  • 二阶段提交存在的问题
同步阻塞
二阶段提交过程中,所有参与事务操作的节点处于同步阻塞状态,无法进行其他的操作
单点问题
一旦协调者出现单点故障,无法保证事务的一致性操作
脑裂导致数据不一致
如果分布式节点出现网络分区,某些参与者未收到commit提交命令。则出现部分参与者完成数据提
交。未收到commit的命令的参与者则无法进行事务提交,整个分布式系统便出现了数据不一致性现
象。
 
4.2:3PC 三阶段提交
3PC2PC的改进版,实质是将2PC中提交事务请求拆分为两步,形成了CanCommitPreCommit
doCommit三个阶段的事务一致性协议
  • 阶段一 : CanCommit
1、事务询问
2、各参与者节点向协调者反馈事务询问的响应
  • 阶段二 : PreCommit
根据阶段一的反馈结果分为两种情况
1、执行事务预提交
1)发送预提交请求
协调者向所有参与者节点发送preCommit请求,进入prepared阶段
2)事务预提交
各参与者节点接受到preCommit请求后,执行事务操作
3)各参与者节点向协调者反馈事务执行
2、中断事务
任意一个参与者节点反馈给协调者响应No时,或者在等待超时后,协调者还未收到参与者的反
馈,就中断事务,中断事务分为两步:
1)协调者向各个参与者节点发送abort请求
2)参与者收到abort请求,或者等待超时时间后,中断事务
  • 阶段三 : doCommit
1、执行提交
1)发送提交请求
协调者向所有参与者节点发送doCommit请求
2)事务提交
各参与者节点接受到doCommit请求后,执行事务提交操作
3)反馈事务提交结果北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
各参与者节点完成事务提交以后,向协调者发送ack
4)事务完成
协调者接受各个参与者反馈的ack后,完成事务
2、中断事务
1)参与者接受到abort请求后,执行事务回滚
2)参与者完成事务回滚以后,向协调者发送ack
3)协调者接受回滚ack后,回滚事务
3PC相较于2PC而言,解决了协调者挂点后参与者无限阻塞和单点问题,但是仍然无法解决网络分
区问题
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章