![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
ZooKeeper 实现
文章平均质量分 93
ZooKeeper
槑!
这个作者很懒,什么都没留下…
展开
-
【ZooKeeper】请求处理
1 会话创建请求ZooKeeper 服务端对于会话创建的处理,大体可以分为请求接收、会话创建、预处理、 事务处理、事务应用和会话响应 6 大环节,其大体流程如图 7-39 所示。请求接收I/O 层接收来自客户端的请求。在 ZooKeeper 中, NIOServerCnxn 实例维护每一个客户端连接,客户端与服务 端的所有通信都是由 NIOServerCnxn 负责的——其负责统一接收来自客户端的 所有请求,并将请求内容从底层网络 I/O 中完整地读取出来。判断是否是客户端“会话创建”原创 2021-05-04 00:06:57 · 533 阅读 · 0 评论 -
【ZooKeeper】各服务器角色处理链
1 LeaderLeader 服务器是整个 ZooKeeper 集群工作机制中的核心,其主要工作有以下两个。事务请求的唯一调度和处理者,保证集群事务处理的顺序性。集群内部各服务器的调度者。请求处理链使用责任链模式来处理每一个客户端请求是 ZooKeeper 的一大特色。在服务 器启动过程讲解中,我们已经提到,在每一个服务器启动的时候,都会进行请求处理链 的初始化, Leader服务器的请求处理链如图所示。从图中可以看到,从 PrepRequestProcessor 到 FinalRe原创 2021-05-04 00:06:40 · 277 阅读 · 0 评论 -
【ZooKeeper】Leader 选举实现细节
Leader 选举的实现细节我们介绍了整个 Leader 选举的算法设计。从算法复杂度来说, FastLeaderElection算法的设计并不复杂,但在真正的实现过程中,对于一个需要应用在 生产环境的产品来说,还是有很多实际问题需要解决。在本节中,我们就来看看 ZooKeeper 中对 FastLeaderElection 的实现。服务器状态为了能够清楚地对 ZooKeeper 集群中每台机器的状态进行标识,在 org.apache, zookeeper. server.quorum.Qu原创 2021-05-03 18:29:05 · 226 阅读 · 1 评论 -
【ZooKeeper】Leader 选举
1 Leader 选举概述Leader 选举是 ZooKeeper 中最重要的技术之一,也是保证分布式数据一致性的关键所在。 在本节中,我们将先从整体上来对 ZooKeeper 的 Leader 选举进行介绍。服务器启动时期的 Leader 选举在我们讲解 Leader 选举的时候,需要注意的一点是,隐式条件便是 ZooKeeper 的集群规 模至少是2 台机器,这里我们以 3 台机器组成的服务器集群为例。在服务器集群初始化 阶段,当有一台服务器(我们假设这台机器的 myid 为 1, 因此称其为 S原创 2021-05-03 18:28:01 · 235 阅读 · 0 评论 -
【ZooKeeper】数据初始化及同步
数据初始化在 ZooKeeper 服务器启动期间,首先会进行数据初始化工作,用于将存储在磁盘上的数 据文件加载到 ZooKeeper 服务器内中。初始化流程首先我们先从整体上来看 ZooKeeper 的数据初始化过程,图 7-48 展示了数据的初始化 流程。数据的初始化工作,其实就是从磁盘中加载数据的过程,主要包括了从快照文件中加载 快照数据和根据事务日志进行数据订正两个过程。初始化 FileTxnSnapLog 。FileTxnSnapLog 是 ZooKeeper 事务日志和快照数据原创 2021-05-03 18:26:04 · 707 阅读 · 0 评论 -
【ZooKeeper】服务器启动
本节将向读者介绍 ZooKeeper 服务器的启动过程,下面先从单机版的服务器开始介绍。1 单机版服务器启动ZooKeeper 服务器的启动,大体可以分为以下五个主要步骤:配置文件解析、初始化数 据管理器、初始化网络 I/O 管理器、数据恢复和对外服务。图所示是单机版 ZooKeeper 服务器的启动流程图。预启动预启动的步骤如下。统一由 QuorumPeerMain 作为启动类。无论是单机版还是集群模式启动 ZooKeeper 服务器,在 zArServercmc/ 和 zkServe原创 2021-05-03 18:23:43 · 309 阅读 · 0 评论 -
【ZooKeeper】会话机制原理
会话 (Session) 是 ZooKeeper 中最重要的概念之一,客户端与服务端之间的任何交互操 作都与会话息息相关,这其中就包括临时节点的生命周期、客户端请求的顺序执行以及 Watcher 通知机制等。我们已经讲解了 ZooKeeper 客户端与服务端之间一次会话创建的大体过 程。以Java 语言为例,简单地说, ZooKeeper 的连接与会话就是客户端通过实例化 ZooKeeper 对象来实现客户端与服务器创建并保持 TCP 连接的过程。在本节中,我们将 从会话状态、会话创建和会话管理等方原创 2021-05-03 18:22:40 · 677 阅读 · 0 评论 -
【ZooKeeper】数据与存储
在 ZooKeeper 中,数据存储分为两部分: 内存数据存储与磁盘数据存储。内存数据我们已经提到, ZooKeeper 的数据模型是一棵树,而从使用角度看, ZooKeeper就像一个内存数据库一样。在这个内存数据库中,存储了整棵树的内容,包 括所有的节点路径、节点数据及其 ACL 信息等, ZooKeeper 会定时将这个数据存储到磁 盘上。接下来我们就一起来看看这棵“树”的数据结构DataTreeDateTree 是 ZooKeeper 内存数据存储的核心,是一个“树”的数据结构,代表了内存原创 2021-05-03 18:21:21 · 1638 阅读 · 1 评论 -
【ZooKeeper】Watcher 原理
Watcher ----- 数据变更的通知ZooKeeper 提供了分布式数据的发布/订阅功能。一个典 型的发布/订阅模型系统定义了一种一对多的订阅关系,能够让多个订阅者同时监听某一 个主题对象,当这个主题对象自身状态变化时,会通知所有订阅者,使它们能够做出相 应的处理。在 ZooKeeper中,引入了 Watcher 机制来实现这种分布式的通知功能。 ZooKeeper 允许客户端向服务端注册一个 Watcher 监听,当服务端的一些指定事件触发 了这个 Watcher, 那么就会向指定客户端发送原创 2021-05-03 18:08:50 · 577 阅读 · 0 评论 -
【ZooKeeper】序列化与协议
ZooKeeper 的客户端和服务端之间会进行一系列的 网络通信以实现数据的传输。对于一个网络通信,首先需要解决的就是对数据的序列化 和反序列化处理,在 ZooKeeper 中,使用了 Jute 这一序列化组件来进行数据的序列化和 反序列化操作。同时,为了实现一个高效的网络通信程序,良好的通信协议设计也是至 关重要的。1 Jute 介绍Jute 是 ZooKeeper 中的序列化组件,最初也是 Hadoop 中的默认序列化组件,其前身是 Hadoop Record IO 中的序列化组件,后来由于原创 2021-05-03 18:07:45 · 390 阅读 · 1 评论 -
【ZooKeeper】客户端实现
客户端是开发人员使用 ZooKeeper 最主要的途径,因此我们有必要对 ZooKeeper 客户端 的内部原理进行详细讲解。 ZooKeeper 的客户端主要由以下几个核心组件组成。ZooKeeper 实例:客户端的入口。ClientWatchManager :客户端 Watcher 管理器。HostProvider :客户端地址列表管理器。ClientCnxn :客户端核心线程,其内部又包含两个线程,即 SendThread 和 EventThread 。前者是一个 I/O 线程,主要负原创 2021-05-03 18:07:09 · 431 阅读 · 0 评论 -
【ZooKeeper】ZooKeeper 系统模型
1 数据模型ZooKeeper 的视图结构和标准的 Unix 文件系统非常类似,但没有引入传统文件系统中目 录和文件等相关概念,而是使用了其特有的“数据节点”概念,我们称之为 ZNode o ZNode 是 ZooKeeper 中数据的最小单元,每个 ZNode 上都可以保存数据,同时还可以挂载子节 点,因此构成了一个层次化的命名空间,我们称之为树。树首先我们来看下图所示的 ZooKeeper 数据节点示意图,从而对 ZooKeeper 上的数据节 点有一个大体上的认识。在 ZooKeeper 中,原创 2021-05-03 18:05:04 · 226 阅读 · 1 评论 -
【ZooKeeper】总体概述
ZooKeeper 介绍ZooKeeper 是什么ZooKeeper 是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实 现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、 Master 选举、分布式锁和分布式队列等功能。ZooKeeper 可以保证如下分布式一致性特性顺序一致性从同一个客户端发起的事务请求,最终将会严格地按照其发起顺序被应用到 ZooKeeper 中去。原子性所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的,也就是说原创 2021-04-28 12:50:41 · 141 阅读 · 0 评论