什么是ZooKeeper

ZooKeeper是开源分布式协调服务,由雅虎创建,是Google Chubby的开源实现。

ZooKeeper是一个高性能的分布式数据一致性解决方案,它将那些复杂的容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并提供一系列简单易用的接口给用户使用。

它解决分布式数据一致性问题:1.顺序一致性 2.原子性 3.单一视图 4.可靠性 5.实时性

应用场景

  • 数据的发布、订阅

数据的发布/订阅就是一方把数据发布出来,另一方通过某种手段可以得到这些数据

通常数据订阅有两种方式:推模式和拉模式。推模式一般是服务器主动向客户端推送消息,拉模式是客户端主动去服务端获取数据(通常使用定时轮询的方式)。

zk采用两种方式相结合

发布者将数据发布到zk集群节点上,订阅者通过一定的方法告诉服务器,我对那个节点感兴趣,那服务器在这写节点的数据发生变化时,就通知客户端,客户端得到通知后可以去服务器获取数据信息

  • 负载均衡

比如客户端通过zk随机连接3台数据库:

首先db在启动的时候先把自己在zk上注册成为一个临时节点(临时节点:在出现问题的时候,节点会自动在zk上删除,保证zk的节点列表都是最新可用的),客户端在需要读写数据的时候去zk上获取所有可用db的连接信息,通过随机算法随机连接一台db服务器。

  • 命名服务

顾名思义,就是提供名称的服务器。例如数据库表的ID,一般用的比较多的有两种ID,一种是自增长的ID,一种是UUID,两种ID都有缺陷,自动增长的ID局限在单库表中使用,不能再分布式中使用,UUID可以在分布式上使用但是没有规律难以理解,我们可以使用zk来生成一个顺序增长的,可以在集群环境下使用的,易于理解的ID

  • 分布式协调/通知

心跳检测

在分布式系统中,我们常常需要知道某个机器是否可用。传统的开发中,可以通过ping某个主机来实现,zk中我们让所有的机子都注册一个临时节点,我们只要判断这个节点是否在zk中存在就可以了,降低系统的复杂度。

优势

  • 开源
  • 高性能,易用于商业产品
  • 应用广泛:Hadoop、HBase、Storm、Solr等

基本概念

  • 集群角色
  • 会话
  • 数据节点
  • 版本
  • watcher
  • ACL权限控制