Zookeeper
Zookeeper
Zookeeper = 文件系统 + 通知机制
作为一个开源分布式的存储中间件,用来存储各个客户端都关心的数据,并采用观察者设计模式,当观察者触发了节点指定的事件,服务端就会通知客户端,客户端可以执行回调方法执行对应的操作。
- Zookeeper的每个存储基本单位为znode,所有的znode都挂载在 "/"节点,每个znode都有一个路径标识,每个存储单位默认为1M,还可以存储Byte[]类型的数据。
- 观察者模式设置后,仅在当次有效,仅一次,如果需要循环监听需要写递归监听。
- Zookeeper设计采用了paxos协议设计,该协议要求只有当集群半数以上的服务实例存储,集群才会提供正常的服务。
- Zookeeper中仅有一个Leader和多个Follower,在启动集群时会根据选举端口自动选举出 Leader。
选举机制:
自私、墙头草
- 服务id大的节点具有选择优势,如果节点中内容相同,先比较id,如若内容不同选最新的当Leader,比zxid。因为每次数据改变都会更改zxid,该值最大的则代表内容最新最全。
监听原理:
- 先创建main()线程,并在main()线程中创建一个Zookeeper的客户端,这是就会创建两个线程,Connet负责网络连接通讯,Listener负责监听,通过Connect线程将监听的注册事件发送给zookeeper,然后Zookeeper的监听器会将注册的监听时间添加到监听列中,Zookeeper监听到有数据或路径的变化,就会将消息发送给Lintener线程,Listener线程内部会调用回调process()方法执行对应的操作。
作者:yuexiuping
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.