3PC(三段提交)
2021-05-04 16:42:05 0 举报
3PC(三段提交)
作者其他创作
大纲/内容
2PC中只有参与者有超时机制,而3PC中协调者与参与者都有超时机制(所以2PC会存在资源一直被锁的风险,3PC不存在)在2PC的准备提交和提交阶段之间插入预提交阶段。preCommit是一个缓冲,保证了在最后的提交阶段之前各参与节点的状态是一致的。
doCommit阶段:1、协调者从参与者得到了ACK的反馈:协调者接收到参与者的ACK响应,那么它将从预提交状态进入提交状态。参与者接收doCommit请求后,执行正式的事务提交,在事务提交后释放所有的资源,并向协调者发送haveCommit响应,协调者接收到这个ACK响应之后,完成任务。2、协调者没有从参与者中得到ACK响应,或者超时:执行事务中断。
ACK
preCommit阶段:(保证提交之前各参与者的数据是一直的)1、canCommit阶段所有参与者都返回yes,进行事务预执行,协调者向所有参与者发送preCommit请求,并进入prepared阶段。参与者接收到preCommit请求后会执行事务操作,并将undo和redo信息记录到事务日志中。如果一个参与者成功执行了事物操作,则返回ACK响应。2、参与者返回中有一个以上NO或者等待超时之后协调者没有收到响应:中断事务,协调者向所有参与者发送abort请求,参与者收到abort请求,或者超时未收到协调者请求,执行事务中断。
canCommit阶段:与2PC准备阶段十分相似,协调者向参与者发送commit请求,参与者可以提交返回yes,否则返回no。
haveCommited
参与者
preCommit
协调者
doCommit
canCommit ?
YES
0 条评论
回复 删除
下一页