RPC 編程 -一-: 初步瞭解 RPC
- 什麼是 RPC
RPC(Remote Procedure Call
,遠程過程調用)是一種進程間的通信方式,它是一種技術思想 (概念), 而不是規範,它允許程序調用另一個地址空間(通常是共享網絡的另一臺機器) 的過程函數,而開發者無需額外地爲這個調用過程編寫網絡通信相關代碼細節。
通俗的解釋:客戶端在不知道調用細節的情況下,調用存在於遠程計算機上的某個對象,就像調用本地應用程序中的對象一樣。
- 遠程調用和本地調用
- HTTP 和 RPC 區別
3.1 從概念區分
一句話概括:
RPC
是概念,HTTP
是協議,RPC
通信協議,可以基於HTTP協議
,也可以基於TCP、UDP
。
RPC 的傳輸協議 & 序列化協議包含
RPC
調用協議通常包含傳輸協議 和 序列化協議
, 常用的傳輸協議是TCP
、常用的序列化協議是Protobuf
,當然也支持其他協議,具體可見上圖。
3.2 從傳輸協議上區分
-
HTTP
只能基於HTTP協議
,而且HTTP
屬於應用層協議。 -
RPC
可以基於HTTP、TCP、UDP協議
,而其中TCP、UDP
屬於傳輸層協議。
HTTP
和RPC
本質的區別,還是在傳輸協議上,雖然HTTP
和RPC
底層都是通過TCP協議
,但是RPC
走的是自定義TCP
協議,兩者主要的區別是在傳輸報文上,
HTTP1.1 協議的 tcp 報文:
HTTP/1.0 200 OK
Content-Type: text/plain
Content-Length: 137582
Expires: Thu, 05 Dec 2021 16:00:00 GMT
Last-Modified: Wed, 5 August 1996 15:55:28 GMT
Server: Apache 0.84
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36
<html>
<body>我是有效的消息</body>
</html>
從上面整個報文可以看出,有效消息Body
在整個消息中, 佔比低, 而無效消息Header
佔比卻很大,即使將Body
使用二進制編碼協議,也無法減少整個報文體積,而RPC
的自定義TCP
協議,就是爲了去掉報文中無效的信息。
3.3 從 OSI 網絡模型區分
HTTP
位於應用層協議,RPC
常用的自定義TCP
位於傳輸層協議,完整的OSI
七層網絡模型,如下圖:
- RPC 調用流程圖
RPC 調用流程圖
- 常見的 RPC 框架
5.1 跟語言綁定框架
-
Dubbo
:國內最早開源的RPC
框架,由阿里巴巴公司開發並於 2011 年末對外開源,僅支持Java
語言。 -
Motan
:微博內部使用的RPC
框架,於 2016 年對外開源,僅支持Java
語言。 -
Tars
:騰訊內部使用的RPC
框架,於 2017 年對外開源,僅支持C++
語言。 -
Spring Cloud
:國外Pivotal
公司 2014 年對外開源的RPC
框架,僅支持Java
語言。
5.2 跨語言開源框架
-
gRPC
:Google
於 2015 年對外開源的跨語言 RPC 框架,支持多種語言。 -
Thrift
:最初是由Facebook
開發的內部系統跨語言的 RPC 框架,2007 年貢獻給了 Apache 基金,成爲 Apache 開源項目之一,支持多種語言。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/dmqgbMdwZNsjCiWvFtcSbg