1.什么是zookeeper:
zookeeper是动物园管理员,动物园中有许多动物,这些动物就是一个个服务,zookeeper做的就是管理这些服务。
zookeeper:是一个分布式的小文件管理系统,管理分布式服务
2.zookeeper的应用场景:
- 注册中心:
注册中心好比房屋中介,协调服务提供者和服务消费者,快速完成消费即服务调用。
1.服务提供者注册到zookeeper。
2.服务消费者注册到zookeeper。同时订阅服务。
3.消费者调用服务提供者的方法。
4.当服务提供者的方法发生变更,zookeeper通知服务消费者重新获取进行变更。
- 配置中心:
及时得到数据的变化通知,达到动态获取数据的目的
作用:存储数据,zookeeper存储配置信息,实现一次配置,所有文件跟着修改。
ZooKeeper 采用的是推拉结合的方式。
1、推: 服务端会推给注册了监控节点的客户端 Wathcer 事件通知
2、拉: 客户端获得通知后,然后主动到服务端拉取最新的数据
-分布式锁:
分布式中往往需要协调服务的动作,服务去操作共享的一个或者一组的资源数据时需要对资源上锁保证一致性。
zookeeper实现分布式锁步骤:
1.消费者调用服务方的一个方法时,zookeeper创建临时节点数据。
2.当其他消费者调用该方法时同样创建临时节点数据,但是之前已经存在节点数据便会创建失败,进行等待。
3.当方法执行完毕后,会清除该节点数据,zookeeper并向消费者们发送方法执行完的通知。
4.其他消费者开始竞争锁。
惊群效应:
执行完一个方法后,所有监听该方法的服务同时访问zookeeper去创建数据,造成的zookeeper性能降低。
解决惊群效应:
分布式队列思想:排队执行方法,每个服务都只监听上一个的节点。
-分布式队列:
1.创建临时有序节点
2.每个服务监听前一个节点
3.上一个节点发生变更,通知当前服务
4.每个节点执行完都会删除节点数据
5.下一个节点执行任务
-负载均衡:
让分布式中服务被调用的次数相对就均匀
1.轮循(服务提供者排队执行)
2.随机 (方法随机在服务提供者执行)
3.最小活跃数(机器被使用次数最少的执行服务)
4.一致性哈希算法(哈希环)
3、zookeeper基本操作:
-zookeeper数据结构:
数据结构是层级结构,就如windows的文件系统一样,每个文件都有唯一的访问路径。
-节点的分类
1.临时性 -e
2.永久性
3.顺序性 -s
4.无序性
默认创建的节点是无序永久的。
-客户端命令
1. 查看跟目录下的节点:ls /
2. 创建普通节点:create /app1 "helloworld" , 节点名app1 存储的值为helloworld
3. 创建有序永久节点 :create -s /hello "helloworld"
4. 创建普通临时节点:create -e /app3 'app3'
5. 创建带序号临时节点: create -e -s /app4 'app4'
6. 查询节点数据 :get /app1
7. 修改节点数据set /app1 'hello'
8. 删除节点 delete /hello0000000006
9. 递归删除节点 delete /hello
10.查询节点状态 stat /zookeeper
-watch机制
监听节点数据变化,一旦生变更(添加、修改、删除)时,服务端通知客户端(addListener)
NodeCache:仅监听当前节点
PathChildrenCache:仅监听当前节点的子节点
TreeCache:NodeCache+PathChildrenCache,监听该节点和子节点
常用使用treeCache做节点监听
zookeeper树形结构
每个/app1/p_i都表示一个机器节点
4、zookeeper集群
注册中心解决服务单点问题。
解决zookeeper单点问题。
-
Leader:领导者:
-1.负责读,写操作,2.监听follower和observer的心跳,查看连接正常,3.任务调度,保证事务执行的有序性。 -
Follower:追随者
-处理客户端非事务(读操作) 请求,转发事务(增删改)请求给 Leader;参与集群 Leader 选举投票 2n-1台可以做集群投票。 -
Observer:观察者
-1.对非事务的任务可以自己操作,2.对写操作交给leader执行,3.不参与投票选举leader,4.提升集群的非事务处理能力。 -
leader选举:
-在集群刚开始启动时或者leader挂了时选举:
在领导选举过程中,追随者投票,某台zookeeper服务器超过50%的支持就能当选新的leader。
- 每个zookeeper服务器都各自投自己一票
- 如果票数相同,则进入第二轮投票
- zookeeper服务器选择投属性zxid大的机器
- zxid值相同,选择投myid大的机器
- 统计得到的票数>50%就成为leader
zxid大的->myid大的
- ZXID:
事务ID是ZooKeeper为每次更新操作/事务操作分配一个全局唯一的id,表示zxid,值越小,表示越先执行,每个zookeeper启动时zxid都是0,每执行一次事务操作zxid自增。
更多知识:
1.分布式:
一个主节点服务器,多台服务器实现不同的功能,将结果汇总到主服务器。
- 多台计算机构成
- 计算机之间通过网络进行通信
- 彼此进行交互
- 共同目标 有共同的功能
2.单点问题:
一个服务器不够用,服务器挂机了没有替代的服务器。
3.zookeeper服务器性能更好的,id设置大点成为leader。
4.集群中机器的个数符合奇数个,减少投票次数。