七 两阶段事务的问题

两阶段事务-协调者宕机分析

七 两阶段事务的问题

1.如果在第一阶段,协调者宕机,那么所有参与者将无法再收到协调者第二阶段的commit或rollback命令,故会一直阻塞下去,本地事务无法结束
解决方案∶所有参与者统一rollback(因为还未进入第二阶段,所有参与者都不会接收到提交或回滚的命令,当前事务是无法继续提交的,故只能回滚。)

2.如果在第二阶段,协调者宕机,那么可能部分参与者没有接收到Commit、rollback,那么这部分没有接收到命令的参与者都会一直阻塞下去。

两阶段事务-参与者宕机分析

七 两阶段事务的问题

1.如果在第一阶段,某个参与者宕机,那么会导致协调者一直等待这个参与者的响应,从而导致其它参与者也进入阻塞,全局事务将无法结束。
解决方案∶所有参与者统一rolback(因为还未进入第二阶段,所有参与者都不会接收到提交或回滚的命令,当前事务是无法继续提交的,故只能回滚。)
2.如果在第二阶段,协调者发起Commit时,某个参与者宕机,已经执行Commit的参与者数据库已经修改成功,但是宕机的参与者就无法Commit,这个时候就会参数数据不一致的问题。

两阶段事务-网络问题(脑裂)

1.网络闪断,发生在第一阶段∶会有部分参与者进入阻塞,全局事务无法结束。
解决方案∶所有参与者统一rolback(因为还未进入第二阶段,所有参与者都不会接收到提交或回滚的命令,当前事务是无法继续提交的,故只能回滚。)
2.网络闪断,发生在第二阶段∶会有部分参与者Commit另一部分参与者未Commit,从而导致数据

思考题∶

当在第二阶段,出现了协调者 或参与者宕机,或网络脑裂;就会出现某个参与者不知道其他参与者究竟是Commit、rollback;
如果参与者采用超时机制,那么超时后重试,是该提交还是回滚?如果是执行回滚,那太保守,如果执行提交,那太激进暴力。如果是你,你会怎么做?