天天看点

谈一谈你对zookeeper 的理解(大数据面试题系列~~)

文章目录

      • Zookeeper 几个基本概念
        • 集群角色
        • 会话
        • 数据节点Znode
        • Watcher 事件监听器
      • 几个典型应用场景
        • Master 选举
        • 实现分布式锁
        • 用作微服务的注册中心

Apache Zookeeper 是由Apache Hadoop 的子项目发展而来,之后正式成为了Apache 的顶级项目。

Zookeeper 是一个典型的分布式数据一致性的解决方案,它 为分布式应用提供了高效可靠的分布式协调服务,分布式应用程序可以基于它实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调与通知、集群管理、Master 选举、分布式锁等功能。

Zookeeper 几个基本概念

集群角色

Zookeeper 没有沿用传统的Master/Slave 概念,而是引入了Leader、Follower和Observer 三种角色。Zookeeper 集群中的所有机器通过一个Leader 选举过程来选定一台被称为“leader”的机器,Leader 服务器为客户端提供读写服务。Follower 和Observer 都能提供读服务,唯一的区别在于,Observer 机器不参与Leader 选举过程,也不参与写操作的“过半写成功”策略,因此Observer 可以在不影响写性能的情况下提升集群的读性能。

会话

在Zokeeper 中, 一个客户端连接是指客户端和服务器之间的一个TCP 长连接。客户端启动的时候,首先会先与服务器建立一个TCP 连接,从第一次连接建立开始,客户端会话的生命周期也开始了。通过这个连接,客户端能够通过心跳检测与服务器保持有效的会话,也能向Zookeeper 服务器发送请求并接受响应,同时还能通过该连接接受来自于服务器的Watcher 事件通知。

数据节点Znode

Znode 是Zookeeper 数据模型中的数据单元。Zookeeper 将所有数据存储在内存中,数据模型是一棵树,路径由/ 进行分割, 例如/home/path1。每个Znode 上都会保存自己的数据内容,同时还会保存一系列属性信息。

在Zookeeper 中,Znode 分为持久节点和临时节点两类。所谓持久节点是指一旦这个Znode 被创建了,这个Znode 将一直保存在Zookeeper 上,除非进行主动删除操作。临时节点的生命周期和客户端会话绑定,一旦客户端会话失效,那么这个临时节点就会被移除。另外Zookeeper 还允许用户为每个节点添加自增的属性,就是节点名后面会追加上一个自增的整型数字。

Watcher 事件监听器

Zookeeper 允许用户在指定节点上注册一些Watcher, 并且在一些特定事件触发的时候,Zookeeper 服务器会通知到特定的客户端。

几个典型应用场景

Master 选举

Master 选举是分布式系统中非常常见的应用场景。下图为一个最简实现:

谈一谈你对zookeeper 的理解(大数据面试题系列~~)

如上图,三个节点1,2,3竞选master, 三个节点同时在/master 路径下创建临时节点node, 但zookeeper 只会保证一个客户端创建成功。创建成功的节点即为master,创建失败的节点则需注册一个对/master/node 路径的变更监听。一旦master 节点宕机了,则此临时节点也会被删除,其它节点就会收到消息重新开始竞选master。

实现分布式锁

关于zookeeper 实现分布式锁可以看这篇博文》》》

用作微服务的注册中心

下图只是介绍最简的实现:

谈一谈你对zookeeper 的理解(大数据面试题系列~~)
  1. 服务注册发布

    例如客户端host1 在port1 想要发布注册UserService 服务,则它需要在/services/com.demo.UserServie 路径下创建临时节点,临时节点值为服务地址host1:port1。服务宕机,临时节点自动关闭。

  2. 服务调用

    例如有消费端想要调用UserService 服务,它只需获取/services/com.demo.UserService 下的所有节点,然后按照一定规则选取一个服务发布方即可远程调用其服务。

继续阅读