一阶段:
发送canCommit请求,这里的内容包含了提交内容。
二阶段:
根据一阶段结果,如果:
成功:
1.发送preCommit请求,进入prepared阶段
2.接收者进行事务操作,记录redo和undo log
3.接收者将事务操作结果反馈
失败:
给所有接收者发送abort命令,接收者收到abort或者超时,都不会继续进行。
三阶段:
根据二阶段结果:
成功:
向所有接收者发送doCommit请求,接收者收到后进行提交。收到所有接受者的ack后,事务结束。
失败:
发送abort请求,会进行回滚来中断事务。如果超时,这里会继续进行提交。
缺点:当某个节点在接收到preCommit后,它因为网络原因或者其他原因后,会继续提交造成不一致。