|
58 | 58 |
|
59 | 59 | 正式介绍 ZooKeeper 之前,我们先来看看 ZooKeeper 的由来,还挺有意思的。
|
60 | 60 |
|
61 |
| -下面这段内容摘自《从 Paxos 到 ZooKeeper 》第四章第一节,推荐大家阅读以下: |
| 61 | +下面这段内容摘自《从 Paxos 到 ZooKeeper 》第四章第一节,推荐大家阅读一下: |
62 | 62 |
|
63 | 63 | > ZooKeeper 最早起源于雅虎研究院的一个研究小组。在当时,研究人员发现,在雅虎内部很多大型系统基本都需要依赖一个类似的系统来进行分布式协调,但是这些系统往往都存在分布式单点问题。所以,雅虎的开发人员就试图开发一个通用的无单点问题的分布式协调框架,以便让开发人员将精力集中在处理业务逻辑上。
|
64 | 64 | >
|
@@ -105,24 +105,24 @@ _破音:拿出小本本,下面的内容非常重要哦!_
|
105 | 105 |
|
106 | 106 | ### 3.1. Data model(数据模型)
|
107 | 107 |
|
108 |
| -ZooKeeper 数据模型采用层次化的多叉树形结构,每个节点上都可以存储数据,这些数据可以是数字、字符串或者是二级制序列。并且。每个节点还可以拥有 N 个子结点,最上层是根节点以“/”来代表。每个数据节点在 ZooKeeper 中被称为 **znode **,它是 ZooKeeper 中数据的最小单元。并且,每个 znode 都一个唯一的路径标识。 |
| 108 | +ZooKeeper 数据模型采用层次化的多叉树形结构,每个节点上都可以存储数据,这些数据可以是数字、字符串或者是二级制序列。并且。每个节点还可以拥有 N 个子节点,最上层是根节点以“/”来代表。每个数据节点在 ZooKeeper 中被称为 **znode**,它是 ZooKeeper 中数据的最小单元。并且,每个 znode 都一个唯一的路径标识。 |
109 | 109 |
|
110 |
| -强调一句:**ZooKeeper 主要是用来协调服务的,而不是用来存储业务数据的,所以不要放比较大的数据在 znode 上,ZooKeeper 给出的上线是每个结点的数据大小最大是 1M。** |
| 110 | +强调一句:**ZooKeeper 主要是用来协调服务的,而不是用来存储业务数据的,所以不要放比较大的数据在 znode 上,ZooKeeper 给出的上限是每个结点的数据大小最大是 1M。** |
111 | 111 |
|
112 | 112 | 从下图可以更直观地看出:ZooKeeper 节点路径标识方式和 Unix 文件系统路径非常相似,都是由一系列使用斜杠"/"进行分割的路径表示,开发人员可以向这个节点中写人数据,也可以在节点下面创建子节点。这些操作我们后面都会介绍到。
|
113 | 113 |
|
114 | 114 | 
|
115 | 115 |
|
116 | 116 | ### 3.2. znode(数据节点)
|
117 | 117 |
|
118 |
| -介绍了 ZooKeeper 树形数据模型之后,我们知道每个数据节点在 ZooKeeper 中被称为 **znode **,它是 ZooKeeper 中数据的最小单元。你要存放的数据就放在上面,是你使用 ZooKeeper 过程中经常需要解除到的一个概念。 |
| 118 | +介绍了 ZooKeeper 树形数据模型之后,我们知道每个数据节点在 ZooKeeper 中被称为 **znode**,它是 ZooKeeper 中数据的最小单元。你要存放的数据就放在上面,是你使用 ZooKeeper 过程中经常需要接触到的一个概念。 |
119 | 119 |
|
120 | 120 | #### 3.2.1. znode 4种类型
|
121 | 121 |
|
122 | 122 | 我们通常是将 znode 分为 4 大类:
|
123 | 123 |
|
124 | 124 | - **持久(PERSISTENT)节点** :一旦创建就一直存在即使 ZooKeeper 集群宕机,直到将其删除。
|
125 |
| -- **临时(EPHEMERAL)节点** :临时节点的生命周期是与 **客户端会话(session)** 绑定的,**会话消失则节点消失** 。并且,临时节点 **只能做叶子节点** ,不能创建子节点。 |
| 125 | +- **临时(EPHEMERAL)节点** :临时节点的生命周期是与 **客户端会话(session)** 绑定的,**会话消失则节点消失** 。并且,**临时节点只能做叶子节点** ,不能创建子节点。 |
126 | 126 | - **持久顺序(PERSISTENT_SEQUENTIAL)节点** :除了具有持久(PERSISTENT)节点的特性之外, 子节点的名称还具有顺序性。比如 `/node1/app0000000001` 、`/node1/app0000000002` 。
|
127 | 127 | - **临时顺序(EPHEMERAL_SEQUENTIAL)节点** :除了具备临时(EPHEMERAL)节点的特性之外,子节点的名称还具有顺序性。
|
128 | 128 |
|
@@ -173,7 +173,7 @@ Stat 类中包含了一个数据节点的所有状态信息的字段,包括事
|
173 | 173 |
|
174 | 174 | ### 3.3. 版本(version)
|
175 | 175 |
|
176 |
| -在前面我们已经提到,ZooKeeper 的每个 znode 上都会存储数据,对应于每个 znode,ZooKeeper 都会为其维护一个叫作 **Stat** 的数据结构,Stat 中记录了这个 znode 的三个数据版本: |
| 176 | +在前面我们已经提到,对应于每个 znode,ZooKeeper 都会为其维护一个叫作 **Stat** 的数据结构,Stat 中记录了这个 znode 的三个相关的版本: |
177 | 177 |
|
178 | 178 | - **dataVersion** :当前 znode 节点的版本号
|
179 | 179 | - **cversion** : 当前 znode 子节点的版本
|
@@ -277,10 +277,10 @@ ZAB(ZooKeeper Atomic Broadcast 原子广播) 协议是为分布式协调服
|
277 | 277 |
|
278 | 278 | ZAB 协议包括两种基本的模式,分别是
|
279 | 279 |
|
280 |
| -- **崩溃恢复** :当整个服务框架在启动过程中,或是当 Leader 服务器出现网络中断、崩溃退出与重启等异常情况时,ZAB 协议就会进人恢复模式并选举产生新的Leader服务器。当选举产生了新的 Leader 服务器,同时集群中已经有过半的机器与该Leader服务器完成了状态同步之后,ZAB协议就会退出恢复模式。其中,**所谓的状态同步是指数据同步,用来保证集群中存在过半的机器能够和Leader服务器的数据状态保持一致**。 |
281 |
| -- **消息广播** :**当集群中已经有过半的Follower服务器完成了和Leader服务器的状态同步,那么整个服务框架就可以进人消息广播模式了。** 当一台同样遵守ZAB协议的服务器启动后加人到集群中时,如果此时集群中已经存在一个Leader服务器在负责进行消息广播,那么新加人的服务器就会自觉地进人数据恢复模式:找到Leader所在的服务器,并与其进行数据同步,然后一起参与到消息广播流程中去。 |
| 280 | +- **崩溃恢复** :当整个服务框架在启动过程中,或是当 Leader 服务器出现网络中断、崩溃退出与重启等异常情况时,ZAB 协议就会进入恢复模式并选举产生新的Leader服务器。当选举产生了新的 Leader 服务器,同时集群中已经有过半的机器与该Leader服务器完成了状态同步之后,ZAB协议就会退出恢复模式。其中,**所谓的状态同步是指数据同步,用来保证集群中存在过半的机器能够和Leader服务器的数据状态保持一致**。 |
| 281 | +- **消息广播** :**当集群中已经有过半的Follower服务器完成了和Leader服务器的状态同步,那么整个服务框架就可以进入消息广播模式了。** 当一台同样遵守ZAB协议的服务器启动后加入到集群中时,如果此时集群中已经存在一个Leader服务器在负责进行消息广播,那么新加入的服务器就会自觉地进入数据恢复模式:找到Leader所在的服务器,并与其进行数据同步,然后一起参与到消息广播流程中去。 |
282 | 282 |
|
283 |
| -关于 **ZAB 协议&Paxos算法** 需要讲和理解的东西太多了,说实话,笔主到现在不太清楚这俩兄弟的具体原理和实现过程。推荐阅读下面两篇文章: |
| 283 | +关于 **ZAB 协议&Paxos算法** 需要讲和理解的东西太多了,具体可以看下面这两篇文章: |
284 | 284 |
|
285 | 285 | - [图解 Paxos 一致性协议](http://codemacro.com/2014/10/15/explain-poxos/)
|
286 | 286 | - [Zookeeper ZAB 协议分析](https://dbaplus.cn/news-141-1875-1.html)
|
|
0 commit comments