一、概述
对于Zookeeper
的一些理解:
Zookeeper
是一个分布式的,为分布式框架提供服务的框架;Zookeeper
从设计模式的角度看,使用观察者模式,是一套实现了文件系统+通知机制的框架;服务提供者注册到Zookeeper
中,以文件的形式存储,服务消费者订阅服务,当服务发生变更时,Zookeeper
将消息及时通知给消费者。
二、特点
- Zookeeper拥有一个
Leader
,多个Fellower
; - 集群中只要有半数以上节点存活,Zookeeper就能正常工作,所以适合安装奇数台服务器;
- 全局数据一致:每台服务器都保存相同的数据,客户端连接哪个Server,都是一样的;
- 请求顺序执行:客户端的请求按顺序执行;
- 数据更新原子性:要么成功,要么失败;
- 实时性:客户端对于集群的更新,客户端能在极短时间内获取最新的数据;
三、数据结构
与Unix、Hadoop类似,在文件存储上,Zookeeper采用的是树形结构,树上的每一个节点用znode表示,大小只有1M
,也就是说Zookeeper无法存储大文件,只适合存储一些小文件
。
四、应用场景
- 统一命名服务
/
/service
/www.baidu.com
/192.168.0.1
/192.168.0.1
/192.168.0.1
Zookeeper存储的数据是树形结构,如上所示,我们会给关键服务起一个名称,比如www.baidu.com,然后在这个服务的节点下面, 我们可以继续挂载实际提供服务的IP地址。
这就是统一命名服务,通过名称实现抽象的服务和具体实现之间的解耦。
统一配置管理
在Hadoop和Kafka等分布式框架环境下,不同节点间的配置文件是需要保持一致的,以往我们通过编写shell脚本的方式,修改一处配置后,统一分发给集群的其它节点。
现在,我们可以将配置文件交给zookeeper管理,当配置文件发生变更是,zookeeper将自动给client发送提醒消息。
统一集群管理
分布式环境中,需要实时掌握某些节点运行的状态信息,我们可以将状态信息实时写入zookeeper的节点中,这样客户端就可以订阅这个状态信息,做到实时监控。
服务器节点动态上下线
服务器节点动态上下线属于应用层面的,实现原理依然是zookeeper的订阅发现机制。
软负载均衡
在上面的案例中,在www.baidu.com这个节点下,我们可能有很多服务IP,那我们不仅可以只记录服务IP,还可以将某些统计数据加入其中,比如当前的访问量,这样,我们就可以通过判断当前的访问量,实现软负载均衡。