天天看點

2021-06-08-RPC和HTTP的關系

RPC和HTTP的關系

  • RPC是一種概念,代表遠端過程調用,HTTP是一種協定,RPC可以基于HTTP實作,也可以基于其它協定如TCP實作,而TCP是比HTTP快的,一般說的RPC比HTTP快說的是基于TCP實作的RPC
  • RPC和HTTP算了一種包含關系,RPC包含http,因為RPC可以基于HTTP協定或者其它協定實作,HTTP隻能基于Http協定實作,下面講的RPC是指非HTTP協定的RPC
  • 下面講一下基于TCP的RPC和HTTP的對比

基于TCP的RPC和HTTP的對比:

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

    RPC的架構:webservie(cxf)、dubbo(阿裡巴巴開源的基于 Java 的高性能 RPC)

    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語言

如何選擇?

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

    速度來看,RPC要比http更快,雖然底層都是TCP,但是http協定的資訊往往比較臃腫

    難度來看,RPC實作較為複雜,http相對比較簡單

    靈活性來看,http更勝一籌,因為它不關心實作細節,跨平台、跨語言。

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

    如果對效率要求更高,并且開發過程使用統一的技術棧,那麼用RPC還是不錯的。

    如果需要更加靈活,跨語言、跨平台,顯然http更合适

    那麼我們該怎麼選擇呢?

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

  • 總結

    RPC服務和HTTP服務還是存在很多的不同點的,一般來說,RPC服務主要是針對大型企業的,而HTTP服務主要是針對小企業的,因為RPC效率更高,而HTTP服務開發疊代會更快。總之,選用什麼樣的架構不是按照市場上流行什麼而決定的,而是要對整個項目進行完整地評估,進而在仔細比較兩種開發架構對于整個項目的影響,最後再決定什麼才是最适合這個項目的。一定不要為了使用RPC而每個項目都用RPC,而是要因地制宜,具體情況具體分析。