一.zookeeper是什么
zookeeper是源代码开放的分布式协调服务,由雅虎创建,是Google chubby的开源实现,zookeeper是一个高性能的分布式数据一致性解决方案,
它将那些复杂的,容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并提供一系列简单易用的接口给用户使用
知识要点:
1.源码开放
2.是分布式协调服务,它解决分布式数据一致性问题
A.顺序一致性 B.原子性 C.单一视图 D.可靠性 E.实时性
3.高性能
4.我们可以通过调用zookeeper提供的接口来解决一些分布式应用中的实际问题
二.zookeeper的典型应用场景
1.数据发布/订阅
数据发布/订阅,顾名思义就是一方把数据发布出来,另一方通过某种手段可以得到这些数据
通常发布订阅有两种方式:推模式和拉模式,推模式一般是服务器主动向客户端推送信息,拉模式客户端主动去服务器获取数据(通常采用定时轮询的方式)
zookeeper是采用两种方式结合
发布者将数据发布到ZK集群节点上,订阅者通过一定的方法告诉服务器,我对哪个节点的数据感兴趣,那服务器在这些节点的数据发生变化时,就通知客户端,客户端得到通知后可以去服务器获取数据信息
2.负载均衡
------------------>DB
|
|
client------------------->zookeeper------------------>DB
|
|
------------------>DB
A.首先DB在启动的时候先把自己在ZK上注册成一个临时节点,ZK的节点后面我们会讲到两种,一种是永久节点,一类是临时节点,临时节点在服务器出现问题的时候,节点会自动的从ZK上删除,那么这样ZK上的服务器列表就是最新可用的列表
B.客户端在需要读写数据库的时候,首先他去zookeeper得到所有可用的DB的连接信息(一张列表)
C.客户端随机选择一个与之建立连接
D.当客户端发现连接不可用的时候可再次从ZK上获取可用的DB连接信息,当然也可以在获取的那个列表里移除掉不可用的连接后再随机选择一个DB与之连接
3.命名服务
顾名思义,就是提供名称的服务,例如数据库表ID,一般用的比较多的有两种ID,一种是自动增长的ID,一种是UUID,两种ID各自都有缺陷,自动增长的ID局限在单库单表中使用,不能在分布式中使用,UUID可以再分布式中使用,但是由于ID没有规律难以理解,
我们可以借用ZK来生成一个顺序增长,可以在集群环境下使用的,命名易于理解的ID
4.分布式协调/通知
心跳检测
在分布式系统中,我们常常需要知道某个机器是否可用,传统开发中,可以通过ping某个主机来实现,ping得通说明对方是可用的,相反是不可用的,ZK中我们让所有的机器都注册一个临时节点,我们判断一个机器是否可用,我们只要判断这个节点在ZK中是否存在
就可以了,不需要直接去连接需要检查的机器,降低系统的复杂度