Skip to content

Commit 12e50c4

Browse files
committed
📝 Writing docs.
1 parent b65e580 commit 12e50c4

4 files changed

Lines changed: 1039 additions & 20 deletions

File tree

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@
3838
- [ ] Memcached
3939
- [分布式服务(rpc)](docs/distributed/rpc)
4040
- [x] [Dubbo](docs/distributed/rpc/dubbo.md) - 基于 Java 开发的高性能 RPC 框架。
41-
- [x] [ZooKeeper](docs/distributed/rpc/ZooKeeper.md) - 一个分布式应用协调系统,已经用到了许多分布式项目中,用来完成统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等工作。
41+
- [x] [ZooKeeper 基础篇](docs/distributed/rpc/zookeeper-basics.md)
42+
- [x] [ZooKeeper 高级篇](docs/distributed/rpc/zookeeper-advanced.md)
4243
- [分布式消息队列(MQ)](docs/distributed/mq)
4344
- [x] [分布式消息队列](docs/distributed/mq/分布式消息队列.md)
4445
- [x] [Kafka](docs/distributed/mq/kafka.md) - 分布式的、可水平扩展的、基于发布/订阅模式的、支持容错的消息系统。

docs/distributed/rpc/ZooKeeper.md renamed to docs/distributed/rpc/zookeeper-advanced.md

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
title: ZooKeeper
2+
title: ZooKeeper 高级篇
33
date: 2018/07/10
44
categories:
55
- 分布式
@@ -8,18 +8,20 @@ tags:
88
- rpc
99
---
1010

11-
# ZooKeeper
11+
# ZooKeeper 高级篇
1212

1313
> ZooKeeper 是一个分布式应用协调系统,已经用到了许多分布式项目中,用来完成统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等工作。
14+
>
15+
> 本文侧重于总结 ZooKeeper 工作原理。
1416
1517
<!-- TOC depthFrom:2 depthTo:3 -->
1618

1719
- [1. 概述](#1-概述)
1820
- [1.1. ZooKeeper 是什么?](#11-zookeeper-是什么)
1921
- [1.2. ZooKeeper 提供了什么?](#12-zookeeper-提供了什么)
2022
- [1.3. Zookeeper 的特性](#13-zookeeper-的特性)
21-
- [工作原理](#工作原理)
22-
- [Server 工作状态](#server-工作状态)
23+
- [1.4. 工作原理](#14-工作原理)
24+
- [1.5. Server 工作状态](#15-server-工作状态)
2325
- [2. 文件系统](#2-文件系统)
2426
- [2.1. znode 类型](#21-znode-类型)
2527
- [3. 通知机制](#3-通知机制)
@@ -29,12 +31,12 @@ tags:
2931
- [4.3. 集群管理(Group Membership)](#43-集群管理group-membership)
3032
- [4.4. 分布式锁](#44-分布式锁)
3133
- [4.5. 队列管理](#45-队列管理)
32-
- [复制](#复制)
33-
- [选举流程](#选举流程)
34-
- [同步流程](#同步流程)
35-
- [5. 资源](#5-资源)
36-
- [5.1. 官方资源](#51-官方资源)
37-
- [5.2. 文章](#52-文章)
34+
- [5. 复制](#5-复制)
35+
- [6. 选举流程](#6-选举流程)
36+
- [7. 同步流程](#7-同步流程)
37+
- [8. 资源](#8-资源)
38+
- [8.1. 官方资源](#81-官方资源)
39+
- [8.2. 文章](#82-文章)
3840

3941
<!-- /TOC -->
4042

@@ -62,13 +64,13 @@ ZooKeeper 作为一个分布式的服务框架,主要用来解决分布式集
6264
- 原子性:更新只能成功或者失败,没有中间状态。
6365
- 顺序性:包括全局有序和偏序两种:全局有序是指如果在一台服务器上消息 a 在消息 b 前发布,则在所有 Server 上消息 a 都将在消息 b 前被发布;偏序是指如果一个消息 b 在消息 a 后被同一个发送者发布,a 必将排在 b 前面。
6466

65-
### 工作原理
67+
### 1.4. 工作原理
6668

6769
ZooKeeper 的核心是原子广播,这个机制保证了各个 Server 之间的同步。实现这个机制的协议叫做 Zab 协议。Zab 协议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。当服务启动或者在领导者崩溃后,Zab 就进入了恢复模式,当领导者被选举出来,且大多数 Server 完成了和 leader 的状态同步以后,恢复模式就结束了。状态同步保证了 leader 和 Server 具有相同的系统状态。
6870

6971
为了保证事务的顺序一致性,ZooKeeper 采用了递增的事务 id 号(zxid)来标识事务。所有的提议(proposal)都在被提出的时候加上了 zxid。实现中 zxid 是一个 64 位的数字,它高 32 位是 epoch 用来标识 leader 关系是否改变,每次一个 leader 被选出来,它都会有一个新的 epoch,标识当前属于那个 leader 的统治时期。低 32 位用于递增计数。
7072

71-
### Server 工作状态
73+
### 1.5. Server 工作状态
7274

7375
每个 Server 在工作过程中有三种状态:
7476

@@ -164,7 +166,7 @@ ZooKeeper 可以处理两种类型的队列:
164166

165167
创建一个父目录 /synchronizing,每个成员都监控标志(Set Watch)位目录 /synchronizing/start 是否存在,然后每个成员都加入这个队列,加入队列的方式就是创建 /synchronizing/member_i 的临时目录节点,然后每个成员获取 / synchronizing 目录的所有目录节点,也就是 member_i。判断 i 的值是否已经是成员的个数,如果小于成员个数等待 /synchronizing/start 的出现,如果已经相等就创建 /synchronizing/start。
166168

167-
## 复制
169+
## 5. 复制
168170

169171
ZooKeeper 作为一个集群提供一致的数据服务,自然,它要在所有机器间做数据复制。
170172

@@ -175,7 +177,7 @@ ZooKeeper 作为一个集群提供一致的数据服务,自然,它要在所
175177

176178
对 ZooKeeper 来说,它采用的方式是写任意。通过增加机器,它的读吞吐能力和响应能力扩展性非常好,而写,随着机器的增多吞吐能力肯定下降(这也是它建立 observer 的原因),而响应能力则取决于具体实现方式,是延迟复制保持最终一致性,还是立即复制快速响应。
177179

178-
## 选举流程
180+
## 6. 选举流程
179181

180182
选举状态:
181183

@@ -198,7 +200,7 @@ ZooKeeper 选举流程基于 Paxos 算法。
198200

199201
述 Leader 选择过程中的状态变化,这是假设全部实例中均没有数据,假设服务器启动顺序分别为:A,B,C。
200202

201-
## 同步流程
203+
## 7. 同步流程
202204

203205
选完 Leader 以后,zk 就进入状态同步过程。
204206

@@ -208,13 +210,13 @@ ZooKeeper 选举流程基于 Paxos 算法。
208210
4. 完成同步后通知 follower 已经成为 uptodate 状态;
209211
5. Follower 收到 uptodate 消息后,又可以重新接受 client 的请求进行服务了。
210212

211-
## 5. 资源
213+
## 8. 资源
212214

213-
### 5.1. 官方资源
215+
### 8.1. 官方资源
214216

215217
| [官网](http://zookeeper.apache.org/) | [官网文档](https://cwiki.apache.org/confluence/display/ZOOKEEPER) | [Github](https://github.com/apache/zookeeper) |
216218

217-
### 5.2. 文章
219+
### 8.2. 文章
218220

219221
[分布式服务框架 ZooKeeper -- 管理分布式环境中的数据](https://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/index.html)
220222
[ZooKeeper 的功能以及工作原理](https://www.cnblogs.com/felixzh/p/5869212.html)

0 commit comments

Comments
 (0)