RPC 和HTTP 的區別 服務發現 HTTP,知道服務功能變數名稱,可以通過 DNS 解析 得到 服務的IP地址,從而進行訪問 RPC 需要一個專門的中間服務去保存服務名和IP信息(註冊中心,nacos、consul),想要訪問某個服務,就得同時註冊到 中間服務,然後獲取需要頂用服務的IP 和埠信息 底 ...
RPC 和HTTP 的區別
服務發現
- HTTP,知道服務功能變數名稱,可以通過 DNS 解析 得到 服務的IP地址,從而進行訪問
- RPC 需要一個專門的中間服務去保存服務名和IP信息(註冊中心,nacos、consul),想要訪問某個服務,就得同時註冊到 中間服務,然後獲取需要頂用服務的IP 和埠信息
底層鏈接形式
- HTTP/1.1 預設在底層建立TCP 鏈接後,會一直保持這個鏈接(keep alive),後邊的請求和響應回服用這條鏈接
- RPC 協議,和http 相同的地方是,通過 建立TCP 長鏈接進行數據交互,不同的地方是,RPC 一般會再建立一個鏈接池,大量請求時,會建立多條鏈接放在鏈接池中。需要時,從鏈接池取,不需要時,放回鏈接池
傳輸內容
- RPC 和HTTP 協議都有請求頭和請求體,但是請求頭裡面放的內容不一致,由於請求體的數據格式不一致,請求頭裡面會存儲請求體的解析方式,為瞭解決 body 的解析方式,請求體會有差異
- 一般消息都是結構化的信息,但是 TCP 傳輸過程中,都是 二進位 的 01 串(電腦只認識 0,1),所以從應用層將數據傳輸前,將結構體轉換成 二進位 ,這個過程叫做 序列化, 反過來,從傳輸層發送的消息是二進位的,需要將二進位的數據轉換成 結構體的過程叫 反序列化
- 一般,HTTP協議為了做到足夠的通用,會在請求頭中添加更多的信息,所有內容會偏多,整個消息體 會比RPC 偏大。但是不絕對,如果RPC 底層協議採用 http ,那就相反了
總結
-
TCP 、UDP協議,是傳輸層協議,而 RPC 和 http 都定義了不同的消息格式,可以認為都是應用層協議
-
HTTP協議: hyper text transfer protocol(超文本傳輸協議), 由於瀏覽器的誕生衍生出來的協議
-
RPC 協議 : romote procedure call (遠程過程調用協議),他本身不是一種協議,而是一種調用方式。 RPC 本身有很多實現方式,底層協議不一定基於TCP,可以是 UDP、http 協議
-
純裸的TCP 能收發數據,但是他它是一個無邊界的數據流,上層(應用層)需要定義消息格式,用於定義消息邊界
-
歷史的發展來說,RPC 其實比HTTP 出出現的時間更早, HTTP 主要用於 B/S 架構,RPC 主要用於C/S 架構,現在慢慢的有了融合的跡象。
-
HTTP/2.0 在 HTTP/1.0 上做了優化,性能比RPC 都好