首页 > 其他 > 详细

两阶段提交 2PC 2 phase commit

时间:2020-12-16 09:26:39      阅读:34      评论:0      收藏:0      [点我收藏+]

复习:

技术分享图片

 

 

 

sql 拆成一个个算子 projection join(通信计划 协调完成)结果分布在分布数据库的节点上

事务:一个事务分成若干项工作 扔给每个节点 每个节点有日志保证机制

acid无法通过局部的机制保证 需要全局的机制

I distributed locking 全局锁

A D 单个节点(redo/undo)job1已完成 必须强迫job2完成 而job2无法完成,job2 未完成(abort/rollback

2PC

 

需要全局机制(2PC two phase commit 每个job先将其job做完 但不提交 每个节点可以清楚它的job可否提交

phase1:TM询问每个节点能否提交 节点返回确认 如果发现所有人都可以提交

phase2:TM下达指令提交

如果任何节点告诉TM不能提交,在phase2TM告诉大家要abort

有的节点突发故障 其所在计算机宕机

通信不应答(job节点/TM)陷入僵局

如果一个数据库有一块数据所有人都无法访问 数据库出故障

TM收到所有job返回都是准备好了,说明这个事务可以提交 出故障节点回来后会跟随提交事务

TM没有收到足够的准备好了的反馈,将事务abort

2phase commit 遇到问题:两个节点都故障 其中一个是TM 无法结束事务

不知道TM是否收到所有准备好了的反馈 也不知道它有没有发送给某些节点让它提交/abort的指令

改变协议 3PC 

询问两遍 规避所有blocking

技术分享图片

 

 技术分享图片

 

 技术分享图片

 

两阶段提交 2PC 2 phase commit

原文:https://www.cnblogs.com/wwqdata/p/14142019.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!