gRPC筆記與相關(guān)問題

gRPC筆記

為什么要用RPC,數(shù)據(jù)編碼,請求映射?

數(shù)據(jù)編碼就是序列化,反序列化,將對象變成字節(jié)流發(fā)送給服務(wù)端,服務(wù)端將收到的字節(jié)流再轉(zhuǎn)化為對象

常見的序列化,反序列化工具XML, JSON, Protobuf。

既然Protobuf在某些場景下效率要比JSON高,為什么高?

Json的缺點(diǎn)就是非字符串的編碼效率低,int類型在內(nèi)存只占兩個字節(jié)65535, 轉(zhuǎn)化成JSON卻需要五個字節(jié),bool則需要占用四到五個字節(jié)

另一個缺點(diǎn)就是信息冗余,面對同一個接口同一個對象,需要重復(fù)傳送相同的字段名。

Json在編碼效率和可讀性之間選擇了可讀性

Protobuf選用了VarInts對數(shù)字進(jìn)行編碼,解決了效率問題,另一方面將字段都指定為整數(shù)編號,傳輸?shù)臅r候只傳送字段編號,解決了冗余問題,Protobuf使用.proto文件作為schema記錄字段和編號的對應(yīng)關(guān)系

gRPC底層使用的HTTP/2協(xié)議

HTTP協(xié)議本身可以通過Content-Encoding表示壓縮算法,使用Contetn-length指定數(shù)據(jù)長度。

而gRPC重新定義了一套機(jī)制,因?yàn)間RPC支持stream rpc,流式接口。

gRPC支持三種流式接口,請求流,響應(yīng)流,雙向流。

請求流可以在RPC發(fā)起之后不斷發(fā)送新的請求消息,此類接口最典型的使用場景事發(fā)推送或者短信。

相應(yīng)流可以在RPC發(fā)起之后不斷接受新的響應(yīng)消息,最典型的場景就是訂閱消息通知

雙向流可以在RPC發(fā)起之后同時手法消息,最典型的場景就是實(shí)時語音轉(zhuǎn)字幕

為了實(shí)現(xiàn)流式傳輸,gRPC引入Length-Prefixed Message同一個gRPC請求的不同消息共用HTTP頭信息,只能給每個消息單獨(dú)加一個五字節(jié)的前綴來表示壓縮和長度信息。gRPC還定義了自己的grpc-status和grpc-message

HTTP/1.1也是支持復(fù)用TCP連接的,但這種復(fù)用有一個明顯的缺陷,所有請求必須排隊,先到先服務(wù)。

HTTP/2引入了stream的概念,解決了TCP鏈接復(fù)用的問題,可以在一條TCP連接上并行收發(fā)HTTP消息,而無需等待。

即gRPC為了實(shí)現(xiàn)流式特性,使用了HTTP/2進(jìn)行通信。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容