《从Paxos到ZooKeeper》第七章总结三:ZooKeeper技术内幕之客户端

3 客户端

核心组件:
在这里插入图片描述
整体结构:
在这里插入图片描述
初始化和启动过程大体分为3个步骤:
在这里插入图片描述

3.1 一次会话的创建过程

在这里插入图片描述
接下来使用文字来解析流程图:分为三个阶段

  • 初始化阶段:ZooKeeper、Watcher、HostProvider、ClientCnxn、SendThread、EventThread
    在这里插入图片描述
  • 会话创建阶段
    在这里插入图片描述
  • 响应处理阶段
    在这里插入图片描述
    接下来讲解具体组件

3.2 服务器地址列表

服务器列表是一个使用英文状态逗号分隔的多个IP地址和端口的字符串,如"
192.168.0.1:2181,192.168.0.2:2181,192.168.0.3:2181

客户端对服务器地址列表进行的封装:
在这里插入图片描述
ConnectStringParser作用:
在这里插入图片描述
针对其作用进行讲解:3.2.1、3.2.2

3.2.1 chroot:客户端隔离命令空间

含义:
在这里插入图片描述
作用:
在这里插入图片描述

3.2.2 HostProvider:客户端的服务器地址列表管理器

HostProvider是一个接口:
在这里插入图片描述
InetSocketAddress:封装了服务器地址和相应的端口,以ArrayList的形式保存到ConnectStringParser.serverAdderss属性中;未被解析,需要到HostProvider中进行解析

HostProvider的实现必须满足以下三要素:
在这里插入图片描述

  • 默认实现:StaticHostProvider
    在这里插入图片描述
    解析服务器地址:
    在这里插入图片描述
    获取可用的服务器地址:类似“Round Robin”调度策略
    在这里插入图片描述
    即ZooKeeper客户端连接服务器时,采用先打散后顺序的方式从服务器列表中选择服务器机器

例子:
在这里插入图片描述

  • 自实现HostProvoder需求
    在这里插入图片描述
    在这里插入图片描述

3.3 ClientCnxn:网络IO

ClientCnxn是ZooKeeper客户端的核心工作累,负责维护客户端与服务端之间的网络连接并进行一系列网络通信

内部工作原理涉及Packet、outgoingQueue、pendingQueue、ClientCnxnSocket等

3.3.1 Packet

Packet是ClientCnxn内部定义的一个对协议层的封装,作为请求与响应的载体,包含了最基本的请求体、响应头、请求体、响应体、节点路径、注册的Wacther等信息:
在这里插入图片描述
网络传输中,只会序列化requestHeader、request和readOnly三个属性,节约网络资源和提高速度

3.3.2 outgoingQueue和pendingQueue

在这里插入图片描述

3.3.3 ClientCnxnSocket:底层Socket通信层

主要负责对请求的发送和响应的接收过程
在这里插入图片描述

  • 请求发送
    在这里插入图片描述
    可发送的Packet:
    在这里插入图片描述
    请求发送完毕之后,会立即将该Packet保存到pendingQueue中,以便等待服务端响应返回后进行相应的处理

  • 响应接收

客户端获取到来自服务端的完整响应数据后,根据不同的客户端请求类型,进行不同的处理:
在这里插入图片描述
最后,会在finishPacket方法中处理Watcher注册等逻辑

3.3.4 SendThread

是客户端ClientCnxn内部一个核心的IO调用线程,用于管理客户端和服务端之间的所有网络IO操作:
在这里插入图片描述

3.3.5 EventThread

是客户端ClientCnxn内部另一个核心的IO调用线程,负责客户端的事件处理,并触发客户端注册的Wacther监听

工作机制:使用waitingEvents队列
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值