1 Jute概念
ZK客戶端與服務端的網絡通信和數據傳輸,需要首先解決的事數據序列化與反序列化問題。
Jute前身是Hadoop Record IO,後來Hadoop框架採用Avro(跨語言特性好,數據結構豐富,對MR的支持),Record IO就被剝離出來成爲Jute。
Jute對於ZK不是性能瓶頸,因此一直沿用。
2 Jute基礎
2.1 序列化
網絡通信中,基於二進制傳輸數據,這就會涉及到序列化,反序列化過程。
序列化:將內存中的對象轉換成二進制的過程
反序列化:從網絡中接收到的數據轉換成內存中對象的過程
序列化反序列化中還需要定義序列化協議即數據相互變換的機制。
2.2 Jute序列化機制
Jute實現序列化的步驟包括:
構建序列化對象:對象實現Record接口,自定義serialize與deserialize方法
設計序列化器:序列化器接口是OutputArchive,三種實現:BinaryOutputArchive,CsvOutputArchive和XmlOutputArchive,分別對應無特殊格式,有csv格式和有xml格式的數據序列化。
設計反序列化器:反序列化器接口是InputArchive,三種實現:BinaryInputArchive,CsvInputArchive和XmlInputArchive,分別對應無特殊格式,有csv格式和有xml格式的數據序列化。
3 Jute通信協議
請求:請求頭,請求體
響應:響應頭,響應體