1.Zookeeper工作机制
1.1 工作机制Zookeeper
基于观察者模式的分布式管理框架,它负责存储和管理数据,然后接受观察者的的注册,一旦这些数据发生改变,Zookeeper就负责通知已在Zookeeper上注册的那些观察者做出相应反应
1.2 Zookeeper的特点
- Zookeeper:一个领导者(Leader),多个更随着(Follower)组成的集群
- Zookeeper集群群只有在半数以上节点存活,才能正常服务
- 全局数据一致性:每个Server保存一份相同的副本,Client无论连接那个Server,数据都是一致的
- 更新请求顺序进行,来自一个Client的请求按照其发送顺序依次进行
- 数据原子性,一次更新要么成功要么失败
- 实时性,在一定时间内,Client能读到最新数据
1.2 Zookeeper内部原理
1.2.1 选举机制:
- 半数机制:Zookeeper集群半数机器存活,集群可用。所以适合安装奇数台服务器
- Zookeeper虽然没有指定Master和Slave,但是Zookeeper工作时,会有一个Leader节点,其他节点为Follower,Leader是通过内部选举机制产生
1.2.2 节点类型:
- 持久化目录节点:客户端断开连接后,创建的节点不删除
- 持久化顺序编号目录节点:持久化目录节点(Persisent):客户端断开连接后,创建的节点不删除,指示该节点按照名称进行编号
- 临时目录节点:客户端与Zookeeper断开连接后,该节点被删除
- 临时顺序编号目录节点:客户端与zookeeper断开连接后,开节点被删除,只是Zookeeper对节点名称顺序编号
1.2.2 监听器原理:
- 监听原理详解
- 首先要有一个main()线程
- main线程中创建zookeeper 客户端,这时就会创建两个线程,一个负责网络连接通信(connect),另一个负责监听(listen)
- 通过connector线程将注册监听事件发送给zookeeper
- zookeeper将注册监听时间添加到注册监听列表中
- Zookeeper监听到数据或路径发生变化,就会将这个消息发送给listener线程
- listener线程调用内部的process()方法
- 常见监听
- 监听节点数据变化:get path[watch]
- 监听子节点变化:ls path[watch]