什么是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权限控制