2PC故障情况分析
1. 协调者正常,参与者宕机
- 发生在第二阶段:无论协调者发起的是提交还是终止,那宕机的参与者在重启之后,都将执行对应操作,不存在不一致情况。
- 发生在第一阶段:由于协调者无法收集到所有参与者的反馈,会陷入阻塞情况。
解决办法:引入超时机制。
- 超过指定时间未收到反馈,事务失败,向所有节点发送终止事务请求。
- 宕机的节点启动后,收到终止事务请求,该事务失败。
小结
简单来说,由于协调者没挂,无论参与者是否宕机,都可以从协调者这里获取正确的状态。
2. 协调者宕机,参与者正常
无论处于哪个阶段,由于协调者宕机,无法发送提交请求,所有处于执行了操作但是未提交状态的参与者都会陷入阻塞情况。
解决办法:引入协调者备份,同时协调者需记录操作日志。
- 当检测到协调者宕机一段时间后,协调者备份取代协调者,并读取操作日志,向所有参与者询问状态。
- 如果存在commit或者abort,则对所有节点执行对应的操作。(是不会存在既有commit和abort的情况的)
- 如果只有prepare和未执行,可以继续完成该事务,也可以终止该事务。最终的状态是一致的。
小结
由于参与者正常,引入协调者备份和