文章目录

  • 前言
  • 一、zookeeper是什么?
  • 二、zookeeper的设计理念
  • 1、服务结构图
  • 2、ZooKeeper的数据模型
  • 3、性能
  • 4、可靠性
  • 总结



前言

  软件的发展从单体应用到现在的分布式应用,软件的架构也变得越来越复杂,作为一个架构师,肯定需要了解大量的软件为自己的软件架构奠定基础,而zookeeper作为一款分布式协调的软件,被许许多多的中间件使用,如:Kafka、Hadoop、HBase、Solr等,为什么这么多的软件都使用到了ZooKeeper呢,他的好处到底在哪里呢?让我们来一起了解下。


一、zookeeper是什么?

  ZooKeeper 是apache软件基金会的顶级项目,先看看官网是怎么描述zookeeper的,如下图:

zookeeper 页面管理 zookeeper界面_分布式


  这段描述总结一句话就是zookeeper是一款为分布式应用提供分布式协调的开源软件。

二、zookeeper的设计理念

1、服务结构图

  先看看官方提供的ZooKeeper的服务结构图

zookeeper 页面管理 zookeeper界面_zookeeper_02


  从图中可以看得出来,ZooKeeper服务有5台Server组成,分为两种角色,Leader和Follower,Leader只能有一台,从图上可以看出,正中间的Server是Leader角色,剩下的都是Follower角色,这些后续会通过实际操作来进行查看和证实。

  另外还有一批Client(具体应用)连接到Server,通过各自连接的Server实现各自的分布式功能。

2、ZooKeeper的数据模型

zookeeper 页面管理 zookeeper界面_zookeeper 页面管理_03


  ZooKeeper采用目录树的结构来设计的数据模型,每个节点都可以存储数据,但是每个节点存储的数据不能超过1M,这是官方为了避免使用者把ZooKeeper当作数据库来使用了,为什么不能把ZooKeeper当作数据库来使用呢,这个话题我们后面在讲性能时再进行解释。

3、性能

zookeeper 页面管理 zookeeper界面_数据模型_04


  官方宣称ZooKeeper快,简单,那我们先看看官方的压测数据,上图横坐标是读请求所占的比例,纵坐标是每秒发送的请求数,红色实线是ZooKeeper自身是3台服务器集群的性能曲线,绿色虚线是5台,蓝色虚线是7台,紫色虚线是9台,浅蓝色虚线是13台

读写比例

并发量

20%

20000左右

40%

22000左右

60%

30000左右

80%

60000左右

95%

110000左右

  表格只是我个人目测的大概的数据,但是从图形结合表格来看,ZooKeeper在处理读数据请求时,性能是非常优秀的。所以如果我们把ZooKeeper当作数据库来用的话,不仅违背了作者当初的设计初衷,同时也无法真正发挥ZooKeeper的性能优势。

4、可靠性

zookeeper 页面管理 zookeeper界面_zookeeper 页面管理_05


  上图是官方的压测结果,官方使用910个客户端并发压测,期间出现2次低谷,这两次低谷都是重新选主导致的,根据官方描述,ZooKeeper重新选主只消耗了200ms,性能非常可靠,重新选主后的ZooKeeper有可以对外正常提供服务,并且性能并没有受到什么影响。

总结

  以上就是今天要讲的内容,本文仅仅简单介绍了ZooKeeper。
  ZooKeeper目前已经被成功的广泛应用到大量的工业级应用中,比如Yahoo。