ZooKeeper的设计原理讲到这基本就结束了,有兴趣的朋友可以下源代码看看,ZooKeeper的源代码写的很好,很轻量级,是入门分布式系统的绝佳材料。
最后再简单总结一下吧:
(1)ZooKeeper是什么?
ZooKeeper是轻量级的分布式一致性存储集群系统,在集群间的各个机器上维护一致性的数据存储,某些机器宕机不会影响整体集群的正常服务。
(2)它是如何工作的
集群有1个leader和多个follower组成,至于Observer笔者就不单独说了。集群启动的时候每台机器都是初始化状态,这是启动选举过程,选举出一个leader,选举之后剩余的机器就是follower,然后follower向leader发送注册信息,并从leader获取leader的存储数据,保持和leader数据一致性。然后集群就可以正常服务了。
对于读请求,都是从本地返回数据给客户端,所不同的是写请求。
如果写请求REQUEST发送给leader,则leader会维护一个临时状态,并将写请求作为PROPOSAL包发给所有的follower,然后follower写WAL日子并回复ACK包给leader,leader收集到半数以上的ACK则认为集群已经记录下这个写请求,这时候leader发送COMMIT包给follower们,follower收到COMMIT之后让写请求的数据在本地生效。这样leader和follower都保存同一份写请求数据并生效。
如果写请求REQUEST发送给follower,则follower会转发给leader,然后leader同样开始上述过程。
ZooKeeper的总流程大致就是这样了,其实还有一款分布式存储系统叫Etcd,速度更快性能更好,有兴趣的朋友可以看笔者的电子书链接: