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

相关推荐
初次攀爬者21 小时前
Kafka + ZooKeeper架构基础介绍
后端·zookeeper·kafka
初次攀爬者5 天前
ZooKeeper 实现分布式锁的两种方式
分布式·后端·zookeeper
yumgpkpm6 天前
AI视频生成:Wan 2.2(阿里通义万相)在华为昇腾下的部署?
人工智能·hadoop·elasticsearch·zookeeper·flink·kafka·cloudera
Sheffield6 天前
如果把ZooKeeper按字面意思比作动物园管理员……
elasticsearch·zookeeper·kafka
切糕师学AI8 天前
Apache ZooKeeper 简介
分布式·zookeeper·apache
每天要多喝水10 天前
zookeeper 的使用
分布式·zookeeper·云原生
only-qi13 天前
ZAB 协议深度解析:ZooKeeper 分布式一致性的核心
分布式·zookeeper·zab
java1234_小锋14 天前
Java高频面试题:为什么Zookeeper集群的数目一般为奇数个?
java·zookeeper·java-zookeeper
java1234_小锋15 天前
Java高频面试题:讲一下 ZooKeeper 的持久化机制?
java·zookeeper·java-zookeeper
之歆15 天前
ZooKeeper 分布式协调服务完全指南
分布式·zookeeper·wpf