《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该目录下的类。

相关推荐
一叶飘零_sweeeet16 小时前
分布式协调双雄深度拆解:ZooKeeper 与 Nacos 从底层原理到生产实战全指南
分布式·zookeeper·nacos
Volunteer Technology3 天前
zookeeper基础应用与实战二
分布式·zookeeper·云原生
星辰_mya5 天前
ZooKeeper 分布式锁:强一致性下的“排队”哲学
分布式·zookeeper·云原生·面试·分布式锁
中间件XL6 天前
zookeeper原理源码分析系列(一)架构,启动
zookeeper·原理源码分析
阿乐艾官7 天前
【Zookeeper 】
分布式·zookeeper·云原生
yumgpkpm8 天前
OpenClaw(养龙虾) +关于Hadoop hive的Skills(CLoudera CDH、CDP)
大数据·数据仓库·hive·hadoop·分布式·zookeeper·kafka
若水不如远方10 天前
分布式一致性协议(五):殊途同归 —— ZAB 协议与 ZooKeeper 架构
分布式·后端·zookeeper
乐hh11 天前
Hadoop 3.3.5 + Flink 1.15.3 集群完整部署手册(3节点标准版)
java·大数据·hadoop·hdfs·zookeeper·flink·yarn
代码探秘者13 天前
【Redis】告别锁失效:RedLock 与 ZooKeeper 分布式锁原理与实战对比
java·数据结构·redis·后端·python·zookeeper·面试
程序员敲代码吗13 天前
深入解析ZooKeeper在分布式系统中的角色与挑战
linux·分布式·zookeeper