RPC與Http的區別

一.遠程調用方式
無論是微服務還是分佈式服務(都是SOA,都是面向服務編程),都面臨着服務間的遠程調用。那麼服務間的遠程調用方式有哪些呢?

常見的遠程調用方式有以下幾種:

RPC:Remote Produce Call遠程過程調用,類似的還有RMI(Remote Methods Invoke 遠程方法調用,是JAVA中的概念,是JAVA十三大技術之一)。自定義數據格式,基於原生TCP通信,速度快,效率高。早期的webservice,現在熱門的dubbo,都是RPC的典型

RPC的框架:webservie(cxf)、dubbo
RMI的框架:hessian
Http:http其實是一種網絡傳輸協議,基於TCP,規定了數據傳輸的格式。現在客戶端瀏覽器與服務端通信基本都是採用Http協議。也可以用來進行遠程服務調用。缺點是消息封裝臃腫。

現在熱門的Rest風格,就可以通過http協議來實現。

http的實現技術:HttpClient
相同點:底層通訊都是基於socket,都可以實現遠程調用,都可以實現服務調用服務

不同點:
RPC:框架有:dubbo、cxf、(RMI遠程方法調用)Hessian
當使用RPC框架實現服務間調用的時候,要求服務提供方和服務消費方 都必須使用統一的RPC框架,要麼都dubbo,要麼都cxf

跨操作系統在同一編程語言內使用
優勢:調用快、處理快

http:框架有:httpClient
當使用http進行服務間調用的時候,無需關注服務提供方使用的編程語言,也無需關注服務消費方使用的編程語言,服務提供方只需要提供restful風格的接口,服務消費方,按照restful的原則,請求服務,即可

跨系統跨編程語言的遠程調用框架
優勢:通用性強

總結:對比RPC和http的區別

  1. RPC要求服務提供方和服務調用方都需要使用相同的技術,要麼都hessian,要麼都dubbo
    而http無需關注語言的實現,只需要遵循rest規範
  2. RPC的開發要求較多,像Hessian框架還需要服務器提供完整的接口代碼(包名.類名.方法名必須完全一致),否則客戶端無法運行
  3. Hessian只支持POST請求
  4. Hessian只支持JAVA語言

1.1.認識RPC
RPC,即 Remote Procedure Call(遠程過程調用),是一個計算機通信協議。 該協議允許運行於一臺計算機的程序調用另一臺計算機的子程序,而程序員無需額外地爲這個交互作用編程。說得通俗一點就是:A計算機提供一個服務,B計算機可以像調用本地服務那樣調用A計算機的服務。

通過上面的概念,我們可以知道,實現RPC主要是做到兩點:

實現遠程調用其他計算機的服務
要實現遠程調用,肯定是通過網絡傳輸數據。A程序提供服務,B程序通過網絡將請求參數傳遞給A,A本地執行後得到結果,再將結果返回給B程序。這裏需要關注的有兩點:

  1. 採用何種網絡通訊協議?
    現在比較流行的RPC框架,都會採用TCP作爲底層傳輸協議
  2. 數據傳輸的格式怎樣?
    兩個程序進行通訊,必須約定好數據傳輸格式。就好比兩個人聊天,要用同一種語言,否則無法溝通。所以,我們必須定義好請求和響應的格式。另外,數據在網路中傳輸需要進行序列化,所以還需要約定統一的序列化的方式。
    像調用本地服務一樣調用遠程服務
    如果僅僅是遠程調用,還不算是RPC,因爲RPC強調的是過程調用,調用的過程對用戶而言是應該是透明的,用戶不應該關心調用的細節,可以像調用本地服務一樣調用遠程服務。所以RPC一定要對調用的過程進行封裝

RPC調用流程圖
在這裏插入圖片描述
1.2.認識Http
Http協議:超文本傳輸協議,是一種應用層協議。規定了網絡傳輸的請求格式、響應格式、資源定位和操作的方式等。但是底層採用什麼網絡傳輸協議,並沒有規定,不過現在都是採用TCP協議作爲底層傳輸協議。說到這裏,大家可能覺得,Http與RPC的遠程調用非常像,都是按照某種規定好的數據格式進行網絡通信,有請求,有響應。沒錯,在這點來看,兩者非常相似,但是還是有一些細微差別。

RPC並沒有規定數據傳輸格式,這個格式可以任意指定,不同的RPC協議,數據格式不一定相同。
Http中還定義了資源定位的路徑,RPC中並不需要
最重要的一點:RPC需要滿足像調用本地服務一樣調用遠程服務,也就是對調用過程在API層面進行封裝。Http協議沒有這樣的要求,因此請求、響應等細節需要我們自己去實現。
優點:RPC方式更加透明,對用戶更方便。Http方式更靈活,沒有規定API和語言,跨語言、跨平臺
缺點:RPC方式需要在API層面進行封裝,限制了開發的語言環境。
例如我們通過瀏覽器訪問網站,就是通過Http協議。只不過瀏覽器把請求封裝,發起請求以及接收響應,解析響應的事情都幫我們做了。如果是不通過瀏覽器,那麼這些事情都需要自己去完成。

流程圖在這裏插入圖片描述
1.3.如何選擇?
既然兩種方式都可以實現遠程調用,我們該如何選擇呢?

  1. 速度來看,RPC要比http更快,雖然底層都是TCP 也有基於http 協議的 比如 grpc 基於http2.0,但是http協議的信息往往比較臃腫
  2. 難度來看,RPC實現較爲複雜,http相對比較簡單
  3. 靈活性來看,http更勝一籌,因爲它不關心實現細節,跨平臺、跨語言。

因此,兩者都有不同的使用場景:

  1. 如果對效率要求更高,並且開發過程使用統一的技術棧,那麼用RPC還是不錯的。
  2. 如果需要更加靈活,跨語言、跨平臺,顯然http更合適
    那麼我們該怎麼選擇呢?

微服務,更加強調的是獨立、自治、靈活。而RPC方式的限制較多,因此微服務框架中,一般都會採用基於Http的Rest風格服務。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章