(1)执行过半写成功并commit的数据 ,集群内部会保证所有机器都执行了这个事务,同时zk客户端收到 操作成功的提示。这个是一致性状态,包括集群内部一致性, 客户端响应结果与集群内部状态一致。
(2)如果leader执行过半写 但在commit之前 宕机了,那么会选举新的leader,此时选举之后进行数据同步,这个尚未commit的事务最终也会在集群内部达到一致性,但是对于客户端来说 这个操作执行失败了。
此时不就出现问题了吗?比如客户端创建一个节点,集群内部显式节点创建成功,但是客户端却收到节点创建失败的结果
(3)如果leader 在将事务A的提案发送给FollowA后宕机了,集群中其他follow节点没有收到事务A的提案,经过leader选举和数据同步之后,事务A的提案应该 会在集群中所有节点都执行并提交(这个理解应该没什么问题吧?),但是此时客户端收到了操作失败的响应结果,而集群内部却显式事务执行成功并提交。 这不就出现不一致了吗?
问题:zk如何解决2和3中出现的问题的?
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…