MySQL, Oracle, Linux, 软件架构及大数据技术知识分享平台

网站首页 > 精选文章 / 正文

ZooKeeper最全详解(图文全面总结)

2025-05-11 16:05 huorong 精选文章 12 ℃ 0 评论

大家好,我是mikechen。

ZooKeeper是分布式系统的核心组件,下面我全面详解ZooKeeper@mikechen

本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。

Zookeeper

ZooKeeper 是一个开源的分布式 协调服务框架,它是一个为分布式应用提供一致性服务的软件,是雅虎公司创建,是 Google 的 Chubby 一个开源的实现。


Zookeeper设计目标

设计目标主要包含4个:

目标一:简单的数据模型

ZooKeeper使得分布式程序能够通过一个树型结构的名字空间来进行相互协调。

这里所说的树型结构的名字空间,是指ZooKeeper服务器内存中的一个数据模型,其由一系列被称为ZNode的数据节点组成。

目标二:可以构建高可用

一个 ZooKeeper 集群通常由一组机器组成,一般 3~5 台机器就可以组成一个可用的ZooKeeper集群了。

使得分布式单点问题很好解决,而严格的顺序访问控制,使得客户端能够实现一些复杂的同步操作。

目标三:顺序访问

对于来自客户端的每个更新请求,ZooKeeper 都会分配一个全局唯一的递增编号,这个编号反映了所有事务操作的先后顺序。

目标四:构建高性能

由于ZooKeeper将全量数据存储在内存中,并直接服务于客户端的所有非事务请求,因此它尤其适用于以读操作为主的应用场景。


Zookeeper数据模型

Zookeeper 中的所有存储的数据是由 znode 组成的,节点也称为 znode,并以 key/value 形式存储数据。

整体结构类似于 linux 文件系统的模式以树形结构存储,其中根路径以 / 开头。

1.节点构造

如下图所示:

2.节点组成:

图中的每个节点称为一个Znode,每个Znode由3部分组成:

  1. stat:此为状态信息, 描述该Znode的版本权限等信息;
  2. data:与该Znode关联的数据;
  3. children:该Znode下的子节点;


3.节点类型

Znode主要包含4种类型:分别为临时节点、永久节点、序列化节点。

1.临时节点(Ephemeral )

节点的生命周期依赖于创建它们的会话,一旦会话结束,临时节点将被自动删除。

2.永久节点(Persistent )

该节点的生命周期不依赖于会话,并且只有在客户端显示执行删除操作的时候,他们才能被删除。

3.序列化节点(Sequence )

Znode还有一个序列化的特性,如果创建的时候指定的话,该Znode的名字后面会自动追加一个不断增加的序列号。

它的格式为10位数字,没有数值的数位用0补充,例如:0000000001。

4.临时顺序节点

基本特性同临时节点,增加了顺序属性,节点名后边会追加一个由父节点维护的自增整型数字。


Zookeeper工作原理

Zookeeper本身是一个集群结构,有一个leader节点负责写请求,多个follower负责响应读请求,并且在leader节点故障时会自动根据选举机制从剩下的follower中选出新的leader。

1.Zookeeper角色

1.leader

处理所有的事务请求(写请求),可以处理读请求,集群中只能有一个Leader

2. Follower

只能处理读请求,同时作为 Leader的候选节点,即如果Leader宕机,Follower节点要参与到新的Leader选举中,有可能成为新的Leader节点。

3. Observer

Observer:只能处理读请求,不能参与选举。

Zookeeper集群

集群为2N+1台,比如N为1的情况就是3台,为什么是3台而不是2台呢?因为集群需要一半以上的机器可用。

Zookeeper通知Watch

客户端注册监听他关心的目录节点,当目录节点发生变化(数据改变、被删除、子目录节点增加删除)时,Zookeeper会通知客户端。

client端会对某个znode建立一个watcher事件,当该znode发生变化时,zk会主动通知watch这个znode的client,然后client根据znode的变化来做出业务上的改变等。

watch的整体流程如下图所示:

主要流程如下:

1.客户端先向Zookeeper服务端成功注册想要监听的节点状态。

2.同时客户端本地会存储该监听器相关的信息在WatchManager中。

3.当Zookeeper服务端监听的数据状态发生变化时,Zookeeper就会主动通知发送相应事件信息给相关会话客户端,从WatherManager中取出对应Wather对象执行回调逻辑。

以上

本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。

Tags:zookeeper是什么

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言