直觀講解一下 RPC 調(diào)用和 HTTP 調(diào)用的區(qū)別!
來自:CSDN(作者:浮生憶夢)
原文鏈接:
blog.csdn.net/m0_38110132/article/details/81481454
很長時間以來都沒有怎么好好搞清楚RPC(即Remote Procedure Call,遠(yuǎn)程過程調(diào)用)和HTTP調(diào)用的區(qū)別,不都是寫一個服務(wù)然后在客戶端調(diào)用么?這里請允許我迷之一笑~Naive! 本文簡單地介紹一下兩種形式的C/S架構(gòu),先說一下他們最本質(zhì)的區(qū)別,就是RPC主要是基于TCP/IP協(xié)議的,而HTTP服務(wù)主要是基于HTTP協(xié)議的,我們都知道HTTP協(xié)議是在傳輸層協(xié)議TCP之上的,所以效率來看的話,RPC當(dāng)然是要更勝一籌啦!下面來具體說一說RPC服務(wù)和HTTP服務(wù)。
OSI網(wǎng)絡(luò)七層模型
第一層:應(yīng)用層。定義了用于在網(wǎng)絡(luò)中進行通信和傳輸數(shù)據(jù)的接口; 第二層:表示層。定義不同的系統(tǒng)中數(shù)據(jù)的傳輸格式,編碼和解碼規(guī)范等; 第三層:會話層。管理用戶的會話,控制用戶間邏輯連接的建立和中斷; 第四層:傳輸層。管理著網(wǎng)絡(luò)中的端到端的數(shù)據(jù)傳輸; 第五層:網(wǎng)絡(luò)層。定義網(wǎng)絡(luò)設(shè)備間如何傳輸數(shù)據(jù); 第六層:鏈路層。將上面的網(wǎng)絡(luò)層的數(shù)據(jù)包封裝成數(shù)據(jù)幀,便于物理層傳輸; 第七層:物理層。這一層主要就是傳輸這些二進制數(shù)據(jù)。
RPC服務(wù)
RPC架構(gòu)
客戶端(Client),服務(wù)的調(diào)用方。 服務(wù)端(Server),真正的服務(wù)提供者。
客戶端存根,存放服務(wù)端的地址消息,再將客戶端的請求參數(shù)打包成網(wǎng)絡(luò)消息,然后通過網(wǎng)絡(luò)遠(yuǎn)程發(fā)送給服務(wù)方。
服務(wù)端存根,接收客戶端發(fā)送過來的消息,將消息解包,并調(diào)用本地的方法。

同步調(diào)用與異步調(diào)用
流行的RPC框架
gRPC是Google最近公布的開源軟件,基于最新的HTTP2.0協(xié)議,并支持常見的眾多編程語言。我們知道HTTP2.0是基于二進制的HTTP協(xié)議升級版本,目前各大瀏覽器都在快馬加鞭的加以支持。這個RPC框架是基于HTTP協(xié)議實現(xiàn)的,底層使用到了Netty框架的支持。 Thrift是Facebook的一個開源項目,主要是一個跨語言的服務(wù)開發(fā)框架。它有一個代碼生成器來對它所定義的IDL定義文件自動生成服務(wù)代碼框架。用戶只要在其之前進行二次開發(fā)就行,對于底層的RPC通訊等都是透明的。不過這個對于用戶來說的話需要學(xué)習(xí)特定領(lǐng)域語言這個特性,還是有一定成本的。 Dubbo是阿里集團開源的一個極為出名的RPC框架,在很多互聯(lián)網(wǎng)公司和企業(yè)應(yīng)用中廣泛使用。協(xié)議和序列化框架都可以插拔是及其鮮明的特色。同樣 的遠(yuǎn)程接口是基于Java Interface,并且依托于spring框架方便開發(fā)??梢苑奖愕拇虬蓡我晃募?,獨立進程運行,和現(xiàn)在的微服務(wù)概念一致。
HTTP服務(wù)
比如下面這個例子:
POST http://www.httpexample.com/restful/buyer/info/shar
總結(jié)
推薦閱讀:
喜歡我可以給我設(shè)為星標(biāo)哦


評論
圖片
表情
