目录
2.1 2pc和3pc
2.2 paxos算法
2.1 2pc和3pc
2PC两阶段提交,分为两个阶段;
阶段一:协调者(coordinator)发起提议,收集参与者(participants)的反馈(vote),根据反馈结果决定是提交(commit)还是中断(abort)事务。
阶段二: coordinator根据participant的反馈,提交或中止事务,如果participant全部同意则提交,只要有一个participant不同意就中止。
2pc的缺点:
1coordinator宕机
coordinator在阶段一发起提议后如果宕机了,那么participant会进入阻塞状态,一直等到coordinator回应。
2coordinator宕机后 ,participant也宕机
此时其他participant 即不能提交也不能回滚,处于阻塞状态
在2PC中一个participant的状态只有它自己和coordinator知晓,假如coordinator提议后自身宕机,在watchdog启用前一个participant又宕机,
其他participant就会进入既不能回滚、又不能强制commit的阻塞状态,直到participant宕机恢复。这引出两个疑问:
能不能去掉阻塞,使系统可以在commit/abort前回滚(rollback)到决议发起前的初始状态
当次决议中,participant间能不能相互知道对方的状态,又或者participant间根本不依赖对方的状态
3PC
阶段一:CanCommit
协调者向参与者询问是否可以执行事务提交
阶段二: PreCommit
协调者收到参与者的回应如果都是yes,则进行预提交,否则中断事务
阶段三:
在获取参与者的ack确认后进行,提交,否则中断事务
三阶段的优点在于,降低了参与者的阻塞范围,缺点在于可能会导致数据的不一致性(参与者接到preCommit之后如果和协调者连接中断依然会提交)
2.2 paxo 算法
参考知乎上的回答
网友评论