Zookeeper的简介
起源
- Zookeeper最早起源于雅虎研究院的一个研究小组,在当时研究人员发现在雅虎内部很多软件都依赖一个系统进行协调。但是这样的协调系统往往都存在单点问题。
- 所以雅虎开发人员开发了一个通用的无单点问题的分布式协同服务系统,这就是Zookeeper。
- 所有的框架理念的出现都是源于解决现有系统的不足。
什么是Zookeeper?
- Zookeeper是一个开源的分布式协同服务系统。Zookeeper的设计目标是将复杂且容易出错的分布式协同服务封装起来,抽象出一个高效可靠的原语集,并以一系列的简单接口提供给使用者进行使用。
经典的应用场景
- 配置管理:
- DNS服务:
- 组成员管理:
- 各种分布式锁:
- 以下是具体的应用:
- Hodoop: 使用Zookeeper做Namenode的高可用。
- Hbase: 保证集群中只有一个master,保存集群中的RegionServer列表等
- Kafka: 集群成员的管理,controller节点选举。
Zookeeper不是万能的,以下场景是不适用
- 存储大文件数据: 只能存储和分布式协调相关的信息,如果存储大容量key-value数据可以先数据库或者Nosql进行存储。
Zookeeper的数据模型
- Zookeeper的数据模型是层次模型。层次模型常见于文件系统。
- 层次模型和Key-Value模型是两种主流的数据模型
- Zookeeper的层次模型叫做data tree 。Data tree的每个节点叫做znode。不同于文件系统每个节点可以保持数据。每个节点都有一个版本好。版本号从0开始计数。
data tree详解
- Zookeeper对外提供一个用来访问data tree的简化文件系统APi
- 使用UNIX风格的路径名来定义znode,例如/A/X 标识znodeA的子节点X
- znode的数据只支持全量的写入和读取没有像通用文件系统那样支持部分写入或者读取。
- data tree 的所有的api 都是wait-free的。正在执行中的API调用不会影响其他API的完成,相互独立的互不影响。
- data tree的API都是对文件系统的wait-free操作,不直接提供锁资源的分布式协同机制。但是data tree的api非常强大,可以用来实现多种分布式协同机制。
znode的分类(4种)
- 一个znode可以是持久性的,也可以是临时性的。
- 持久性的znode(PRESISTENT): 这样的znode在创建之后即使发生Zookeeper集群的宕机或者client宕机也不会丢失
- 临时性znode(EPHEMERAL): client宕机或者client在指定超时时间内没有给Zookeeper集群发消息,这样znode就会消失。
- znode也可以是顺序性的,每个熟悉的znode关联一个唯一的单调递增的整数。这个单调递增整数是znode名字的后缀,如果上面两种znode具备顺序性。又可以有以下分类。
- 持久顺序的znode: znode除了具备持久性特点之外,znode的名字还具备顺序性。
- 临时顺序性: znode除了具备临时znode的特点之外,znode的名字还具备顺序性。
层次模型的优点:
- 文件系统的树形结构便于表达数据之间的层次关系
- 文件系统的熟悉结构便于为不同的应用分配独立的命名空间
Zookeeper使用方式?
- 如果要使用Zookeeper服务我们的应用需要引用Zookeeper的客户端和Zookeeper的集群进行连接使用。
- 本质上是client-server的架构
- 如果文章有帮助到你欢迎关注微信公众号《后端学长》