2pc
1.prepare commit
协调者向参与者发送prepare commit请求,当所有的参与者都回复ack之后,协调者会发送docommit请求。
2.docommit
docommit执行真正的提交操作。当协调者发送了commit之后,有一部分参与者没有收到,那么他会放弃事务执行。导致数据不一致。
3pc
修改点:
1.添加了超时机制:在最后一个阶段 协调者发送 doCommit()请求之后,参与没有收到这个请求,并且出现超时的时候,参与者会主动执行commit。
2.添加了can commit 的步骤。
首先协调者会去执行cancommit()操作,询问是否能执行事务操作。
可能有一部分参与者发生了死锁或者暂时中断了某一些请求。也就是在can commit阶段就出现问题。不会再去执行后面的操作。