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