# zookeeper简介


<!--more-->


## 1.分布式系统定义及⾯临的问题

zk最为主要的使用场景，是作为分布式系统的分布式协同服务

假设有一个5人项目组，将面临以下问题，但由于人脑智能，可以很好应对这些问题，在计算机的世界，这样做是行不通的。因此，分布式系统必须采用合理的方式解决掉以上的问题

![示意图](https://img.zhaojq.top/20260727091724147.png "示意图")

分布式系统的协调工作就是通过某种方式，让每个节点的信息能够同步和共享。这依赖于服务进程之间的通信，通信方式有：

- 通过网络进行信息共享
- 通过共享存储

## 2.ZooKeeper如何解决分布式系统⾯临的问题

ZooKeeper使用的是共享存储。但分布式应用也需要和存储进行网络通信。

![示意图](https://img.zhaojq.top/20260727091724337.png "示意图")



## 3.zk基本概念

Zookeeper是一个开源分布式协调服务，分布式应用程序可以基于它实现诸如数据订阅、发布、负载均衡、命名服务、集群管理、分布式锁和分布式队列等功能

- 集群角色

  最典型就是master/slave模式，而在zk中，引入了Leader、follower、observer三种角色。唯一区别，observer不参与leader选举过程，不参与写操作的**过半写成功**策略，因此observer可以在不影响写性能的情况下提升集群的性能

- 会话

  session指客户端会话，一个客户端连接是指客户端和服务端之间的一个tcp长连接。

- 数据节点 znode

  构成集群的机器，称为机器节点；数据模型中的数据单元，称为数据节点

- 版本

  每个znode，都会维护一个stat数据结构，记录三个数据版本，version(当前版本)、cversion(当前znode子节点版本)、aversion（当前znode的acl版本）

- watcher事件监听器

  允许用户注册一些watcher,并且在一些特定事件触发的时候，zk会将事件通知到感兴趣的客户端

- acl

  采用acl策略来进行权限控制，有如下5种

  Create:创建**子节点**权限

  Read:获取节点数据和子节点列表的权限

  Write:更新节点数据的权限

  Delete:删除**子节点**的权限

  Admin:设置节点acl的权限








