什么是 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 就担任了注册中心这一角色。