【问题标题】:How ZooKeeper guarantees "Single System Image"?ZooKeeper 如何保证“单一系统镜像”?
【发布时间】:2016-11-25 03:53:05
【问题描述】:
在 ZooKeeper 程序员指南的 Consistency Guarantees 部分,它声明 ZooKeeper 将提供“单一系统映像”保证:
无论客户端连接到哪个服务器,客户端都会看到相同的服务视图。
根据 ZAB 协议,只有超过一半的追随者确认提案,领导者才能提交交易。所以很可能不是所有的关注者都处于相同的状态。
如果follower状态不同,ZooKeeper怎么保证“单系统状态”?
参考资料:
【问题讨论】:
标签:
apache-zookeeper
distributed-system
consistency
2phase-commit
【解决方案3】:
在被认为成功之前,所有的读取和写入都经过大多数节点,因此写入之后的读取不可能不知道之前的写入。至少有一个节点知道它。 (否则 n/2+1 + n/2+1 > n,这是错误的。)如果许多人(最多只有一个人)对世界有过时的看法,这并不重要,因为他们中至少有一个人知道这一点全部。
如果有足够多的节点崩溃或网络被分割,以至于没有能够相互通信的节点组占多数,Zab 将停止处理请求。如果您确认的更新被一组消失且永远不会重新联机的节点接受,则您的集群将丢失一些数据(但仅当您要求它继续前进并将其死节点留在后面时)。
处理两个以上的请求是通过一次处理两个请求来完成的,直到只剩下一个状态。