From d06864ff0f94457d79e20d2cb2f56c4c256b9df8 Mon Sep 17 00:00:00 2001 From: Guide Date: Fri, 17 Mar 2023 19:42:49 +0800 Subject: [PATCH] [docs update]zookeeper content perfection --- docs/database/mysql/mysql-query-cache.md | 8 +- docs/database/mysql/mysql-questions-01.md | 2 +- .../zookeeper/images/curator.png | Bin 6869 -> 0 bytes .../zookeeper/images/watche机制.png | Bin 17207 -> 0 bytes .../zookeeper/images/znode-structure.png | Bin 9478 -> 0 bytes .../zookeeper/images/zookeeper集群.png | Bin 7428 -> 0 bytes .../images/zookeeper集群中的角色.png | Bin 17987 -> 0 bytes .../images/连接ZooKeeper服务.png | Bin 115318 -> 0 bytes .../zookeeper/zookeeper-in-action.md | 4 +- .../zookeeper/zookeeper-intro.md | 95 +++++++++--------- .../zookeeper/zookeeper-plus.md | 62 +++++------- .../images/zookeeper/znode-structure.drawio | 1 + .../images/zookeeper/zookeeper-watcher.drawio | 1 + .../cap&base-theorem.md | 2 +- .../theorem&algorithm&protocol/gossip.md | 32 ++++-- .../paxos-algorithm.md | 2 +- .../raft-algorithm.md | 2 +- docs/java/basis/java-keyword-summary.md | 5 +- 18 files changed, 112 insertions(+), 104 deletions(-) delete mode 100644 docs/distributed-system/distributed-process-coordination/zookeeper/images/curator.png delete mode 100644 docs/distributed-system/distributed-process-coordination/zookeeper/images/watche机制.png delete mode 100644 docs/distributed-system/distributed-process-coordination/zookeeper/images/znode-structure.png delete mode 100644 docs/distributed-system/distributed-process-coordination/zookeeper/images/zookeeper集群.png delete mode 100644 docs/distributed-system/distributed-process-coordination/zookeeper/images/zookeeper集群中的角色.png delete mode 100644 docs/distributed-system/distributed-process-coordination/zookeeper/images/连接ZooKeeper服务.png create mode 100644 docs/distributed-system/images/zookeeper/znode-structure.drawio create mode 100644 docs/distributed-system/images/zookeeper/zookeeper-watcher.drawio diff --git a/docs/database/mysql/mysql-query-cache.md b/docs/database/mysql/mysql-query-cache.md index a0df886f..a1383531 100644 --- a/docs/database/mysql/mysql-query-cache.md +++ b/docs/database/mysql/mysql-query-cache.md @@ -76,10 +76,10 @@ mysql> show variables like '%query_cache%'; 我们这里对 8.0 版本之前`show variables like '%query_cache%';`命令打印出来的信息进行解释。 - **`have_query_cache`:** 该 MySQL Server 是否支持查询缓存,如果是 YES 表示支持,否则则是不支持。 -- **`query_cache_limit`:**MySQL 查询缓存的最大查询结果,查询结果大于该值时不会被缓存。 -- **`query_cache_min_res_unit`:**查询缓存分配的最小块的大小(字节)。当查询进行的时候,MySQL 把查询结果保存在查询缓存中,但如果要保存的结果比较大,超过 `query_cache_min_res_unit` 的值 ,这时候 MySQL 将一边检索结果,一边进行保存结果,也就是说,有可能在一次查询中,MySQL 要进行多次内存分配的操作。适当的调节 `query_cache_min_res_unit` 可以优化内存。 -- **`query_cache_size`:**为缓存查询结果分配的内存的数量,单位是字节,且数值必须是 1024 的整数倍。默认值是 0,即禁用查询缓存。 -- **`query_cache_type`:**设置查询缓存类型,默认为 ON。设置 GLOBAL 值可以设置后面的所有客户端连接的类型。客户端可以设置 SESSION 值以影响他们自己对查询缓存的使用。 +- **`query_cache_limit`:** MySQL 查询缓存的最大查询结果,查询结果大于该值时不会被缓存。 +- **`query_cache_min_res_unit`:** 查询缓存分配的最小块的大小(字节)。当查询进行的时候,MySQL 把查询结果保存在查询缓存中,但如果要保存的结果比较大,超过 `query_cache_min_res_unit` 的值 ,这时候 MySQL 将一边检索结果,一边进行保存结果,也就是说,有可能在一次查询中,MySQL 要进行多次内存分配的操作。适当的调节 `query_cache_min_res_unit` 可以优化内存。 +- **`query_cache_size`:** 为缓存查询结果分配的内存的数量,单位是字节,且数值必须是 1024 的整数倍。默认值是 0,即禁用查询缓存。 +- **`query_cache_type`:** 设置查询缓存类型,默认为 ON。设置 GLOBAL 值可以设置后面的所有客户端连接的类型。客户端可以设置 SESSION 值以影响他们自己对查询缓存的使用。 - **`query_cache_wlock_invalidate`** :如果某个表被锁住,是否返回缓存中的数据,默认关闭,也是建议的。 `query_cache_type` 可能的值(修改 `query_cache_type` 需要重启 MySQL Server): diff --git a/docs/database/mysql/mysql-questions-01.md b/docs/database/mysql/mysql-questions-01.md index 372d6a7e..163c6cb6 100644 --- a/docs/database/mysql/mysql-questions-01.md +++ b/docs/database/mysql/mysql-questions-01.md @@ -228,7 +228,7 @@ InnoDB 的性能比 MyISAM 更强大,不管是在读写混合模式下还是 ## MySQL 索引 -MySQL 索引相关的问题比较多,对于面试和工作都比较重要,于是,我单独抽了一篇文章专门来总结 MySQL 索引相关的知识点和问题: [MySQL 索引详解](./mysql-index.md) 。 +MySQL 索引相关的问题比较多,对于面试和工作都比较重要,于是,我单独抽了一篇文章专门来总结 MySQL 索引相关的知识点和问题: [MySQL 索引详解](https://javaguide.cn/database/mysql/mysql-index.html) 。 ## MySQL 查询缓存 diff --git a/docs/distributed-system/distributed-process-coordination/zookeeper/images/curator.png b/docs/distributed-system/distributed-process-coordination/zookeeper/images/curator.png deleted file mode 100644 index 360993d541c37863f7791b3e83f58401dfabf28e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6869 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 HI{1G8$7svG diff --git a/docs/distributed-system/distributed-process-coordination/zookeeper/images/znode-structure.png b/docs/distributed-system/distributed-process-coordination/zookeeper/images/znode-structure.png deleted file mode 100644 index 0f2c9d6cc44df320ac3dcd80aa59ccdc073c8605..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9478 zcmeHtcTiMIx9=W?Fa&{tA*Ufo6eJ^g$T>6QBw0W*C_z9nNEjqXl_V0B90VmJ86@Wn z5|yZcBA0VKe$V5nx_^B4zV~judVBBcs@=VM_3E|O@7LY6_vO^(5A!?S>Gi7UI?|gqE3x zvWA(Pjg4D;WPD@eSI~b|!DSl&g@7QSMlgs0K!bw7P|#%uKy_sx8u$-W|8-$vfzU9} z!Iv`t9{m>7JlhK z=~^{=e)}br&C2>`aRi_ce}ZvR_P%swIjtEi)o zyVn1zwlZq$GBWF5127p$B5VzBPNRM*TJz^0>Qd2HS#!x2cKg^3@L+8iib|cOD5OrD zxmhd!HAm`O8lyX$dt=_4B{wvj-2rl)Nx~vdquEEFcJErU?V!mRtBS%Y@0{p-{=6>i z+}4`SeO7%zJ^v>2f$qse`m#bA6qxqDwRYdPZTm)#mDg-e3gWu6mk$rkA_0xT)uA;QNRv~kDpOA&T1~3IiO>5`>H4``g zL;5%kgFb_?L|34Vj{Zyf&$tmJ-K+S7MOTjJ>MOAX_yjB>emdsX!W}|J~iw4@-SzSCtl$A>M`r7Qvca4KV*=!NqVgXu!h z&+#JHy$&-~C1x?pPj4>tZ$ID_h(e5R-CTsG0zCNKrW863~e{KINaCejll-elvArv|uQyl|>W){*1HtSx#V9N&7nL z>+u(Q|E6y&`wOMHZz|$cZ@T1{K`L{JKGpxkOV!Z>TJwm>DgIHH=k4ZX29!cwZv)j^ z{)C7nGW-Vs39e7hzZ=^8@xoJg1z*_Tko#xDpSVRM{2}!3mIVKaZt#DD?weOSFhQUz zs`-O`{;(2+21dug1h5EUBxKw?P$D>=fFOdHl%9cKis>&Z0zrW6tUIRmiFN+tFYN>z z(+7+;JoFl}{%613hS9fw7cO2jwnDkOI=0G|K5aonxCK4LUj?DjbfKY(#-Ky)kwXYS zaud?eS-@rL|Le^UgIZs<-F~`r34CpHXrHpM;C4*@Moy0R-!{tIqOS5sOmMys;keYO zD&*VRcN~ErjPqTxy!@T;*5``V13-PcU?M8?D8CW6Qw+n?Q7`Q)5yN%Rw~V&{`YUU? zs{hrAx*ju@MpRS)W|)a2d#jeiKzEj>T$+d1Dx|VY2kOg`Djtbt$(<6D`zrtPF~Pf% zB|!PJ)K^gf;~gjWx_v_P+?Iq%`}ruD7I2FIx}2Y!X9Pe10JDA!?7C~b;m?K)EiqYE z$M=Eje(;OzjIxtjVdGQC&CyFB{e@fcBYC1CDOI7Y2&X;H*9kWe_A$JK&{ZO)wj)r@5`Vb*2-zEoxS)R gbTOKhXi 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 diff --git a/docs/distributed-system/distributed-process-coordination/zookeeper/images/zookeeper集群.png b/docs/distributed-system/distributed-process-coordination/zookeeper/images/zookeeper集群.png deleted file mode 100644 index e6a6e7110552cd2963e4d6517eb1792295a708e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7428 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 LA85VPfFu6{BO2?; diff --git a/docs/distributed-system/distributed-process-coordination/zookeeper/images/zookeeper集群中的角色.png b/docs/distributed-system/distributed-process-coordination/zookeeper/images/zookeeper集群中的角色.png deleted file mode 100644 index fba78b60315439a8cb74ae843fab12516f52a296..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17987 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

!BXe1IXkYiEB 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

!vc{Bmh##EX9L6Pg=*A%EFS70p?E` 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

a#csSitj(qV^n7=&xR}-BsJ?up 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

W+)2p`NpYHR@8(hE(cS{MFw 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 a1HkXRa(?d}$qP^b0000 ZooKeeper 最早起源于雅虎研究院的一个研究小组。在当时,研究人员发现,在雅虎内部很多大型系统基本都需要依赖一个类似的系统来进行分布式协调,但是这些系统往往都存在分布式单点问题。所以,雅虎的开发人员就试图开发一个通用的无单点问题的分布式协调框架,以便让开发人员将精力集中在处理业务逻辑上。 > > 关于“ZooKeeper”这个项目的名字,其实也有一段趣闻。在立项初期,考虑到之前内部很多项目都是使用动物的名字来命名的(例如著名的 Pig 项目),雅虎的工程师希望给这个项目也取一个动物的名字。时任研究院的首席科学家 RaghuRamakrishnan 开玩笑地说:“在这样下去,我们这儿就变成动物园了!”此话一出,大家纷纷表示就叫动物园管理员吧一一一因为各个以动物命名的分布式组件放在一起,雅虎的整个分布式系统看上去就像一个大型的动物园了,而 ZooKeeper 正好要用来进行分布式环境的协调一一于是,ZooKeeper 的名字也就由此诞生了。 -### 2.2. ZooKeeper 概览 +### ZooKeeper 概览 ZooKeeper 是一个开源的**分布式协调服务**,它的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。 > **原语:** 操作系统或计算机网络用语范畴。是由若干条指令组成的,用于完成一定功能的一个过程。具有不可分割性·即原语的执行必须是连续的,在执行过程中不允许被中断。 -**ZooKeeper 为我们提供了高可用、高性能、稳定的分布式数据一致性解决方案,通常被用于实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。** +ZooKeeper 为我们提供了高可用、高性能、稳定的分布式数据一致性解决方案,通常被用于实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。这些功能的实现主要依赖于 ZooKeeper 提供的 **数据存储+事件监听** 功能(后文会详细介绍到) 。 -另外,**ZooKeeper 将数据保存在内存中,性能是非常棒的。 在“读”多于“写”的应用程序中尤其地高性能,因为“写”会导致所有的服务器间同步状态。(“读”多于“写”是协调服务的典型场景)。** +ZooKeeper 将数据保存在内存中,性能是不错的。 在“读”多于“写”的应用程序中尤其地高性能,因为“写”会导致所有的服务器间同步状态。(“读”多于“写”是协调服务的典型场景)。 -### 2.3. ZooKeeper 特点 +另外,很多顶级的开源项目都用到了 ZooKeeper,比如: + +- **Kafka** : ZooKeeper 主要为 Kafka 提供 Broker 和 Topic 的注册以及多个 Partition 的负载均衡等功能。不过,在 Kafka 2.8 之后,引入了基于 Raft 协议的 KRaft 模式,不再依赖 Zookeeper,大大简化了 Kafka 的架构。 +- **Hbase** : ZooKeeper 为 Hbase 提供确保整个集群只有一个 Master 以及保存和提供 regionserver 状态信息(是否在线)等功能。 +- **Hadoop** : ZooKeeper 为 Namenode 提供高可用支持。 + +### ZooKeeper 特点 - **顺序一致性:** 从同一客户端发起的事务请求,最终将会严格地按照顺序被应用到 ZooKeeper 中去。 - **原子性:** 所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的,也就是说,要么整个集群中所有的机器都成功应用了某一个事务,要么都没有应用。 - **单一系统映像 :** 无论客户端连到哪一个 ZooKeeper 服务器上,其看到的服务端数据模型都是一致的。 - **可靠性:** 一旦一次更改请求被应用,更改的结果就会被持久化,直到被下一次更改覆盖。 -### 2.4. ZooKeeper 典型应用场景 +### ZooKeeper 应用场景 ZooKeeper 概览中,我们介绍到使用其通常被用于实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。 下面选 3 个典型的应用场景来专门说说: -1. **分布式锁** : 通过创建唯一节点获得分布式锁,当获得锁的一方执行完相关代码或者是挂掉之后就释放锁。 -2. **命名服务** :可以通过 ZooKeeper 的顺序节点生成全局唯一 ID -3. **数据发布/订阅** :通过 **Watcher 机制** 可以很方便地实现数据发布/订阅。当你将数据发布到 ZooKeeper 被监听的节点上,其他机器可通过监听 ZooKeeper 上节点的变化来实现配置的动态更新。 +1. **命名服务** :可以通过 ZooKeeper 的顺序节点生成全局唯一 ID。 +2. **数据发布/订阅** :通过 **Watcher 机制** 可以很方便地实现数据发布/订阅。当你将数据发布到 ZooKeeper 被监听的节点上,其他机器可通过监听 ZooKeeper 上节点的变化来实现配置的动态更新。 +3. **分布式锁** : 通过创建唯一节点获得分布式锁,当获得锁的一方执行完相关代码或者是挂掉之后就释放锁。分布式锁的实现也需要用到 **Watcher 机制** ,我在 [分布式锁详解](https://javaguide.cn/distributed-system/distributed-lock.html) 这篇文章中有详细介绍到如何基于 ZooKeeper 实现分布式锁。 实际上,这些功能的实现基本都得益于 ZooKeeper 可以保存数据的功能,但是 ZooKeeper 不适合保存大量数据,这一点需要注意。 -### 2.5. 有哪些著名的开源项目用到了 ZooKeeper? - -1. **Kafka** : ZooKeeper 主要为 Kafka 提供 Broker 和 Topic 的注册以及多个 Partition 的负载均衡等功能。 -2. **Hbase** : ZooKeeper 为 Hbase 提供确保整个集群只有一个 Master 以及保存和提供 regionserver 状态信息(是否在线)等功能。 -3. **Hadoop** : ZooKeeper 为 Namenode 提供高可用支持。 - -## 3. ZooKeeper 重要概念解读 +## ZooKeeper 重要概念 _破音:拿出小本本,下面的内容非常重要哦!_ -### 3.1. Data model(数据模型) +### Data model(数据模型) ZooKeeper 数据模型采用层次化的多叉树形结构,每个节点上都可以存储数据,这些数据可以是数字、字符串或者是二级制序列。并且。每个节点还可以拥有 N 个子节点,最上层是根节点以“/”来代表。每个数据节点在 ZooKeeper 中被称为 **znode**,它是 ZooKeeper 中数据的最小单元。并且,每个 znode 都一个唯一的路径标识。 @@ -79,22 +77,18 @@ ZooKeeper 数据模型采用层次化的多叉树形结构,每个节点上都 从下图可以更直观地看出:ZooKeeper 节点路径标识方式和 Unix 文件系统路径非常相似,都是由一系列使用斜杠"/"进行分割的路径表示,开发人员可以向这个节点中写入数据,也可以在节点下面创建子节点。这些操作我们后面都会介绍到。 -![ZooKeeper 数据模型](./images/znode-structure.png) +![ZooKeeper 数据模型](https://oss.javaguide.cn/github/javaguide/distributed-system/zookeeper/znode-structure.png) -### 3.2. znode(数据节点) +### znode(数据节点) 介绍了 ZooKeeper 树形数据模型之后,我们知道每个数据节点在 ZooKeeper 中被称为 **znode**,它是 ZooKeeper 中数据的最小单元。你要存放的数据就放在上面,是你使用 ZooKeeper 过程中经常需要接触到的一个概念。 -#### 3.2.1. znode 4 种类型 - 我们通常是将 znode 分为 4 大类: - **持久(PERSISTENT)节点** :一旦创建就一直存在即使 ZooKeeper 集群宕机,直到将其删除。 - **临时(EPHEMERAL)节点** :临时节点的生命周期是与 **客户端会话(session)** 绑定的,**会话消失则节点消失** 。并且,**临时节点只能做叶子节点** ,不能创建子节点。 - **持久顺序(PERSISTENT_SEQUENTIAL)节点** :除了具有持久(PERSISTENT)节点的特性之外, 子节点的名称还具有顺序性。比如 `/node1/app0000000001` 、`/node1/app0000000002` 。 -- **临时顺序(EPHEMERAL_SEQUENTIAL)节点** :除了具备临时(EPHEMERAL)节点的特性之外,子节点的名称还具有顺序性。 - -#### 3.2.2. znode 数据结构 +- **临时顺序(EPHEMERAL_SEQUENTIAL)节点** :除了具备临时(EPHEMERAL)节点的特性之外,子节点的名称还具有顺序性 每个 znode 由 2 部分组成: @@ -121,7 +115,7 @@ dataLength = 0 numChildren = 1 ``` -Stat 类中包含了一个数据节点的所有状态信息的字段,包括事务 ID-cZxid、节点创建时间-ctime 和子节点个数-numChildren 等等。 +Stat 类中包含了一个数据节点的所有状态信息的字段,包括事务 ID(cZxid)、节点创建时间(ctime) 和子节点个数(numChildren) 等等。 下面我们来看一下每个 znode 状态信息究竟代表的是什么吧!(下面的内容来源于《从 Paxos 到 ZooKeeper 分布式一致性原理与实践》,因为 Guide 确实也不是特别清楚,要学会参考资料的嘛! ) : @@ -139,7 +133,7 @@ Stat 类中包含了一个数据节点的所有状态信息的字段,包括事 | dataLength | 数据节点内容长度 | | numChildren | 当前节点的子节点个数 | -### 3.3. 版本(version) +### 版本(version) 在前面我们已经提到,对应于每个 znode,ZooKeeper 都会为其维护一个叫作 **Stat** 的数据结构,Stat 中记录了这个 znode 的三个相关的版本: @@ -147,7 +141,7 @@ Stat 类中包含了一个数据节点的所有状态信息的字段,包括事 - **cversion** : 当前 znode 子节点的版本 - **aclVersion** : 当前 znode 的 ACL 的版本。 -### 3.4. ACL(权限控制) +### ACL(权限控制) ZooKeeper 采用 ACL(AccessControlLists)策略来进行权限控制,类似于 UNIX 文件系统的权限控制。 @@ -168,15 +162,15 @@ ZooKeeper 采用 ACL(AccessControlLists)策略来进行权限控制,类似 - **digest** :用户名:密码认证方式: _username:password_ 。 - **ip** : 对指定 ip 进行限制。 -### 3.5. Watcher(事件监听器) +### Watcher(事件监听器) Watcher(事件监听器),是 ZooKeeper 中的一个很重要的特性。ZooKeeper 允许用户在指定节点上注册一些 Watcher,并且在一些特定事件触发的时候,ZooKeeper 服务端会将事件通知到感兴趣的客户端上去,该机制是 ZooKeeper 实现分布式协调服务的重要特性。 -![watcher机制](./images/watche机制.png) +![ZooKeeper Watcher 机制](https://oss.javaguide.cn/github/javaguide/distributed-system/zookeeper/zookeeper-watcher.png) _破音:非常有用的一个特性,都拿出小本本记好了,后面用到 ZooKeeper 基本离不开 Watcher(事件监听器)机制。_ -### 3.6. 会话(Session) +### 会话(Session) Session 可以看作是 ZooKeeper 服务器与客户端的之间的一个 TCP 长连接,通过这个连接,客户端能够通过心跳检测与服务器保持有效的会话,也能够向 ZooKeeper 服务器发送请求并接受响应,同时还能够通过该连接接收来自服务器的 Watcher 事件通知。 @@ -184,21 +178,21 @@ Session 有一个属性叫做:`sessionTimeout` ,`sessionTimeout` 代表会 另外,在为客户端创建会话之前,服务端首先会为每个客户端都分配一个 `sessionID`。由于 `sessionID`是 ZooKeeper 会话的一个重要标识,许多与会话相关的运行机制都是基于这个 `sessionID` 的,因此,无论是哪台服务器为客户端分配的 `sessionID`,都务必保证全局唯一。 -## 4. ZooKeeper 集群 +## ZooKeeper 集群 为了保证高可用,最好是以集群形态来部署 ZooKeeper,这样只要集群中大部分机器是可用的(能够容忍一定的机器故障),那么 ZooKeeper 本身仍然是可用的。通常 3 台服务器就可以构成一个 ZooKeeper 集群了。ZooKeeper 官方提供的架构图就是一个 ZooKeeper 集群整体对外提供服务。 -![](./images/zookeeper集群.png) +![](https://oss.javaguide.cn/github/javaguide/distributed-system/zookeeper/zookeeper-cluster.png) 上图中每一个 Server 代表一个安装 ZooKeeper 服务的服务器。组成 ZooKeeper 服务的服务器都会在内存中维护当前的服务器状态,并且每台服务器之间都互相保持着通信。集群间通过 ZAB 协议(ZooKeeper Atomic Broadcast)来保持数据的一致性。 **最典型集群模式: Master/Slave 模式(主备模式)**。在这种模式中,通常 Master 服务器作为主服务器提供写服务,其他的 Slave 服务器从服务器通过异步复制的方式获取 Master 服务器最新的数据提供读服务。 -### 4.1. ZooKeeper 集群角色 +### ZooKeeper 集群角色 但是,在 ZooKeeper 中没有选择传统的 Master/Slave 概念,而是引入了 Leader、Follower 和 Observer 三种角色。如下图所示 -![](./images/zookeeper集群中的角色.png) +![ZooKeeper 集群中角色](https://oss.javaguide.cn/github/javaguide/distributed-system/zookeeper/zookeeper-cluser-roles.png) ZooKeeper 集群中的所有机器通过一个 **Leader 选举过程** 来选定一台称为 “**Leader**” 的机器,Leader 既可以为客户端提供写服务又能提供读服务。除了 Leader 外,**Follower** 和 **Observer** 都只能提供读服务。Follower 和 Observer 唯一的区别在于 Observer 机器不参与 Leader 的选举过程,也不参与写操作的“过半写成功”策略,因此 Observer 机器可以在不影响写性能的情况下提升集群的读性能。 @@ -218,14 +212,14 @@ ZooKeeper 集群中的所有机器通过一个 **Leader 选举过程** 来选定 准 leader 才会成为真正的 leader。 4. **Broadcast(广播阶段)** :到了这个阶段,ZooKeeper 集群才能正式对外提供事务服务,并且 leader 可以进行消息广播。同时如果有新的节点加入,还需要对新节点进行同步。 -### 4.2. ZooKeeper 集群中的服务器状态 +### ZooKeeper 集群中的服务器状态 - **LOOKING** :寻找 Leader。 - **LEADING** :Leader 状态,对应的节点为 Leader。 - **FOLLOWING** :Follower 状态,对应的节点为 Follower。 - **OBSERVING** :Observer 状态,对应节点为 Observer,该节点不参与 Leader 选举。 -### 4.3. ZooKeeper 集群为啥最好奇数台? +### ZooKeeper 集群为啥最好奇数台? ZooKeeper 集群在宕掉几个 ZooKeeper 服务器之后,如果剩下的 ZooKeeper 服务器个数大于宕掉的个数的话整个 ZooKeeper 才依然可用。假如我们的集群中有 n 台 ZooKeeper 服务器,那么也就是剩下的服务数必须大于 n/2。先说一下结论,2n 和 2n-1 的容忍度是一样的,都是 n-1,大家可以先自己仔细想一想,这应该是一个很简单的数学问题了。 @@ -234,7 +228,7 @@ ZooKeeper 集群在宕掉几个 ZooKeeper 服务器之后,如果剩下的 ZooK 综上,何必增加那一个不必要的 ZooKeeper 呢? -### 4.4. ZooKeeper 选举的过半机制防止脑裂 +### ZooKeeper 选举的过半机制防止脑裂 **何为集群脑裂?** @@ -246,27 +240,28 @@ ZooKeeper 集群在宕掉几个 ZooKeeper 服务器之后,如果剩下的 ZooK ZooKeeper 的过半机制导致不可能产生 2 个 leader,因为少于等于一半是不可能产生 leader 的,这就使得不论机房的机器如何分配都不可能发生脑裂。 -## 5. ZAB 协议和 Paxos 算法 +## ZAB 协议和 Paxos 算法 Paxos 算法应该可以说是 ZooKeeper 的灵魂了。但是,ZooKeeper 并没有完全采用 Paxos 算法 ,而是使用 ZAB 协议作为其保证数据一致性的核心算法。另外,在 ZooKeeper 的官方文档中也指出,ZAB 协议并不像 Paxos 算法那样,是一种通用的分布式一致性算法,它是一种特别为 Zookeeper 设计的崩溃可恢复的原子消息广播算法。 -### 5.1. ZAB 协议介绍 +### ZAB 协议介绍 ZAB(ZooKeeper Atomic Broadcast 原子广播) 协议是为分布式协调服务 ZooKeeper 专门设计的一种支持崩溃恢复的原子广播协议。 在 ZooKeeper 中,主要依赖 ZAB 协议来实现分布式数据一致性,基于该协议,ZooKeeper 实现了一种主备模式的系统架构来保持集群中各个副本之间的数据一致性。 -### 5.2. ZAB 协议两种基本的模式:崩溃恢复和消息广播 +### ZAB 协议两种基本的模式:崩溃恢复和消息广播 ZAB 协议包括两种基本的模式,分别是 - **崩溃恢复** :当整个服务框架在启动过程中,或是当 Leader 服务器出现网络中断、崩溃退出与重启等异常情况时,ZAB 协议就会进入恢复模式并选举产生新的 Leader 服务器。当选举产生了新的 Leader 服务器,同时集群中已经有过半的机器与该 Leader 服务器完成了状态同步之后,ZAB 协议就会退出恢复模式。其中,**所谓的状态同步是指数据同步,用来保证集群中存在过半的机器能够和 Leader 服务器的数据状态保持一致**。 - **消息广播** :**当集群中已经有过半的 Follower 服务器完成了和 Leader 服务器的状态同步,那么整个服务框架就可以进入消息广播模式了。** 当一台同样遵守 ZAB 协议的服务器启动后加入到集群中时,如果此时集群中已经存在一个 Leader 服务器在负责进行消息广播,那么新加入的服务器就会自觉地进入数据恢复模式:找到 Leader 所在的服务器,并与其进行数据同步,然后一起参与到消息广播流程中去。 -关于 **ZAB 协议&Paxos 算法** 需要讲和理解的东西太多了,具体可以看下面这两篇文章: +关于 **ZAB 协议&Paxos 算法** 需要讲和理解的东西太多了,具体可以看下面这几篇文章: -- [图解 Paxos 一致性协议](http://codemacro.com/2014/10/15/explain-poxos/) +- [Paxos 算法详解](https://javaguide.cn/distributed-system/theorem&algorithm&protocol/paxos-algorithm.html) - [Zookeeper ZAB 协议分析](https://dbaplus.cn/news-141-1875-1.html) +- [Raft 算法详解](https://javaguide.cn/distributed-system/theorem&algorithm&protocol/raft-algorithm.html) -## 6. 总结 +## 总结 1. ZooKeeper 本身就是一个分布式程序(只要半数以上节点存活,ZooKeeper 就能正常服务)。 2. 为了保证高可用,最好是以集群形态来部署 ZooKeeper,这样只要集群中大部分机器是可用的(能够容忍一定的机器故障),那么 ZooKeeper 本身仍然是可用的。 @@ -275,6 +270,6 @@ ZAB 协议包括两种基本的模式,分别是 5. ZooKeeper 有临时节点的概念。 当创建临时节点的客户端会话一直保持活动,瞬时节点就一直存在。而当会话终结时,瞬时节点被删除。持久节点是指一旦这个 znode 被创建了,除非主动进行 znode 的移除操作,否则这个 znode 将一直保存在 ZooKeeper 上。 6. ZooKeeper 底层其实只提供了两个功能:① 管理(存储、读取)用户程序提交的数据;② 为用户程序提供数据节点监听服务。 -## 7. 参考 +## 参考 -1. 《从 Paxos 到 ZooKeeper 分布式一致性原理与实践》 +- 《从 Paxos 到 ZooKeeper 分布式一致性原理与实践》 diff --git a/docs/distributed-system/distributed-process-coordination/zookeeper/zookeeper-plus.md b/docs/distributed-system/distributed-process-coordination/zookeeper/zookeeper-plus.md index b3885208..22a17f8f 100644 --- a/docs/distributed-system/distributed-process-coordination/zookeeper/zookeeper-plus.md +++ b/docs/distributed-system/distributed-process-coordination/zookeeper/zookeeper-plus.md @@ -2,15 +2,7 @@ > [FrancisQ](https://juejin.im/user/5c33853851882525ea106810) 投稿。 -## 1. 好久不见 - -离上一篇文章的发布也快一个月了,想想已经快一个月没写东西了,其中可能有期末考试、课程设计和驾照考试,但这都不是借口! - -一到冬天就懒的不行,望广大掘友督促我🙄🙄✍️✍️。 - -> 文章很长,先赞后看,养成习惯。❤️ 🧡 💛 💚 💙 💜 - -## 2. 什么是ZooKeeper +## 什么是ZooKeeper `ZooKeeper` 由 `Yahoo` 开发,后来捐赠给了 `Apache` ,现已成为 `Apache` 顶级项目。`ZooKeeper` 是一个开源的分布式应用程序协调服务器,其为分布式系统提供一致性服务。其一致性是通过基于 `Paxos` 算法的 `ZAB` 协议完成的。其主要功能包括:配置维护、分布式同步、集群管理、分布式事务等。 @@ -34,7 +26,7 @@ 比如各个分布式组件如何协调起来,如何减少各个系统之间的耦合度,分布式事务的处理,如何去配置整个分布式系统等等。`ZooKeeper` 主要就是解决这些问题的。 -## 3. 一致性问题 +## 一致性问题 设计一个分布式系统必定会遇到一个问题—— **因为分区容忍性(partition tolerance)的存在,就必定要求我们需要在系统可用性(availability)和数据一致性(consistency)中做出权衡** 。这就是著名的 `CAP` 定理。 @@ -44,7 +36,7 @@ 而上述前者就是 `Eureka` 的处理方式,它保证了AP(可用性),后者就是我们今天所要讲的 `ZooKeeper` 的处理方式,它保证了CP(数据一致性)。 -## 4. 一致性协议和算法 +## 一致性协议和算法 而为了解决数据一致性问题,在科学家和程序员的不断探索中,就出现了很多的一致性协议和算法。比如 2PC(两阶段提交),3PC(三阶段提交),Paxos算法等等。 @@ -56,7 +48,7 @@ 而为什么要去解决数据一致性的问题?你想想,如果一个秒杀系统将服务拆分成了下订单和加积分服务,这两个服务部署在不同的机器上了,万一在消息的传播过程中积分系统宕机了,总不能你这边下了订单却没加积分吧?你总得保证两边的数据需要一致吧? -### 4.1. 2PC(两阶段提交) +### 2PC(两阶段提交) 两阶段提交是一种保证分布式系统数据一致性的协议,现在很多数据库都是采用的两阶段提交协议来完成 **分布式事务** 的处理。 @@ -86,7 +78,7 @@ * **阻塞问题**,即当协调者发送 `prepare` 请求,参与者收到之后如果能处理那么它将会进行事务的处理但并不提交,这个时候会一直占用着资源不释放,如果此时协调者挂了,那么这些资源都不会再释放了,这会极大影响性能。 * **数据不一致问题**,比如当第二阶段,协调者只发送了一部分的 `commit` 请求就挂了,那么也就意味着,收到消息的参与者会进行事务的提交,而后面没收到的则不会进行事务提交,那么这时候就会产生数据不一致性问题。 -### 4.2. 3PC(三阶段提交) +### 3PC(三阶段提交) 因为2PC存在的一系列问题,比如单点,容错机制缺陷等等,从而产生了 **3PC(三阶段提交)** 。那么这三阶段又分别是什么呢? @@ -104,13 +96,13 @@ 所以,要解决一致性问题还需要靠 `Paxos` 算法⭐️ ⭐️ ⭐️ 。 -### 4.3. `Paxos` 算法 +### `Paxos` 算法 `Paxos` 算法是基于**消息传递且具有高度容错特性的一致性算法**,是目前公认的解决分布式一致性问题最有效的算法之一,**其解决的问题就是在分布式系统中如何就某个值(决议)达成一致** 。 在 `Paxos` 中主要有三个角色,分别为 `Proposer提案者`、`Acceptor表决者`、`Learner学习者`。`Paxos` 算法和 `2PC` 一样,也有两个阶段,分别为 `Prepare` 和 `accept` 阶段。 -#### 4.3.1. prepare 阶段 +#### prepare 阶段 * `Proposer提案者`:负责提出 `proposal`,每个提案者在提出提案时都会首先获取到一个 **具有全局唯一性的、递增的提案编号N**,即在整个集群中是唯一的编号 N,然后将该编号赋予其要提出的提案,在**第一阶段是只将提案编号发送给所有的表决者**。 * `Acceptor表决者`:每个表决者在 `accept` 某提案后,会将该提案编号N记录在本地,这样每个表决者中保存的已经被 accept 的提案中会存在一个**编号最大的提案**,其编号假设为 `maxN`。每个表决者仅会 `accept` 编号大于自己本地 `maxN` 的提案,在批准提案时表决者会将以前接受过的最大编号的提案作为响应反馈给 `Proposer` 。 @@ -119,7 +111,7 @@ ![paxos第一阶段](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/cd1e5f78875b4ad6b54013738f570943~tplv-k3u1fbpfcp-zoom-1.image) -#### 4.3.2. accept 阶段 +#### accept 阶段 当一个提案被 `Proposer` 提出后,如果 `Proposer` 收到了超过半数的 `Acceptor` 的批准(`Proposer` 本身同意),那么此时 `Proposer` 会给所有的 `Acceptor` 发送真正的提案(你可以理解为第一阶段为试探),这个时候 `Proposer` 就会发送提案的内容和提案编号。 @@ -135,7 +127,7 @@ > 对于 `Learner` 来说如何去学习 `Acceptor` 批准的提案内容,这有很多方式,读者可以自己去了解一下,这里不做过多解释。 -#### 4.3.3. `paxos` 算法的死循环问题 +#### paxos 算法的死循环问题 其实就有点类似于两个人吵架,小明说我是对的,小红说我才是对的,两个人据理力争的谁也不让谁🤬🤬。 @@ -147,15 +139,15 @@ 那么如何解决呢?很简单,人多了容易吵架,我现在 **就允许一个能提案** 就行了。 -## 5. 引出 `ZAB` +## 引出 `ZAB` -### 5.1. `Zookeeper` 架构 +### Zookeeper 架构 作为一个优秀高效且可靠的分布式协调框架,`ZooKeeper` 在解决分布式数据一致性问题时并没有直接使用 `Paxos` ,而是专门定制了一致性协议叫做 `ZAB(ZooKeeper Atomic Broadcast)` 原子广播协议,该协议能够很好地支持 **崩溃恢复** 。 ![Zookeeper架构](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/07bf6c1e10f84fc58a2453766ca6bd18~tplv-k3u1fbpfcp-zoom-1.image) -### 5.2. `ZAB` 中的三个角色 +### ZAB 中的三个角色 和介绍 `Paxos` 一样,在介绍 `ZAB` 协议之前,我们首先来了解一下在 `ZAB` 中三个主要的角色,`Leader 领导者`、`Follower跟随者`、`Observer观察者` 。 @@ -165,7 +157,7 @@ 在 `ZAB` 协议中对 `zkServer`(即上面我们说的三个角色的总称) 还有两种模式的定义,分别是 **消息广播** 和 **崩溃恢复** 。 -### 5.3. 消息广播模式 +### 消息广播模式 说白了就是 `ZAB` 协议是如何处理写请求的,上面我们不是说只有 `Leader` 能处理写请求嘛?那么我们的 `Follower` 和 `Observer` 是不是也需要 **同步更新数据** 呢?总不能数据只在 `Leader` 中更新了,其他角色都没有得到更新吧? @@ -185,7 +177,7 @@ 定义这个的原因也是为了顺序性,每个 `proposal` 在 `Leader` 中生成后需要 **通过其 `ZXID` 来进行排序** ,才能得到处理。 -### 5.4. 崩溃恢复模式 +### 崩溃恢复模式 说到崩溃恢复我们首先要提到 `ZAB` 中的 `Leader` 选举算法,当系统出现崩溃影响最大应该是 `Leader` 的崩溃,因为我们只有一个 `Leader` ,所以当 `Leader` 出现问题的时候我们势必需要重新选举 `Leader` 。 @@ -229,13 +221,13 @@ ![崩溃恢复](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/99cdca39ad6340ae8b77e8befe94e36e~tplv-k3u1fbpfcp-zoom-1.image) -## 6. Zookeeper的几个理论知识 +## Zookeeper的几个理论知识 了解了 `ZAB` 协议还不够,它仅仅是 `Zookeeper` 内部实现的一种方式,而我们如何通过 `Zookeeper` 去做一些典型的应用场景呢?比如说集群管理,分布式锁,`Master` 选举等等。 这就涉及到如何使用 `Zookeeper` 了,但在使用之前我们还需要掌握几个概念。比如 `Zookeeper` 的 **数据模型** 、**会话机制**、**ACL**、**Watcher机制** 等等。 -### 6.1. 数据模型 +### 数据模型 `zookeeper` 数据存储结构与标准的 `Unix` 文件系统非常相似,都是在根节点下挂很多子节点(树型)。但是 `zookeeper` 中没有文件系统中目录与文件的概念,而是 **使用了 `znode` 作为数据节点** 。`znode` 是 `zookeeper` 中的最小数据单元,每个 `znode` 上都可以保存数据,同时还可以挂载子节点,形成一个树形化命名空间。 @@ -264,13 +256,13 @@ * `numChildre`:该节点的子节点个数,如果为临时节点为0。 * `pzxid`:该节点子节点列表最后一次被修改时的事务ID,注意是子节点的 **列表** ,不是内容。 -### 6.2. 会话 +### 会话 我想这个对于后端开发的朋友肯定不陌生,不就是 `session` 吗?只不过 `zk` 客户端和服务端是通过 **`TCP` 长连接** 维持的会话机制,其实对于会话来说你可以理解为 **保持连接状态** 。 在 `zookeeper` 中,会话还有对应的事件,比如 `CONNECTION_LOSS 连接丢失事件` 、`SESSION_MOVED 会话转移事件` 、`SESSION_EXPIRED 会话超时失效事件` 。 -### 6.3. ACL +### ACL `ACL` 为 `Access Control Lists` ,它是一种权限控制。在 `zookeeper` 中定义了5种权限,它们分别为: @@ -280,19 +272,19 @@ * `DELETE`:删除子节点的权限。 * `ADMIN`:设置节点 ACL 的权限。 -### 6.4. Watcher机制 +### Watcher机制 `Watcher` 为事件监听器,是 `zk` 非常重要的一个特性,很多功能都依赖于它,它有点类似于订阅的方式,即客户端向服务端 **注册** 指定的 `watcher` ,当服务端符合了 `watcher` 的某些事件或要求则会 **向客户端发送事件通知** ,客户端收到通知后找到自己定义的 `Watcher` 然后 **执行相应的回调方法** 。 ![watcher机制](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ac87b7cff7b44c63997ff0f6a7b6d2eb~tplv-k3u1fbpfcp-zoom-1.image) -## 7. Zookeeper的几个典型应用场景 +## Zookeeper的几个典型应用场景 前面说了这么多的理论知识,你可能听得一头雾水,这些玩意有啥用?能干啥事?别急,听我慢慢道来。 ![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/dbc1a52b0c304bb093ef08fb1d4c704c~tplv-k3u1fbpfcp-zoom-1.image) -### 7.1. 选主 +### 选主 还记得上面我们的所说的临时节点吗?因为 `Zookeeper` 的强一致性,能够很好地在保证 **在高并发的情况下保证节点创建的全局唯一性** (即无法重复创建同样的节点)。 @@ -306,7 +298,7 @@ 总的来说,我们可以完全 **利用 临时节点、节点状态 和 `watcher` 来实现选主的功能**,临时节点主要用来选举,节点状态和`watcher` 可以用来判断 `master` 的活性和进行重新选举。 -### 7.2. 分布式锁 +### 分布式锁 分布式锁的实现方式有很多种,比如 `Redis` 、数据库 、`zookeeper` 等。个人认为 `zookeeper` 在实现分布式锁这方面是非常非常简单的。 @@ -330,13 +322,13 @@ 具体怎么做呢?其实也很简单,你可以让 **读请求监听比自己小的最后一个写请求节点,写请求只监听比自己小的最后一个节点** ,感兴趣的小伙伴可以自己去研究一下。 -### 7.3. 命名服务 +### 命名服务 如何给一个对象设置ID,大家可能都会想到 `UUID`,但是 `UUID` 最大的问题就在于它太长了。。。(太长不一定是好事,嘿嘿嘿)。那么在条件允许的情况下,我们能不能使用 `zookeeper` 来实现呢? 我们之前提到过 `zookeeper` 是通过 **树形结构** 来存储数据节点的,那也就是说,对于每个节点的 **全路径**,它必定是唯一的,我们可以使用节点的全路径作为命名方式了。而且更重要的是,路径是我们可以自己定义的,这对于我们对有些有语意的对象的ID设置可以更加便于理解。 -### 7.4. 集群管理和注册中心 +### 集群管理和注册中心 看到这里是不是觉得 `zookeeper` 实在是太强大了,它怎么能这么能干! @@ -352,11 +344,9 @@ ![注册中心](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/469cebf9670740d1a6711fe54db70e05~tplv-k3u1fbpfcp-zoom-1.image) -## 8. 总结 +## 总结 -看到这里的同学实在是太有耐心了👍👍👍,如果觉得我写得不错的话点个赞哈。 - -不知道大家是否还记得我讲了什么😒。 +看到这里的同学实在是太有耐心了👍👍👍不知道大家是否还记得我讲了什么😒。 ![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/912c1aa6b7794d4aac8ebe6a14832cae~tplv-k3u1fbpfcp-zoom-1.image) diff --git a/docs/distributed-system/images/zookeeper/znode-structure.drawio b/docs/distributed-system/images/zookeeper/znode-structure.drawio new file mode 100644 index 00000000..7253bacb --- /dev/null +++ b/docs/distributed-system/images/zookeeper/znode-structure.drawio @@ -0,0 +1 @@ +7Vrfc5s4EP5r9HgZQAiLR7DN3fSuc53Lw7VPHRVkzAUjV8iJ3b/+JBC/iYlTO3ZmmszE0mq1Et+utN8SAzjf7H/nZLv+yCKaAsuI9gAugGWZpuHIDyU5lJIZdktBzJNIKzWC++QH1UJDS3dJRPOOomAsFcm2KwxZltFQdGSEc/bUVVuxtLvqlsR0ILgPSTqU/ptEYl1KsTVr5H/QJF5XK5uOfr5vJHyIOdtlej1gwcAJggCXwxtS2dIPmq9JxJ5aIrgEcM4ZE2Vrs5/TVGFbwVbOC54ZrffNaSZeMmE/u//7wyHA8wP9fvhq/vmPTb7/pq3k4lDhQSMJj+4yLtYsZhlJl43UD3f8kSqjpuwUABQ9Q/aaCX8xttUq/1EhDtrxZCeYFK3FJtWjK5YJPWg6sp8Lzh5qV0iU/HKLal/PPnn1GGzHQ3rkcZEOMMJjKo7ozWr/yLinbEMFP8h5nKZEJI/dfRAdgHGt1zhBNrQfTvCJdXWfSFz54bOaf4eq7hdtrugs9p3eQfdu0pf4mr6Ev3x5Tl86P+nLYqrHOTm0FLYsyUTesvxJCaSCznEQ6htcZzi7f9H29E37qL5slDtooqp+lNcHmn31QLvJgHHfQ8Ag5L59wGgEH0m6oxWBCVIWPuSDSGpCQ/n5aZ0Ier8lhX+eJCk8HgarJE3nLGW8sAUjQvEqrMOjGslYRusIeaRc0P3xGBn6VE+wcBd8iPTReGrYnWlonXWL2dnOhXKAcwTp4tO4KOKGgSEOLoi424t2R2Wa60I+m4J8yHvPCfnctpGNLhnk/RRzA5jjKcyHvPZdYQ7x7WHuTmGevW/MkXV7mFcvLjqg97lXFnnq3UQDRkTydY16C2El/0SEoDwrJJYBR7lT2xP4BC41hLYFHBrBrZKdRpEGnMbuZwUMuyZKiqdnHSNH5oShkgMODJ2LJ5nm2BlLondOkxz71miSORseo8kS5mrl8fCEdqqplx7PF5Q6pr5eJmsdNO7wy9Y6yOjFETxe6/Rro57+ZWodE78itG7jNcxFq+gXh5b5zGXyxrE1UUc77lH9C8WWNZYfzpscRpNAL2OskPrVk1vy8uc8ScNGXYDrMuR6SQNeg4x1b4Nbp2IOdivSXHEoF1aSU+nYiLHZwNilKdnYG5VfDLznqVn/Nqzq11Ndjs0JQ5d291iV+7y7w5TkeRJ2ndw9sRPkje4T8bnV/tKkbdlrErXqVHm6E11nT9FXuzp69bflvDKGHNg39LZVnDVSxS0d4BnAd8ESA+wBLCUz9dd3B+ElU6boBtRkStYikiaxuldC6Xkq5b5KwElIUk8PbJIoKvjmGCfohm2fFpwho/fLQFleDzK6MxJf0Hg+lH7un98jdEo5KgA4AEsb+Bh43ojHli7AEPgLpexipV8qy7uqnmUZPzIWUWDNR0zWg3ICUiPahA88VBidA/XNFiMrNOqNIOAtgLxpR2LISVXMfOOyFavWxKLtByjWkrZdu/skGPizQoKAvwTYVhLPBB5Wy3pSzXvpsqxetzRePwouNmAr+9Km6xWrSIlc0VANvADespq1KDYghWaxN9lARUMuJ6t5w9zc8EkKyCZJVdh/oMLnJMlkJWJ8lLhUJ626mtdCbOUYghI4pKi9/KMU8ruYsTilZJvkdyHbFANhXqgGq9K6bLbtI8tvr3DesyzpeecsI2fIzuu3ae3DjNHJh1l2m28ulZd08/UwuPwf \ No newline at end of file diff --git a/docs/distributed-system/images/zookeeper/zookeeper-watcher.drawio b/docs/distributed-system/images/zookeeper/zookeeper-watcher.drawio new file mode 100644 index 00000000..3da7244d --- /dev/null +++ b/docs/distributed-system/images/zookeeper/zookeeper-watcher.drawio @@ -0,0 +1 @@ +7Vjbbts4EP0aPiawRF2oR8m1tgg2wALZxW6fFqzESGxp0aXo2O7XdyhR0S321kjjGou+2JwzQ4qcOTwaG+Hlev+bopvyXuZMIHeR7xF+h1zXiTCGL4McWiQkUQsUiuc2qAce+FdmwYVFtzxn9ShQSyk034zBTFYVy/QIo0rJ3TjsUYrxUze0YDPgIaNijv7Nc122KHHDHn/PeFF2T3YCe76PNPtcKLmt7POQi9MgTVPSute0W8setC5pLncDCK8QXiopdTta75dMmNx2aWvnpUe8z/tWrNLfM4F5H/786wvZ4vv9v3dc8I85ubuxxav1ocsHyyE91pRKl7KQFRWrHk2aMzOz6gKsPuZ3KTcAOgB+YlofbK3pVkuASr0W1gsbVod/zPxbvzM/2OUa491+ZB2s9SgrbRd1ImundM2FCbhjOlGUVzUc515WsouXW5WZGaXWwCjXxzF8QJLMhwmobwspC8Hohte3mVw3jqxuQtPHdnUYDtf33cQ+oc2eSdnRolio7vZxrBId96kqmD4R5z5TB64kk2sGGYJ5igmq+dN4H9TejeI5zk6NlaKHQcBGcsjEYOU/DAAB3TUnlsT2krtkwrVJvB/5p+Jh0O6gswZH6aGGv2dw2R76iYot665kILQlwojlwZet7Bw3dUMpoMUCKrdvqtr5YVSY70xwU1C7HGqZ0zlnV6i/IIbtu5Jr9rChTfV3IKLjyzAkdWBsLsRSCqmatXBOGXnMAK+1kp9Z56lkxa7oBjwxpdn+9B2Yc7absBiTC/vW3vV67HRYOdDicHGc5gOqnc+k8JpU0TlDFYMr4sQPUUX3O1XxCMPeVhWnKucvTquiE56MfxtVdF+tik50RBVrpuDi/wxVXHqe7/n/a1X03WtTRW/GJAetMIJXO4FBgBKMYoJWPiIBIkuzU6qz0hBkwgRIih6X++UyDmpuISp4UYGZQRJhYZyYFHNo5mPrWPM8b+T4JX6NJfpadfNVrHGjSaP2EmuCF1iD34o1/ow17oA1HkpiRJJmkKAkaOiToghcIYo8FKWNK2pifASnIyu0isz0KG5iUhT7xhWvUOwaGhKCktC44gTF6S/yXZB8wZh8vjMn3zPRLkI+8jMauWltB42de3Zndw2kuOjv2x/Syc1bL0xG1PSmlGv3ZWf1rDv7hzKevLXx6ZYwfFW45/1Hwzk9tXeBhjOaCT4etQkkQjHoM0GxY9oEI92pUXgYwLsANN+oOrwUvEbwExStTHAC07GZHgVNcNNudP33L3m/hLzfOBN9x+Hb6TuY/V+jLTX7/5/x6hs= \ No newline at end of file diff --git a/docs/distributed-system/theorem&algorithm&protocol/cap&base-theorem.md b/docs/distributed-system/theorem&algorithm&protocol/cap&base-theorem.md index 3d679322..9d74ccc7 100644 --- a/docs/distributed-system/theorem&algorithm&protocol/cap&base-theorem.md +++ b/docs/distributed-system/theorem&algorithm&protocol/cap&base-theorem.md @@ -1,5 +1,5 @@ --- -title: CAP & BASE理论 +title: CAP & BASE理论详解 category: 分布式 tag: - 分布式协议&算法 diff --git a/docs/distributed-system/theorem&algorithm&protocol/gossip.md b/docs/distributed-system/theorem&algorithm&protocol/gossip.md index 9f710a14..fcf42383 100644 --- a/docs/distributed-system/theorem&algorithm&protocol/gossip.md +++ b/docs/distributed-system/theorem&algorithm&protocol/gossip.md @@ -1,3 +1,10 @@ +--- +title: CAP & BASE理论详解 +category: 分布式 +tag: + - 分布式协议&算法 +--- + ## 背景 在分布式系统中,不同的节点进行数据/信息共享是一个基本的需求。 @@ -12,7 +19,7 @@ Gossip 直译过来就是闲话、流言蜚语的意思。流言蜚语有什么 ![](./images/gossip/gossip.png) -Gossip 协议也叫 Epidemic 协议(流行病协议)或者 Epidemic propagation 算法(疫情传播算法),别名很多。不过,这些名字的特点都具有 **随机传播特性** (联想一下病毒传播、癌细胞扩散等生活中常见的情景),这也正是 Gossip 协议最主要的特点。 +**Gossip 协议** 也叫 Epidemic 协议(流行病协议)或者 Epidemic propagation 算法(疫情传播算法),别名很多。不过,这些名字的特点都具有 **随机传播特性** (联想一下病毒传播、癌细胞扩散等生活中常见的情景),这也正是 Gossip 协议最主要的特点。 Gossip 协议最早是在 ACM 上的一篇 1987 年发表的论文 [《Epidemic Algorithms for Replicated Database Maintenance》](https://dl.acm.org/doi/10.1145/41840.41841)中被提出的。根据论文标题,我们大概就能知道 Gossip 协议当时提出的主要应用是在分布式数据库系统中各个副本节点同步数据。 @@ -24,23 +31,34 @@ Gossip 协议最早是在 ACM 上的一篇 1987 年发表的论文 [《Epidemic ## Gossip 协议应用 -1、我们经常使用的分布式缓存 Redis 的官方集群解决方案(3.0 版本引入) Redis Cluster 就是基于 Gossip 协议来实现集群中各个节点数据的最终一致性。 +**1、Redis Cluster 基于 Gossip 协议通信共享信息** + +我们经常使用的分布式缓存 Redis 的官方集群解决方案(3.0 版本引入) Redis Cluster 就是基于 Gossip 协议来实现集群中各个节点数据的最终一致性。 ![](https://oscimg.oschina.net/oscnet/up-fcacc1eefca6e51354a5f1fc9f2919f51ec.png) -Redis Cluster 中的每个 Redis 节点都维护了一份集群的状态信息,各个节点利用 Gossip 协议传递的信息就是集群的状态信息。 +Redis Cluster 是一个典型的分布式系统,分布式系统中的各个节点需要互相通信。既然要相互通信就要遵循一致的通信协议,Redis Cluster 中的各个节点基于 **Gossip 协议** 来进行通信共享信息,每个 Redis 节点都维护了一份集群的状态信息。 + +Redis Cluster 的节点之间会相互发送多种 Gossip 消息: + +- **MEET** :在 Redis Cluster 中的某个 Redis 节点上执行 `CLUSTER MEET ip port` 命令,可以向指定的 Redis 节点发送一条 MEET 信息,用于将其添加进 Redis Cluster 成为新的 Redis 节点。 +- **PING/PONG** :Redis Cluster 中的节点都会定时地向其他节点发送 PING 消息,来交换各个节点状态信息,检查各个节点状态,包括在线状态、疑似下线状态 PFAIL 和已下线状态 FAIL。 +- **FAIL** :Redis Cluster 中的节点 A 发现 B 节点 PFAIL ,并且在下线报告的有效期限内集群中半数以上的节点将 B 节点标记为 PFAIL,节点 A 就会向集群广播一条 FAIL 消息,通知其他节点将故障节点 B 标记为 FAIL 。 +- ...... 下图就是主从架构的 Redis Cluster 的示意图,图中的虚线代表的就是各个节点之间使用 Gossip 进行通信 ,实线表示主从复制。 ![](./images/gossip/redis-cluster-gossip.png) -2、NoSQL 数据库 Apache Cassandra 集群通过 Gossip 协议来进行动态管理集群节点状态(节点故障检测和恢复)。 +有了 Redis Cluster 之后,不需要专门部署 Sentinel 集群服务了。Redis Cluster 相当于是内置了 Sentinel 机制,Redis Cluster 内部的各个 Redis 节点通过 Gossip 协议互相探测健康状态,在故障时可以自动切换。 -3、服务网格解决方案 Consul 使用 Gossip 协议网络内可靠有效地传输新服务和事件的信息。 +关于 Redis Cluster 的详细介绍,可以查看这篇文章 [Redis 集群详解(付费)](https://javaguide.cn/database/redis/redis-cluster.html) 。 -4、Bitcoin 使用 Gossip 协议来传播交易和区块信息。不过,为了提供更好的隐私保护,CMU 的研究人员提出 **蒲公英协议**。 +**2、NoSQL 数据库 Apache Cassandra 集群通过 Gossip 协议来进行动态管理集群节点状态(节点故障检测和恢复)。** -5、...... +**3、服务网格解决方案 Consul 使用 Gossip 协议网络内可靠有效地传输新服务和事件的信息。** + +**4、Bitcoin 使用 Gossip 协议来传播交易和区块信息。不过,为了提供更好的隐私保护,CMU 的研究人员提出 蒲公英协议。** 还有非常多使用 Gossip 协议的应用,学习 Gossip 协议有助于我们搞清很多技术的底层原理。 diff --git a/docs/distributed-system/theorem&algorithm&protocol/paxos-algorithm.md b/docs/distributed-system/theorem&algorithm&protocol/paxos-algorithm.md index ff392ece..9c6a7acb 100644 --- a/docs/distributed-system/theorem&algorithm&protocol/paxos-algorithm.md +++ b/docs/distributed-system/theorem&algorithm&protocol/paxos-algorithm.md @@ -1,5 +1,5 @@ --- -title: Paxos 算法 +title: Paxos 算法详细 category: 分布式 tag: - 分布式协议&算法 diff --git a/docs/distributed-system/theorem&algorithm&protocol/raft-algorithm.md b/docs/distributed-system/theorem&algorithm&protocol/raft-algorithm.md index e580ed55..ec8c37e4 100644 --- a/docs/distributed-system/theorem&algorithm&protocol/raft-algorithm.md +++ b/docs/distributed-system/theorem&algorithm&protocol/raft-algorithm.md @@ -1,5 +1,5 @@ --- -title: Raft 算法 +title: Raft 算法详解 category: 分布式 tag: - 分布式协议&算法 diff --git a/docs/java/basis/java-keyword-summary.md b/docs/java/basis/java-keyword-summary.md index 09113434..78e0d4a6 100644 --- a/docs/java/basis/java-keyword-summary.md +++ b/docs/java/basis/java-keyword-summary.md @@ -10,7 +10,10 @@ 3. final 修饰的变量是常量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能让其指向另一个对象。 -说明:使用 final 方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的 Java 实现版本中,会将 final 方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升(现在的 Java 版本已经不需要使用 final 方法进行这些优化了)。类中所有的 private 方法都隐式地指定为 final。 +说明:使用 final 方法的原因有两个: + +1. 把方法锁定,以防任何继承类修改它的含义; +2. 效率。在早期的 Java 实现版本中,会将 final 方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升(现在的 Java 版本已经不需要使用 final 方法进行这些优化了)。 ## static 关键字