天天看點

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調用流程圖:

RPC與Http的差別

1.2.認識Http

Http協定:超文本傳輸協定,是一種應用層協定。規定了網絡傳輸的請求格式、響應格式、資源定位和操作的方式等。但是底層采用什麼網絡傳輸協定,并沒有規定,不過現在都是采用TCP協定作為底層傳輸協定。說到這裡,大家可能覺得,Http與RPC的遠端調用非常像,都是按照某種規定好的資料格式進行網絡通信,有請求,有響應。沒錯,在這點來看,兩者非常相似,但是還是有一些細微差别。

  • RPC并沒有規定資料傳輸格式,這個格式可以任意指定,不同的RPC協定,資料格式不一定相同。
  • Http中還定義了資源定位的路徑,RPC中并不需要
  • 最重要的一點:RPC需要滿足像調用本地服務一樣調用遠端服務,也就是對調用過程在API層面進行封裝。Http協定沒有這樣的要求,是以請求、響應等細節需要我們自己去實作。
  • 優點:RPC方式更加透明,對使用者更友善。Http方式更靈活,沒有規定API和語言,跨語言、跨平台
  • 缺點:RPC方式需要在API層面進行封裝,限制了開發的語言環境。

例如我們通過浏覽器通路網站,就是通過Http協定。隻不過浏覽器把請求封裝,發起請求以及接收響應,解析響應的事情都幫我們做了。如果是不通過浏覽器,那麼這些事情都需要自己去完成。

RPC與Http的差別

1.3.如何選擇?

既然兩種方式都可以實作遠端調用,我們該如何選擇呢?

  • 速度來看,RPC要比http更快,雖然底層都是TCP,但是http協定的資訊往往比較臃腫
  • 難度來看,RPC實作較為複雜,http相對比較簡單
  • 靈活性來看,http更勝一籌,因為它不關心實作細節,跨平台、跨語言。

是以,兩者都有不同的使用場景:

  • 如果對效率要求更高,并且開發過程使用統一的技術棧,那麼用RPC還是不錯的。
  • 如果需要更加靈活,跨語言、跨平台,顯然http更合适

那麼我們該怎麼選擇呢?

原文位址

繼續閱讀