ZAB协议的疑问?

发布于 2022-09-12 13:42:13 字数 402 浏览 50 评论 0

ZAB协议提到:leader的广播流程是,先向集群内所有的follower发送 proposal后,收到过半follower的ack之后,再次向全部follower发送commit
问题如下:

  1. 如果有follower刚才因为网络中断,并没有收到leader之前发送的 proposal, 但它稍后有迅速恢复正常,那么它受到commit后如何执行? 就好比它都没有受到预提交,它怎么执行最终提交?
  2. 如果有follower在收到commit之前网络异常,即没有收到commit, 然后它迅速又恢复正常了。那么这些follower上的数据必然是旧的了。如果这种follower很多,那结果就是 follower刚才广播的数据,有可能最终只有很少数的follower进行了提交。而leader却认为这次同步没有问题!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

另类 2022-09-19 13:42:13

第一个问题:leader服务器会为每个follower服务器都分配一个单独的FIFO队列,所有命令都会提交到对应队列里面去执行,如果follower没有执行预提交命令,那么就不会收到第二个执行最终提交的命令。
第二个问题:如果是出现异常崩溃之类导致数据没有接收亦或超过半数服务器与leader服务器未能保持正常通信时,那么在开始新一轮原子广播事务前,会通过崩溃恢复协议使得彼此达到一致的状态。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文