Dubbo 支持哪些序列化協議?說一下 Hessian 的數據結構?PB 知道嗎?爲什麼 PB 的效率是最高的?

本博客轉自git項目advancejava

序列化,就是把數據結構或者是一些對象,轉換爲二進制串的過程,而反序列化是將在序列化過程中所生成的二進制串轉換成數據結構或者對象的過程。
在這裏插入圖片描述

dubbo 支持不同的通信協議

• dubbo 協議
默認就是走 dubbo 協議,單一長連接,進行的是 NIO 異步通信,基於 hessian 作爲序列化協議。使用的場景是:傳輸數據量小(每次請求在 100kb 以內),但是併發量很高。
爲了要支持高併發場景,一般是服務提供者就幾臺機器,但是服務消費者有上百臺,可能每天調用量達到上億次!此時用長連接是最合適的,就是跟每個服務消費者維持一個長連接就可以,可能總共就 100 個連接。然後後面直接基於長連接 NIO 異步通信,可以支撐高併發請求。
長連接,通俗點說,就是建立連接過後可以持續發送請求,無須再建立連接。
在這裏插入圖片描述
而短連接,每次要發送請求之前,需要先重新建立一次連接。
在這裏插入圖片描述
• rmi 協議
走 Java 二進制序列化,多個短連接,適合消費者和提供者數量差不多的情況,適用於文件的傳輸,一般較少用。

• hessian 協議
走 hessian 序列化協議,多個短連接,適用於提供者數量比消費者數量還多的情況,適用於文件的傳輸,一般較少用。

• http 協議
走 json 序列化。

• webservice
走 SOAP 文本序列化。

dubbo 支持的序列化協議

dubbo 支持 hession、Java 二進制序列化、json、SOAP 文本序列化多種序列化協議。但是 hessian 是其默認的序列化協議。

說一下 Hessian 的數據結構

Hessian 的對象序列化機制有 8 種原始類型:
• 原始二進制數據
• boolean
• 64-bit date(64 位毫秒值的日期)
• 64-bit double
• 32-bit int
• 64-bit long
• null
• UTF-8 編碼的 string
另外還包括 3 種遞歸類型:
• list for lists and arrays
• map for maps and dictionaries
• object for objects
還有一種特殊的類型:
• ref:用來表示對共享對象的引用。

爲什麼 PB 的效率是最高的?

可能有一些同學比較習慣於 JSON or XML 數據存儲格式,對於 Protocal Buffer 還比較陌生。Protocal Buffer 其實是 Google 出品的一種輕量並且高效的結構化數據存儲格式,性能比 JSON、XML 要高很多。
其實 PB 之所以性能如此好,主要得益於兩個:第一,它使用 proto 編譯器,自動進行序列化和反序列化,速度非常快,應該比 XML 和 JSON 快上了 20~100 倍;第二,它的數據壓縮效果好,就是說它序列化後的數據量體積小。因爲體積小,傳輸起來帶寬和速度上會有優化。

發佈了107 篇原創文章 · 獲贊 15 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章