RPC的介紹及其與http的區別
文章目錄
- RPC的介紹及其與http的區別
- 一、簡介
- 1、什么是 RPC
- 2、RPC 和 http 的區別
- 1)HTTP 和 RPC 是同一級別,還是被 RPC 包含?
- 2)Restful 也屬于 RPC 嗎?
- 3)二者對比
一、簡介
Apache Dubbo是一款高性能的Java RPC框架,其前身是阿里巴巴公司開源的、輕量級的開源Java RPC 框架,可以和Spring框架無縫集成
Dubbo 中不同服務的呼叫方式,就是使用 RPC 實作的
1、什么是 RPC
這里,我強烈推薦一篇講 RPC 的文章,講的十分不錯: RPC 和 HTTP 的理解
我們知道 ,SpringCloud 不同服務之間通信,使用的是 http 協議,但是,http 的頭部包含過多冗余資訊,我舉個例子:
HTTP/1.0 200 OK
Content-Type: text/plain
Content-Length: 137582
Expires: Thu, 05 Dec 1997 16:00:00 GMT
Last-Modified: Wed, 5 August 1996 15:55:28 GMT
Server: Apache 0.84
<html>
<body>Hello World</body>
</html>
為了傳輸那么一點 html 文本內容,我們就要帶上那么大一個 http 頭部資訊,當然,實際情況下報文內容可能不止那么一點,但是報頭所占的比例還是比較大的
我們知道,在7層架構中,http 協議是應用層協議,其下一層,使用的是 tcp 傳輸協議,那我們可不可以動動手腳,把 http 換掉,自定義 tcp 協議來實作服務間呼叫,從而縮減報頭資訊呢?RPC便是因此而來
RPC,全稱 remote procedure call 即遠程程序呼叫,所以說,不要把RPC想成一個協議,RPC只是一個設計理念,RPC除了包含傳輸,還包含了序列化協議
傳輸協議:
比如著名的 grpc,它底層使用的是 http2 協議;還有 dubbo 一類的自定義報文的 tcp 協議
序列化協議:
例如基于文本編碼的 json 協議;也有二進制編碼的 protobuf、hession 等協議;還有針對 java 高性能、高吞吐量的 kryo 和 ftc 等序列化協議
2、RPC 和 http 的區別
這里,我們先提出兩個許多人關注的問題
1、HTTP 和 RPC 是同一級別,還是被 RPC 包含?
2、Restful 也屬于 RPC 嗎?
我們用一張圖,來解釋一下上面的兩個問題

1)HTTP 和 RPC 是同一級別,還是被 RPC 包含?
對于這個問題,答案是都對,
從上圖可以看出,http 和 RPC 的作用,都是遠程調取另一個應用,從而獲得資訊
但是,PRC 通信方法的實作,有基于傳輸層協議的 TCP,UDP(dubbo 就是用的 tcp),也有直接使用應用層協議 http 的(比如 grcp)
所以,🤷🏻?♀?
2)Restful 也屬于 RPC 嗎?
不屬于
我們先來看看 SpringCloud 中,基于 http 的呼叫方式

一個服務,獲取另一個服務,其中的通信方式,就是使用的 http,這就好像,用戶呼叫 A服務,A服務需要呼叫 B服務,此時,A服務也相當于一個用戶,去請求資訊,并且 “A用戶” 獲取到資訊,并且自己也處理完后,才會回傳給呼叫的用戶,這給我們的感覺,就是比較的重量級
而RCP的遠程呼叫方式如下:

RPC 遠程呼叫,是面向介面實作的,雖說被呼叫的方法和呼叫方不在同一記憶體中,但是,通過代理模式,可以讓使用者在呼叫的時候,有如就是在同一個模塊間進行呼叫一樣

3)二者對比

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/289278.html
標籤:其他
上一篇:Linux上查詢日志內容--常用日志查詢命令: find、grep、head、tail、cat、tac、more、less、nl
