什么是Zookeeper?
Zookeeper 是一个分布式协调服务的开源框架。主要用来解决分布式集群中应用系统的一致性问题,例如怎样避免同时操作同一数据造成脏读的问题。 ZooKeeper 本质上是一个分布式的小文件存储系统。提供基于类似于文件系统的目录树方式的数据存储,并且可以对树中的节点进行有效管理。从而用来维护和监控你存储的数据的状态变化。通过监控这些数据状态的变化,从而可以达到基于数据的集群管理。诸如:统一命名服务、分布式配置管理、分布式消息队列、分布式锁、分布式协调等功能。
Zookeeper 的数据模型
Zookeeper 的数据模型很像数据结构当中的树,也很像linux文件系统的目录。
图片.jpg
树是由节点所组成,Zookeeper 的数据存储也同样是基于节点。但是,不同于树的节点,节点的引用方式是路径引用,类似于文件路径:
/user/age
/admin/role
这样的层级结构,让每一个 znode 节点拥有唯一的路径
znode节点包含的元素
znode.jpgdata:znode 存储的数据信息。
ACL:记录 znode 的访问权限。
stat:包含 znode 的各种元数据,比如事务 ID、版本号、时间戳、大小等等。
child:当前节点的子节点引用
Zookeeper 是为读多写少的场景所设计。znode 并不是用来存储大规模业务数据,而是用于存储少量的状态和配置信息,每个节点的数据最大不能超过 1MB。
Zookeeper 的事件通知
在 ZooKeeper 中,引入了 Watcher 机制来实现这种分布式的通知功能。ZooKeeper 允许客户端向服务端注册一个 Watcher 监听,当znode发生改变时,会触发了这个 Watcher,那么就会向指定客户端发送一个事件通知来实现分布式的通知功能。
Watch机制官方声明:一个Watch事件是一个一次性的触发器,当被设置了Watch的数据发生了改变的时候,则服务器将这个改变发送给设置了Watch的客户端,以便通知它们。
分布式服务架构的注册中心
图片.jpg在zookeeper中,进行服务注册,实际上就是在zookeeper中创建了一个znode节点,该节点存储了该服务的IP、端口、调用方式(协议、序列化方式)等。该节点承担着最重要的职责,它由服务提供者(发布服务时)创建,以供服务消费者获取节点中的信息,从而定位到服务提供者真正网络拓扑位置以及如何调用。RPC服务注册、发现过程简述如下:
1、服务提供者启动时,会将其服务名称,ip地址注册到配置中心。
2、服务消费者在第一次调用服务时,会通过注册中心找到相应的服务的IP地址列表,并缓存到本地,以供后续使用。当消费者调用服务时,不会再去请求注册中心,而是直接通过负载均衡算法从IP列表中取一个服务提供者的服务器调用服务。
3、当服务提供者的某台服务器宕机或下线时,相应的ip会从服务提供者IP列表中移除。同时,注册中心会将新的服务IP地址列表发送给服务消费者机器,缓存在消费者本机。
4、当某个服务的所有服务器都下线了,那么这个服务也就下线了。
5、同样,当服务提供者的某台服务器上线时,注册中心会将新的服务IP地址列表发送给服务消费者机器,缓存在消费者本机。
网友评论