网站首页 > 精选文章 / 正文
大家好,我是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部分组成:
- stat:此为状态信息, 描述该Znode的版本权限等信息;
- data:与该Znode关联的数据;
- 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是什么
猜你喜欢
- 2025-05-11 五分钟入门 ZooKeeper
- 2025-05-11 Zookeeper简介
- 2025-05-11 什么是Zookeeper,以及机制详解与实现
- 2025-05-11 Zookeeper最全详解(看这篇就够了)
- 2025-05-11 Zookeeper最全详解(万字图文总结)
- 2025-05-11 带你了解ZooKeeper,是什么?怎么用?