Zookeeper集群之写请求处理流程

帅比萌擦擦* 提交于 2020-03-06 10:59:40

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采用过半机制来保证了写数据的同步。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!