REST定義
REST是一種架構風格,指的是一組架構約束條件和原則。滿足這些約束條件和原則的應用程序或設計就是 RESTful。REST規范把所有內容都視為資源,網絡上一切皆資源。REST並沒有創造新的技術,組件或服務,只是使用Web的現有特征和能力。 可以完全通過HTTP協議實現,使用 HTTP 協議處理數據通信。REST架構對資源的操作包括獲取、創建、修改和刪除資源的操作正好對應HTTP協議提供的GET、POST、PUT和DELETE方法。
REST是一種架構風格,沒有創造新的技術。
RPC定義
Remote Procedure Call,遠程過程調用,就是像調用本地方法一樣調用遠程方法。
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,而是要因地制宜,具體情況具體分析。