@@ -39,7 +39,7 @@ _如果文章有任何需要改善和完善的地方,欢迎在评论区指出
39
39
40
40
ZooKeeper 是一个开源的** 分布式协调服务** ,它的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。
41
41
42
- > ** 原语:** 操作系统或计算机网络用语范畴。是由若干条指令组成的,用于完成一定功能的一个过程。具有不可分割性· 即原语的执行必须是连续的,在执行过程中不允许被中断。
42
+ > ** 原语:** 操作系统或计算机网络用语范畴。是由若干条指令组成的,用于完成一定功能的一个过程。具有不可分割性, 即原语的执行必须是连续的,在执行过程中不允许被中断。
43
43
44
44
ZooKeeper 为我们提供了高可用、高性能、稳定的分布式数据一致性解决方案,通常被用于实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。这些功能的实现主要依赖于 ZooKeeper 提供的 ** 数据存储+事件监听** 功能(后文会详细介绍到) 。
45
45
@@ -57,6 +57,7 @@ ZooKeeper 将数据保存在内存中,性能是不错的。 在“读”多于
57
57
- ** 原子性:** 所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的,也就是说,要么整个集群中所有的机器都成功应用了某一个事务,要么都没有应用。
58
58
- ** 单一系统映像:** 无论客户端连到哪一个 ZooKeeper 服务器上,其看到的服务端数据模型都是一致的。
59
59
- ** 可靠性:** 一旦一次更改请求被应用,更改的结果就会被持久化,直到被下一次更改覆盖。
60
+ - ** 实时性:** 每个客户端的系统视图都是最新的。
60
61
61
62
### ZooKeeper 应用场景
62
63
@@ -76,9 +77,9 @@ _破音:拿出小本本,下面的内容非常重要哦!_
76
77
77
78
### Data model(数据模型)
78
79
79
- ZooKeeper 数据模型采用层次化的多叉树形结构,每个节点上都可以存储数据,这些数据可以是数字、字符串或者是二级制序列。并且。每个节点还可以拥有 N 个子节点,最上层是根节点以“/”来代表。每个数据节点在 ZooKeeper 中被称为 ** znode** ,它是 ZooKeeper 中数据的最小单元。并且,每个 znode 都一个唯一的路径标识 。
80
+ ZooKeeper 数据模型采用层次化的多叉树形结构,每个节点上都可以存储数据,这些数据可以是数字、字符串或者是二级制序列。并且。每个节点还可以拥有 N 个子节点,最上层是根节点以“/”来代表。每个数据节点在 ZooKeeper 中被称为 ** znode** ,它是 ZooKeeper 中数据的最小单元。并且,每个 znode 都有一个唯一的路径标识 。
80
81
81
- 强调一句:** ZooKeeper 主要是用来协调服务的,而不是用来存储业务数据的,所以不要放比较大的数据在 znode 上,ZooKeeper 给出的上限是每个结点的数据大小最大是 1M。**
82
+ 强调一句:** ZooKeeper 主要是用来协调服务的,而不是用来存储业务数据的,所以不要放比较大的数据在 znode 上,ZooKeeper 给出的每个节点的数据大小上限是 1M 。**
82
83
83
84
从下图可以更直观地看出:ZooKeeper 节点路径标识方式和 Unix 文件系统路径非常相似,都是由一系列使用斜杠"/"进行分割的路径表示,开发人员可以向这个节点中写入数据,也可以在节点下面创建子节点。这些操作我们后面都会介绍到。
84
85
@@ -91,7 +92,7 @@ ZooKeeper 数据模型采用层次化的多叉树形结构,每个节点上都
91
92
我们通常是将 znode 分为 4 大类:
92
93
93
94
- ** 持久(PERSISTENT)节点** :一旦创建就一直存在即使 ZooKeeper 集群宕机,直到将其删除。
94
- - ** 临时(EPHEMERAL)节点** :临时节点的生命周期是与 ** 客户端会话(session)** 绑定的,** 会话消失则节点消失** 。并且,** 临时节点只能做叶子节点** ,不能创建子节点。
95
+ - ** 临时(EPHEMERAL)节点** :临时节点的生命周期是与 ** 客户端会话(session)** 绑定的,** 会话消失则节点消失** 。并且,** 临时节点只能做叶子节点** ,不能创建子节点。
95
96
- ** 持久顺序(PERSISTENT_SEQUENTIAL)节点** :除了具有持久(PERSISTENT)节点的特性之外, 子节点的名称还具有顺序性。比如 ` /node1/app0000000001 ` 、` /node1/app0000000002 ` 。
96
97
- ** 临时顺序(EPHEMERAL_SEQUENTIAL)节点** :除了具备临时(EPHEMERAL)节点的特性之外,子节点的名称还具有顺序性
97
98
@@ -215,8 +216,8 @@ ZooKeeper 集群中的所有机器通过一个 **Leader 选举过程** 来选定
215
216
216
217
1 . ** Leader election(选举阶段)** :节点在一开始都处于选举阶段,只要有一个节点得到超半数节点的票数,它就可以当选准 leader。
217
218
2 . ** Discovery(发现阶段)** :在这个阶段,followers 跟准 leader 进行通信,同步 followers 最近接收的事务提议。
218
- 3 . ** Synchronization(同步阶段)** : 同步阶段主要是利用 leader 前一阶段获得的最新提议历史,同步集群中所有的副本。同步完成之后准 leader 才会成为真正的 leader。
219
- 4 . ** Broadcast(广播阶段)** : 到了这个阶段,ZooKeeper 集群才能正式对外提供事务服务,并且 leader 可以进行消息广播。同时如果有新的节点加入,还需要对新节点进行同步。
219
+ 3 . ** Synchronization(同步阶段)** : 同步阶段主要是利用 leader 前一阶段获得的最新提议历史,同步集群中所有的副本。同步完成之后准 leader 才会成为真正的 leader。
220
+ 4 . ** Broadcast(广播阶段)** : 到了这个阶段,ZooKeeper 集群才能正式对外提供事务服务,并且 leader 可以进行消息广播。同时如果有新的节点加入,还需要对新节点进行同步。
220
221
221
222
ZooKeeper 集群中的服务器状态有下面几种:
222
223
0 commit comments