REST與RPC概念
什麼是REST
REST是一種架構風格,指的是一組架構約束條件和原則。滿足這些約束條件和原則的應用程序或設計就是 RESTful。REST規範把所有內容都視爲資源,網絡上一切皆資源。
REST並沒有創造新的技術,組件或服務,只是使用Web的現有特徵和能力。 可以完全通過HTTP協議實現,使用 HTTP 協議處理數據通信。REST架構對資源的操作包括獲取、創建、修改和刪除資源的操作正好對應HTTP協議提供的GET、POST、PUT和DELETE方法。
HTTP動詞與REST風格CRUD對應關係:
什麼是RPC
遠程方法調用,就是像調用本地方法一樣調用遠程方法。常見RPC框架結構圖:
RPC框架要做到的最基本的三件事:
1、服務端如何確定客戶端要調用的函數;
在遠程調用中,客戶端和服務端分別維護一個【ID->函數】的對應表, ID在所有進程中都是唯一確定的。客戶端在做遠程過程調用時,附上這個ID,服務端通過查表,來確定客戶端需要調用的函數,然後執行相應函數的代碼。
2、如何進行序列化和反序列化;
客戶端和服務端交互時將參數或結果轉化爲字節流在網絡中傳輸,那麼數據轉化爲字節流的或者將字節流轉換成能讀取的固定格式時就需要進行序列化和反序列化,序列化和反序列化的速度也會影響遠程調用的效率。
3、如何進行網絡傳輸(選擇何種網絡協議);
多數RPC框架選擇TCP作爲傳輸協議,也有部分選擇HTTP。如gRPC使用HTTP2。不同的協議各有利弊。TCP更加高效,而HTTP在實際應用中更加的靈活。
REST與RPC比較
都是網絡交互的協議規範。通常用於多個微服務之間的通信協議。
高與低是對實現兩種規範框架的相對比較,但也不是絕對的,需要根據實際情況而定。
REST與RPC應用場景
REST和RPC都常用於微服務架構中。
1、HTTP相對更規範,更標準,更通用,無論哪種語言都支持http協議。如果你是對外開放API,例如開放平臺,外部的編程語言多種多樣,你無法拒絕對每種語言的支持,現在開源中間件,基本最先支持的幾個協議都包含RESTful。
2、 RPC 框架作爲架構微服務化的基礎組件,它能大大降低架構微服務化的成本,提高調用方與服務提供方的研發效率,屏蔽跨進程調用函數(服務)的各類複雜細節。讓調用方感覺就像調用本地函數一樣調用遠端函數、讓服務提供方感覺就像實現一個本地函數一樣來實現服務。
最後建議
REST調用及測試都很方便,RPC就顯得有點繁瑣,但是RPC的效率是毋庸置疑的,所以建議在多系統之間的內部調用採用RPC。對外提供的服務,Rest更加合適。