1. 前言
本编主要记录Zookeeper写请求处理的一些流程,涉及到过半机制,数据同步。
2. 处理流程
这里假设4台服务器,server1(Follower),server2(Leader),server3(Follower),server4(Observer)。 由于我们Zookeeper客户端对于服务端的任何一台服务都是可以进行连接的,有可能是连接的是Leader,或Follower,甚至是Observer。 这里若有一个客户端Client连接的是Observer,并写入数据。但是由于只有写请求只能交与Leader处理,所以若是连接到的是Follower,Observer,就会发生请求的转发到Leader。
接下来,Leader会想所有的Follower发送提议请求,不对Observer发送。Follower收到来自Leader的提议后,会返回ack响应。
Leader收到ack请求后,会采用过半机制,即发送出去的提议有一半以上的ack响应,则就会发送commit提交数据,同时也会向Observer提交commit。
整个写流程就是如此,这样就保证了每个写入请求都会成功的写入到集群中,若有新的服务器加入进来,也会对Leader进行数据同步,来达到集群中数据的一致性。
3. 为何不向Observer发送提议?
这个问题在Zookeeper单机和集群环境搭建中有提到过
如果集群中读的负载比较高的情况下,增加observer比增加follower所带来的负面影响要好得多,同时不参与过半机制,可以加快数据同步的过程,减少数据同步的时间。这也是Observer的存在意义。
3. 总结
Zookeeper采用过半机制来保证了写数据的同步。