《Zookeeper》从零开始学Zookeeper源码(二)之数据序列化与通信协议

目录

序列化与反序列化

zookeeper的客户端与服务端、服务端与服务端之间会进行一系列的网络通信,在进行数据的传输过程中就涉及到序列化与反序列化,zookeeper使用Jute 作为它的序列化组件,在使用的时候,需要序列化与反序列化的对象实现Record 接口并实现该接口的serialize()deserialize()方法,先看下接口Record

它只有两个方法,分别是serialize()deserialize(),下面以ReplyHeader为例看下它的使用。

    1. 实现接口Record
    1. 创建BinaryOutputArchive
    1. 序列化。上一步中调用BinaryOutputArchivewriteRecord()方法,看下源码:

进入writeRecord()方法调用Record实现类的serialize()方法进行序列化。

    1. 反序列化。创建BinaryInputArchive ,调用Record 实现类的deserialize()方法进行反序列。

以上就是Jute进行序列化与反序列化的基本过程。

通信协议

基于TCP/IP协议,zookeeper实现了自己的通信协议,设计上,客户端与服务端、服务端与服务端之间的网络通信数据结构,对于请求,包含数据总长度、请求头与请求体,对于响应,包含数据总长度、响应头与响应体,如下图。

请求协议:

响应协议:

请求头的数据结构

响应头的数据结构

对于请求体与响应体,不同的请求体和响应体的数据结构是不同的,可以参考/zookeeper-jute/target/generated-sources/java/org/apache/zookeeper/proto该目录下的类。

相关推荐
寒士obj3 天前
分布式组件【ZooKeeper】
微服务·zookeeper
笨蛋少年派3 天前
zookeeper简介
分布式·zookeeper·云原生
007php0076 天前
百度面试题解析:Zookeeper、ArrayList、生产者消费者模型及多线程(二)
java·分布式·zookeeper·云原生·职场和发展·eureka·java-zookeeper
坐吃山猪8 天前
zk02-知识演进
运维·zookeeper·debian
yumgpkpm8 天前
华为鲲鹏 Aarch64 环境下多 Oracle 数据库汇聚操作指南 CMP(类 Cloudera CDP 7.3)
大数据·hive·hadoop·elasticsearch·zookeeper·big data·cloudera
小醉你真好9 天前
16、Docker Compose 安装Kafka(含Zookeeper)
docker·zookeeper·kafka
yumgpkpm10 天前
CMP (类ClouderaCDP7.3(404次编译) )华为鲲鹏Aarch64(ARM)信创环境多个mysql数据库汇聚的操作指南
大数据·hive·hadoop·zookeeper·big data·cloudera
yumgpkpm12 天前
大数据综合管理平台(CMP)(类Cloudera CDP7.3)有哪些核心功能?
hive·hadoop·elasticsearch·zookeeper·big data
回家路上绕了弯15 天前
深入 Zookeeper 数据模型:树形 ZNode 结构的设计与实践
后端·zookeeper
90919322116 天前
SQL关键词标签在数据分析中的应用与实践
zookeeper