zookeeper(一) --- zookeeper概述
写文章之前笔者先说明一下笔者最近了解zookeeper的原因,最近笔者所在的项目中需要用全文索引,而架构师和项目经理决定使用比较成熟的solr+zookeeper的模式。这个任务比较幸运的落到了笔者的肩上,以上就是文章的背景了,进入主题。
什么是Zookeeper?
Apache ZooKeeper是Apache软件基金会的一个软件项目,他为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。由雅虎创建,是Google Chubby的开源项目实现。 ZooKeeper曾经是Hadoop的一个子项目,但现在是一个独立的顶级项目。
ZooKeeper的架构通过冗余服务实现高可用性。因此,如果第一次无应答,客户端就可以询问另一台ZooKeeper主机。ZooKeeper节点将它们的数据存储于一个分层的命名空间,非常类似于一个文件系统或一个前缀树结构。客户端可以在节点读写,从而以这种方式拥有一个共享的配置服务。更新是全序的。
应用场景
1、 数据发布/订阅
数据发布/订阅 顾名思义就是一方把数据发布出来,另一方通过某种手段可以得到这些数据。
通常数据订阅有两种方式:推模式和拉模式,推模式一般是服务器制动向客户端发送消息,拉模式是客户端主动去服务器获取数据(通常采用定时轮询的方式),而zookeeper采用两种方式相结合。发布者将数据发布到zookeeper集群节点上,订阅者通过一定得方法告诉服务器,我对那个节点的数据感兴趣,那服务器在这些节点的数据发生变化时,就通知客户端客户端得到通知后可以去服务器获取数据信息。
2、 负载均衡
a. 首先DB再启动的时候先在zookeeper上注册一个临时节点(服务器出现问题的时候,节点会自动从zookeeper上删除)
b. 客户端需要低些数据库的时候首先它去zookeeper得到所有可用的DB的连接信息(一张表)
c. 客户端随机选择一个与之建立连接
d. 当客户端发现连接不可用的时候可再次从zookeeper上获取可用的DB连接信息,当然也可以在刚获取的那个列表里移除不可用的连接后再随机选择一个DB与之连接。
3、 命名服务
顾名思义,就是提供名称的服务,,例如数据库表格ID,串通的开发中,可以通过ping某个主机来实现,ping得通说明对方是可用的,相反是不可用的。Zookeeper中我们让所有的机器都注册一个临时的节点,我们判断一个机器是否可用,我们只需要判断这个节点在zookeeper中是否存在就可以了,不需要直接去连接诶需要检查的机器,降低系统的复杂度。
Zookeeper的优势?
1、 源代码开放
2、 已经被证实是高性能,易用的工业级产品
3、 有广泛的应用:Solr、Hadoop、Storm