RPC和REST的區別


REST定義

REST是一種架構風格,指的是一組架構約束條件和原則。滿足這些約束條件和原則的應用程序或設計就是 RESTful。REST規范把所有內容都視為資源,網絡上一切皆資源。REST並沒有創造新的技術,組件或服務,只是使用Web的現有特征和能力。 可以完全通過HTTP協議實現,使用 HTTP 協議處理數據通信。REST架構對資源的操作包括獲取、創建、修改和刪除資源的操作正好對應HTTP協議提供的GET、POST、PUT和DELETE方法。

REST是一種架構風格,沒有創造新的技術。

RPC定義

Remote Procedure Call,遠程過程調用,就是像調用本地方法一樣調用遠程方法。
image
RPC框架包含4個核心的組件,分別是Client ,Server,Client Stub以及Server Stub,這個Stub大家可以理解為存根

  • 客戶端(Client),服務的調用方。
  • 服務端(Server),真正的服務提供者。
  • 客戶端存根,存放服務端的地址消息,再將客戶端的請求參數打包成網絡消息,然后通過網絡遠程發送給服務方。
  • 服務端存根,接收客戶端發送過來的消息,將消息解包,並調用本地的方法

REST與RPC比較

比較項 REST RPC
通信協議 Http 一般使用TCP
性能
靈活度

REST與RPC應用場景

  • REST:
    HTTP相對更規范,更標准,更通用,無論哪種語言都支持http協議。如果你是對外開放API,例如開放平台,外部的編程語言多種多樣,你無法拒絕對每種語言的支持,現在開源中間件,基本最先支持的幾個協議都包含RESTful。
  • RPC:
    RPC 主要是用在大型企業里面,因為大型企業里面系統繁多,業務線復雜,而且效率優勢非常重要的一塊,這個時候 RPC 的優勢就比較明顯了。實際的開發當中是這么做的,項目一般使用 Maven 來管理。
    比如我們有一個處理訂單的系統服務,先聲明它的所有的接口(這里就是具體指 Java 中的 Interface),然后將整個項目打包為一個 jar 包,服務端這邊引入這個二方庫,然后實現相應的功能,客戶端這邊也只需要引入這個二方庫即可調用了。
    為什么這么做?主要是為了減少客戶端這邊的 jar 包大小,因為每一次打包發布的時候,jar 包太多總是會影響效率。另外也是將客戶端和服務端解耦,提高代碼的可移植性。

流行的RPC框架和REST框架

  • RPC代表
    Dubbo是阿里集團開源的一個極為出名的RPC框架,在很多互聯網公司和企業應用中廣泛使用。協議和序列化框架都可以插拔是及其鮮明的特色。同樣的遠程接口是基於Java Interface,並且依托於spring框架方便開發。可以方便的打包成單一文件,獨立進程運行,和現在的微服務概念一致
  • REST風格框架代表
    SpringCloud

總結

RPC 服務和 HTTP 服務還是存在很多的不同點的,一般來說,RPC 服務主要是針對大型企業的,而 HTTP 服務主要是針對小企業的,因為 RPC 效率更高,而 HTTP 服務開發迭代會更快。

總之,選用什么樣的框架不是按照市場上流行什么而決定的,而是要對整個項目進行完整地評估,從而在仔細比較兩種開發框架對於整個項目的影響,最后再決定什么才是最適合這個項目的。

一定不要為了使用 RPC 而每個項目都用 RPC,而是要因地制宜,具體情況具體分析。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM