面試題
dubbo 支援哪些通訊協議?支援哪些序列化協議?說一下 Hessian 的資料結構?PB 知道嗎?為什麼 PB 的效率是最高的?
面試官心理分析
上一個問題,說說 dubbo 的基本工作原理,那是你必須知道的,至少要知道 dubbo 分成哪些層,然後平時怎麼發起 rpc 請求的,註冊、發現、呼叫,這些是基本的。
接著就可以針對底層進行深入的問問了,比如第一步就可以先問問序列化協議這塊,就是平時 RPC 的時候怎麼走的?
面試題剖析
序列化,就是把資料結構或者是一些物件,轉換為二進位制串的過程,而反序列化是將在序列化過程中所生成的二進位制串轉換成資料結構或者物件的過程。
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
資料儲存格式,對於 Protocol Buffer
還比較陌生。Protocol Buffer
其實是 Google 出品的一種輕量並且高效的結構化資料儲存格式,效能比 JSON
、XML
要高很多。
其實 PB 之所以效能如此好,主要得益於兩個:第一,它使用 proto 編譯器,自動進行序列化和反序列化,速度非常快,應該比 XML
和 JSON
快上了 20~100
倍;第二,它的資料壓縮效果好,就是說它序列化後的資料量體積小。因為體積小,傳輸起來頻寬和速度上會有優化。
免費Java資料需要自己領取,涵蓋了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高併發分散式等教程,一共30G。
傳送門: mp.weixin.qq.com/s/JzddfH-7y…