ZAB协议提到:leader的广播流程是,先向集群内所有的follower发送 proposal后,收到过半follower的ack之后,再次向全部follower发送commit
问题如下:
- 如果有follower刚才因为网络中断,并没有收到leader之前发送的 proposal, 但它稍后有迅速恢复正常,那么它受到commit后如何执行? 就好比它都没有受到预提交,它怎么执行最终提交?
- 如果有follower在收到commit之前网络异常,即没有收到commit, 然后它迅速又恢复正常了。那么这些follower上的数据必然是旧的了。如果这种follower很多,那结果就是 follower刚才广播的数据,有可能最终只有很少数的follower进行了提交。而leader却认为这次同步没有问题!