两阶段提交 2PC 2 phase commit

复习:

 

 

 

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

 

 

 

 

 

posted @ 2020-12-16 08:35  柠檬味呀  阅读(199)  评论(0编辑  收藏  举报