( 1 )执行过半写成功并 commit 的数据 ,集群内部会保证所有机器都执行了这个事务,同时 zk 客户端收到 操作成功的提示。这个是一致性状态,包括集群内部一致性, 客户端响应结果与集群内部状态一致。
( 2 )如果 leader 执行过半写 但在 commit 之前 宕机了,那么会选举新的 leader,此时选举之后进行数据同步,这个尚未 commit 的事务最终也会在集群内部达到一致性,但是对于客户端来说 这个操作执行失败了。 此时不就出现问题了吗?比如客户端创建一个节点,集群内部显式节点创建成功,但是客户端却收到节点创建失败的结果
( 3 )如果 leader 在将事务 A 的提案发送给 FollowA 后宕机了,集群中其他 follow 节点没有收到事务 A 的提案,经过 leader 选举和数据同步之后,事务 A 的提案应该 会在集群中所有节点都执行并提交(这个理解应该没什么问题吧?),但是此时客户端收到了操作失败的响应结果,而集群内部却显式事务执行成功并提交。 这不就出现不一致了吗?
问题:zk 如何解决 2 和 3 中出现的问题的?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.