摘要:
一、前言 前面介绍了ServerCnxn,下面开始学习NIOServerCnxn。 二、NIOServerCnxn源码分析 2.1 类的继承关系 说明:NIOServerCnxn继承了ServerCnxn抽象类,使用NIO来处理与客户端之间的通信,使用单线程处理。 2.2 类的内部类 1. Send 阅读全文
摘要:
一、前言 前面已经分析了请求处理链中的多数类,接着继续分析Zookeeper中的网络通信模块。 二、总体框图 对于网络通信模块,其总体框图如下所示 说明: Stats,表示ServerCnxn上的统计数据。 Watcher,表示时间处理器。 ServerCnxn,表示服务器连接,表示一个从客户端到服 阅读全文
摘要:
一、前言 前面分析了SyncReqeustProcessor,接着分析请求处理链中最后的一个处理器FinalRequestProcessor。 二、FinalRequestProcessor源码分析 2.1 类的继承关系 说明:FinalRequestProcessor只实现了RequestProc 阅读全文
摘要:
一、前言 在分析了PrepRequestProcessor处理器后,接着来分析SyncRequestProcessor,该处理器将请求存入磁盘,其将请求批量的存入磁盘以提高效率,请求在写入磁盘之前是不会被转发到下个处理器的。 二、SyncRequestProcessor源码分析 2.1 类的继承关系 阅读全文
摘要:
一、前言 前面学习了控制结构,下面学习Scala的Class和Properties。 二、Class&Properties 尽管Scala和Java很类似,但是对类的定义、类构造函数、字段可见性控制等则不相同,Java更为冗长,Scala精炼。本章将通过Scala的构造函数工作原理来理解Scala的 阅读全文
摘要:
一、前言 前面学习了请求处理链的RequestProcessor父类,接着学习PrepRequestProcessor,其通常是请求处理链的第一个处理器。 二、PrepRequestProcessor源码分析 2.1 类的继承关系 说明:可以看到PrepRequestProcessor继承了Thre 阅读全文
摘要:
一、前言 前面已经分析了Watcher机制的主要代码,现在接着分析Zookeeper中的请求处理链,其是Zookeeper的主要特点之一。 二、总体框图 对于请求处理链而言,所有请求处理器的父接口为RequestProcessor,其框架图如下 说明: AckRequestProcessor,将前一 阅读全文
摘要:
一、前言 前面学习了Scala的Numbers,接着学习Scala的Control Structures(控制结构)。 二、Control Structures Scala中的控制结构与Java中的颇为类似,但也有所不同,例如,if/then/else控制结构与Java的类似,但是其可以返回值,虽然 阅读全文
摘要:
一、前言 前面已经分析了Watcher机制中的大多数类,本篇对于ZKWatchManager的外部类Zookeeper进行分析。 二、ZooKeeper源码分析 2.1 类的内部类 ZooKeeper的内部类框架图如下图所示 说明: · ZKWatchManager,Zookeeper的Watche 阅读全文
摘要:
一、前言 前面已经学习了Scala中的String,接着学习Scala的Numbers。 二、Numbers 在Scala中,所有的数字类型,如Byte,Char,Double,Float,Int,Long,Short都是对象,这七种数字类型继承AnyVal特质,这七种数字类型与其在Java中有相同 阅读全文
摘要:
一、前言 大数据领域的Spark、Kafka、Summingbird等都是由Scala语言编写而成,相比Java而言,Scala更精炼。由于笔者从事大数据相关的工作,所以有必要好好学习Scala语言,之前也学习过,但是没有记录,所以就会忘记,感觉Scala确实比Java方便精炼很多,下面以Scala 阅读全文
摘要:
一、前言 前面已经分析了Watcher机制中的第一部分,即在org.apache.zookeeper下的相关类,接着来分析org.apache.zookeeper.server下的WatchManager类。 二、WatchManager源码分析 2.1 类的属性 说明:WatcherManager 阅读全文
摘要:
一、前言 前面已经分析了Zookeeper持久话相关的类,下面接着分析Zookeeper中的Watcher机制所涉及到的类。 二、总体框图 对于Watcher机制而言,主要涉及的类主要如下。 说明: Watcher,接口类型,其定义了process方法,需子类实现。 Event,接口类型,Watch 阅读全文
摘要:
一、前言 前面分析了FileSnap,接着继续分析FileTxnSnapLog源码,其封装了TxnLog和SnapShot,其在持久化过程中是一个帮助类。 二、FileTxnSnapLog源码分析 2.1 类的属性 说明:类的属性中包含了TxnLog和SnapShot接口,即对FileTxnSnap 阅读全文
摘要:
一、前言 前篇博文已经分析了FileTxnLog的源码,现在接着分析持久化中的FileSnap,其主要提供了快照相应的接口。 二、SnapShot源码分析 SnapShot是FileTxnLog的父类,接口类型,其方法如下 说明:可以看到SnapShot只定义了四个方法,反序列化、序列化、查找最新的 阅读全文
摘要:
一、前言 前一篇已经分析了序列化,这篇接着分析Zookeeper的持久化过程源码,持久化对于数据的存储至关重要,下面进行详细分析。 二、持久化总体框架 持久化的类主要在包org.apache.zookeeper.server.persistence下,此次也主要是对其下的类进行分析,其包下总体的类结 阅读全文
摘要:
一、前言 在完成了前面的理论学习后,现在可以从源码角度来解析Zookeeper的细节,首先笔者想从序列化入手,因为在网络通信、数据存储中都用到了序列化,下面开始分析。 二、序列化 序列化主要在zookeeper.jute包中,其中涉及的主要接口如下 · InputArchive · OutputAr 阅读全文
摘要:
一、卷首语 回想去年此时的2015年总结,岁月不饶人,一年的时间又这样溜走了。一年的时间,很长,长到可以发生很多事情;很短,短到好多事情都还没来得及发生。 二、回顾 2.1 科研 2015年定的今年争取完成一篇论文,这个目标暂时还没有完成。今年之前已经写完了一篇论文,但是导师看了后觉得质量太差、立意 阅读全文
摘要:
Zookeeper的目录整理如下 1. 【分布式】分布式架构 2. 【分布式】一致性协议 3. 【分布式】Chubby与Paxos 4. 【分布式】Zookeeper与Paxos 5. 【分布式】Zookeeper使用--命令行 6. 【分布式】Zookeeper使用--Java API 7. 【分 阅读全文
摘要:
一、前言 前面分析了Zookeeper对请求的处理,本篇博文接着分析Zookeeper中如何对底层数据进行存储,数据存储被分为内存数据存储于磁盘数据存储。 二、数据与存储 2.1 内存数据 Zookeeper的数据模型是树结构,在内存数据库中,存储了整棵树的内容,包括所有的节点路径、节点数据、ACL 阅读全文
摘要:
一、前言 在前面学习了Zookeeper中服务器的三种角色及其之间的通信,接着学习对于客户端的一次请求,Zookeeper是如何进行处理的。 二、请求处理 2.1 会话创建请求 Zookeeper服务端对于会话创建的处理,大体可以分为请求接收、会话创建、预处理、事务处理、事务应用和会话响应六大环节, 阅读全文
摘要:
一、前言 前一篇已经详细的讲解了Zookeeper的Leader选举过程,下面接着学习Zookeeper中服务器的各个角色及其细节。 二、服务器角色 2.1 Leader Leader服务器是Zookeeper集群工作的核心,其主要工作如下 (1) 事务请求的唯一调度和处理者,保证集群事务处理的顺序 阅读全文
摘要:
一、前言 前面学习了Zookeeper服务端的相关细节,其中对于集群启动而言,很重要的一部分就是Leader选举,接着就开始深入学习Leader选举。 二、Leader选举 2.1 Leader选举概述 Leader选举是保证分布式数据一致性的关键所在。当Zookeeper集群中的一台服务器出现以下 阅读全文
摘要:
一、前言 前面已经了解了Zookeeper会话相关知识点,接着来学习Zookeeper服务端相关细节。 二、服务端 服务端整体架构如下 Zookeeper服务器的启动,大致可以分为以下五个步骤 1. 配置文件解析。 2. 初始化数据管理器。 3. 初始化网络I/O管理器。 4. 数据恢复。 5. 对 阅读全文
摘要:
一、前言 前面分析了Zookeeper客户端的细节,接着继续学习Zookeeper中的一个非常重要的概念:会话。 二、会话 客户端与服务端之间任何交互操作都与会话息息相关,如临时节点的生命周期、客户端请求的顺序执行、Watcher通知机制等。Zookeeper的连接与会话就是客户端通过实例化Zook 阅读全文