Java架构师丨再不懂ZooKeeper,就安安心心把这篇文章看完

我本人曾经使用过 ZooKeeper 作为 Dubbo 的注册中心,另外在搭建 Solr 集群的时候,我使用到了 ZooKeeper 作为 Solr 集群的管理工具 。
前几天,总结项目经验的时候,我突然问自己 ZooKeeper 到底是个什么东西?

Java架构师丨再不懂ZooKeeper,就安安心心把这篇文章看完

文章插图
 
想了半天,脑海中只是简单的能浮现出几句话:
  • Zookeeper 可以被用作注册中心 。
  • Zookeeper 是 Hadoop 生态系统的一员 。
  • 构建 Zookeeper 集群的时候,使用的服务器最好是奇数台 。
可见,我对于 Zookeeper 的理解仅仅是停留在了表面 。所以,通过本文,希望带大家稍微详细的了解一下 ZooKeeper。
如果没有学过 ZooKeeper,那么本文将会是你进入 ZooKeeper 大门的垫脚砖;如果你已经接触过 ZooKeeper,那么本文将带你回顾一下 ZooKeeper 的一些基础概念 。
最后,本文只涉及 ZooKeeper 的一些概念,并不涉及 ZooKeeper 的使用以及 ZooKeeper 集群的搭建 。
网上有介绍 ZooKeeper 的使用以及搭建 ZooKeeper 集群的文章,大家有需要可以自行查阅 。
 
一、什么是 ZooKeeperⅠ.ZooKeeper 的由来
下面这段内容摘自《从 Paxos 到 ZooKeeper 》第四章第一节的某段内容,推荐大家阅读一下:
Zookeeper 最早起源于雅虎研究院的一个研究小组 。在当时,研究人员发现,在雅虎内部很多大型系统基本都需要依赖一个类似的系统来进行分布式协调,但是这些系统往往都存在分布式单点问题 。
所以,雅虎的开发人员就试图开发一个通用的无单点问题的分布式协调框架,以便让开发人员将精力集中在处理业务逻辑上 。
关于“ZooKeeper”这个项目的名字,其实也有一段趣闻 。在立项初期,考虑到之前内部很多项目都是使用动物的名字来命名的(例如著名的Pig项目),雅虎的工程师希望给这个项目也取一个动物的名字 。
时任研究院的首席科学家 Raghu Ramakrishnan 开玩笑地说:“在这样下去,我们这儿就变成动物园了!”
此话一出,大家纷纷表示就叫动物园管理员吧,因为各个以动物命名的分布式组件放在一起,雅虎的整个分布式系统看上去就像一个大型的动物园了 。
而 Zookeeper 正好要用来进行分布式环境的协调,于是,Zookeeper 的名字也就由此诞生了 。
Ⅱ.ZooKeeper 概览
ZooKeeper 是一个开源的分布式协调服务,ZooKeeper 框架最初是在“Yahoo!"上构建的,用于以简单而稳健的方式访问他们的应用程序 。
后来,Apache ZooKeeper 成为 Hadoop,HBase 和其他分布式框架使用的有组织服务的标准 。
例如,Apache HBase 使用 ZooKeeper 跟踪分布式数据的状态 。
ZooKeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用 。
原语: 操作系统或计算机网络用语范畴 。它是由若干条指令组成的,用于完成一定功能的一个过程 。具有不可分割性,即原语的执行必须是连续的,在执行过程中不允许被中断 。
ZooKeeper 是一个典型的分布式数据一致性解决方案,分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能 。
ZooKeeper 一个最常用的使用场景就是用于担任服务生产者和服务消费者的注册中心 。
服务生产者将自己提供的服务注册到 ZooKeeper 中心,服务的消费者在进行服务调用的时候先到 ZooKeeper 中查找服务,获取到服务生产者的详细信息之后,再去调用服务生产者的内容与数据 。
如下图所示,在 Dubbo 架构中 ZooKeeper 就担任了注册中心这一角色 。
Java架构师丨再不懂ZooKeeper,就安安心心把这篇文章看完

文章插图
 
Dubbo 架构图
【Java架构师丨再不懂ZooKeeper,就安安心心把这篇文章看完】Ⅲ.结合个人使用讲一下 ZooKeeper
在我自己做过的项目中,主要使用到了 ZooKeeper 作为 Dubbo 的注册中心(Dubbo 官方推荐使用 ZooKeeper 注册中心) 。
另外在搭建 Solr 集群的时候,我使用 ZooKeeper 作为 Solr 集群的管理工具 。
这时,ZooKeeper 主要提供下面几个功能:
  • 集群管理:容错、负载均衡 。
  • 配置文件的集中管理 。
  • 集群的入口 。
我个人觉得在使用 ZooKeeper 的时候,最好是使用集群版的 ZooKeeper 而不是单机版的 。


推荐阅读