笔记24:Zookeeper的学习和使用

一、Zookeeper的概述

Zookeeper:一个开源的、分布式的(多台服务器处理一件事情),为分布式应用提供协调服务的Apache项目


-从设计模式角度理解Zookeeper:
1、一个基于观察者模式设计的分布式服务管理框架,负责存储和管理大家都关心的数据,
然后接受观察者的注册。
2、一旦数据的状态发生变化,Zookeeper就将负责通知那些已经在Zookeeper上注册的
那些观察者做出相应的反应。
-从原理上理解Zookeeper:
1、Zookeeper = 文件系统(可存放一些数据) + 通知机制(数据变化后通知观察者)
2、Zookeeper集群用于存储当前在线运行的服务器节点状态,客户端查找到Zookeeper
集群内存在该服务器节点才会进行访问。


二、Zookeeper的特点


1、Zookeeper结构为,一个领导者,多个跟随者组成集群。
2、集群中只要有半数节点存活,Zookeeper集群就能正常服务。
3、全局数据一致:每个Server存放一份相同的数据副本(配置文件、核心数据),Client无论
连接到哪个,都具备同样的数据。
4、更新请求顺序进行,来自同一个Client的更新请求按照其发送的顺序依次执行。
5、数据更新原子性:一次数据更新要么成功,要么失败,具备事务特点。
6、实时性:一定时间间隔内,Client总是能读取到最新数据。
7、数据结构:整体上为一棵树,每个节点ZNode默认能存储1MB数据,每个ZNode可以通过其
路径来唯一标识。


三、Zookeeper的功能


1、统一命名服务器:客户端访问统一域名,Zookeeper可帮助其请求具体ip地址对应服务器
2、统一配置管理:分布式环境下,配置文件同步。一般一个集群中,所有节点配置信息一致
且修改后快速同步到各节点。
3、统一集群管理:实时监控节点状态。
4、服务器动态上下线:客户端洞察到服务器的上下线的变化。服务器在线状态会被写入
Zookeeper集群,被client知晓。
5、软负载均衡:Zookeeper集群记录各个服务器的访问数,动态分配客户端请求给当前
负荷较少的服务器。


四、Zookeeper内部原理


1、选举机制:每个服务器启动后,会先优先选举自己,若不行,则投票给id值较大的服务器,
直到某台服务器票数过半。
2、节点类型:
持久型 - 客户端和服务器断开连接后,创建的节点不会删除,一般用于存储共享数据
短暂型 - 客户端和服务器断开后,创建的节点会删除,该类型节点可用于zookeeper
记录在线的服务器。
3、统一集群管理:实时监控节点状态。
4、服务器动态上下线:客户端能洞察到服务器上下线的变化。服务器在线状态会写入
Zookeeper集群,被client知晓。
5、软负载均衡:Zookeeper集群记录各个服务器的访问数,动态分配客户端请求给当前负荷
较少的服务器。


五、Zookeeper数据流程


1、客户端向zk集群中某台server1上写数据,发送一个请求。如果server1不是Leader,则
此server会吧接受到的请求转发给Leader。再由Leader进一步将请求广播给各个Server;

2、各个Server写数据成功,会通知Leader。

3、Leader判断收到过半数的Server写数据成功,则会认为数据写成功。由Leader告诉
Server1写数据成功。由Server1再来通知Client。