ZooKeeper 网络通信机制

Posted 郭朝阳@

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZooKeeper 网络通信机制相关的知识,希望对你有一定的参考价值。

<font color=#999AAA ZooKeeper 网络通信机制


Zookeeper 内部的网络通信的具体实现

  • 1、执行选举使用的是: BIO 通信(ServerSocket Socket)
  • 2、ZooKeeper 作为一个 C/S 体系的软件,对外提供服务,是 NIO 实现
  • 3、ZooKeeper 的 C/S 架构也提供了 netty 的实现,但是需要去配置才可以实现。默认是就是 NIO,从性能上来说使用NIO和Netty是一样的,netty只是对NIO进行了封装的框架。

ZooKeeper 内部在 3.4.14 版本以前都是使用的 单 selector 的实现!从 zookeeper-3.5.x 版本往后,采用了 一主(AcceptThread:OP_ACCEPT)多从(SelectorThread: OP_READ 和 OP_WRITE)的多线程 reactor 模式,事实上,真正完全数据读写工作,是一个线程池: WorkerThreaPool 性能得到了极大的提升。

如果你们的ZK集群并发能力不够, 1. 偶尔并发能力不足,可以增加obzerve节点。2. 经常性的并发能力不够增加follwer节点。
注意不是 一味的增加节点,并发量就能提升,可以升级版本试试,性能会有大幅度提升

Java IO

  • 1、BIO JDK-1.1(编码简单,效率低) 阻塞模型
    ZK选举过程中,多个节点之间的相互通信使用的网络通信模型

  • 2、NIO JDK-1.4(效率有提升,编码复杂) 基于reactor实现的异步非阻塞网络通信模型

    通常的IO的选择:
    1、原生NIO
    2、基于NIO实现的网络通信框架:netty

  • 3、AIO JDK-1.7(效率最高,编码复杂度一般) 真正的异步非阻塞通信模型
    几乎不用

NIO 的三大API (不详细介绍NIO,直接谷歌百度资料)
1、Buffer 2、Channel 3、Selector

ZooKeeper 中的通信有两种方式
1、NIO,默认使用 NIO
2、Netty,未来版本

关于 ZooKeeper 中的服务端和客户端

  • 1、服务端:QuorumPeer ===> 启动了 ServerCnxnFactory,启动了NIO服务端,监听了2181端口 ===> 接收到客户端的一个链接请求,则生成一个 ServerCnxn,当该对象创建好之后,会为当前这个客户端建立成功的链接,创建一个 Session 对象。
  • 2、客户端:ZooKeeper ===> 启动和初始化了一个 ClientCnxn(SendThread EventThread) 对象,发送 ConnectRequest 给服务端

两个最重要的 API: C/S 架构模式

  • 1、ServerCnxn 服务端的通信组件: zookeeper集群启动的时候,会初始化 ServerCnxn
  • 2、ClientCnxn 客户端的通信组件: 当编写代码:new ZooKeeper(1,2,3) 底层会初始化一个通信客户端对象

关于客户端和服务端的一个定义:谁发请求,谁就是客户端,谁接收和处理请求,谁就是服务端

  • 1、真正的 client 给 zookeeper 发请求
  • 2、zookeeper 中的 leader 给 follower 发命令
  • 3、zookeeper 中的 follower 给 leader 发请求

总结

后续的原代码中这李涉及的相关类和方法会有详细的注释。

ServerCnxn:org.apache.zookeeper.server.ServerCnxn
在这里插入图片描述

  • Stats,表示ServerCnxn上的统计数据。
  • Watcher,表示事件处理,监听器。
  • ServerCnxn,表示服务器连接,表示一个从客户端到服务器的连接。
  • ClientCnxn,存在于客户端用来执行通信的组件。
  • NettyServerCnxn,基于Netty的连接的具体实现。
  • NIOServerCnxn,基于NIO的连接的具体实现。
  • ServerCnxnFactory, 服务端通信组件的工厂实现 也有两种:NioserverCnxnFactory + NettyServerCnxnFactory

以上是关于ZooKeeper 网络通信机制的主要内容,如果未能解决你的问题,请参考以下文章

Zookeeper Leader选举网络通信

ZooKeeper 序列化机制

zookeeper 做注册中心详细介绍

Zookeeper 与 nginx 作负载均衡对比

Hadoop (HDFS) HA架构通信机制

zookeeper的Leader选举源码解析