RPC和REST


什么是RPC?

是指遠程過程調用,就是兩個服務A、B,一個應用部署在A服務器上,想要調用B服務器上應用提供的函數/方法,由於不在一個內存空間,不能直接調用,需要通過網絡來表達調用的語義和傳達調用的數據

RPC 會隱藏底層的通訊細節(不需要直接處理Socket通訊或Http通訊) 
RPC 是一個請求響應模型。客戶端發起請求,服務器返回響應(類似於Http的工作方式) 

那么:

  • 首先,要解決通訊的問題,主要是通過在客戶端和服務器之間建立TCP連接,遠程過程調用的所有交換的數據都在這個連接里傳輸。連接可以是按需連接,調用結束后就斷掉,也可以是長連接,多個遠程過程調用共享同一個連接。
  • 第二,要解決尋址的問題,也就是說,A服務器上的應用怎么告訴底層的RPC框架,如何連接到B服務器(如主機或IP地址)以及特定的端口,方法的名稱名稱是什么,這樣才能完成調用。比如基於Web服務協議棧的RPC,就要提供一個endpoint URI,或者是從UDDI服務上查找。如果是RMI調用的話,還需要一個RMI Registry來注冊服務的地址。
  • 第三,當A服務器上的應用發起遠程過程調用時,方法的參數需要通過底層的網絡協議如TCP傳遞到B服務器,由於網絡協議是基於二進制的,內存中的參數的值要序列化成二進制的形式,也就是序列化(Serialize)或編組(marshal),通過尋址和傳輸將序列化的二進制發送給B服務器。
  • 第四,B服務器收到請求后,需要對參數進行反序列化(序列化的逆操作),恢復為內存中的表達方式,然后找到對應的方法(尋址的一部分)進行本地調用,然后得到返回值。
  • 第五,返回值還要發送回服務器A上的應用,也要經過序列化的方式發送,服務器A接到后,再反序列化,恢復為內存中的表達方式,交給A服務器上的應用

一共9步:
1)服務消費方(client)調用以本地調用方式調用服務; 
2)client stub接收到調用后負責將方法、參數等組裝成能夠進行網絡傳輸的消息體; 
3)client stub找到服務地址,並將消息發送到服務端; 
4)server stub收到消息后進行解碼; 
5)server stub根據解碼結果調用本地的服務; 
6)本地服務執行並將結果返回給server stub; 
7)server stub將返回結果打包成消息並發送至消費方; 
8)client stub接收到消息,並進行解碼; 
9)服務消費方得到最終結果。

引用:https://www.zhihu.com/question/25536695/answer/109977506

 

什么是REST?

REST是一種架構風格,指的是一組架構約束條件和原則。滿足這些約束條件和原則的應用程序或設計就是 RESTful。REST規范把所有內容都視為資源,網絡上一切皆資源。

REST並沒有創造新的技術,組件或服務,只是使用Web的現有特征和能力。 可以完全通過HTTP協議實現,使用 HTTP 協議處理數據通信。REST架構對資源的操作包括獲取、創建、修改和刪除資源的操作正好對應HTTP協議提供的GET、POST、PUT和DELETE方法。

 

 

REST和RPC的比較:

RPC來實現服務間調用的一些痛點:

1.RPC服務提供方與調用方接口依賴方式太強,會導致編碼的復雜性,而REST接口相比RPC更為輕量化,服務提供方和調用方的依賴只是依靠一紙契約,不存在代碼級別的強依賴。

2.RPC服務對平台敏感,難以簡單復用:REST可以實現跨平台,任何一個語言的調用方都可以根據接口定義來實現。

比較項        規范

REST

RPC

通信協議

HTTP

一般使用TCP

性能

靈活度

 Dubbo采用的RPC的服務調用,SpringCloud采用的REST。

  Dubbo Spring Cloud
服務注冊中心 Zookeeper Spring Cloud Netflix Eureka
服務調用方式 RPC REST API
服務監控 Dubbo-monitor Spring Boot Admin
斷路器 不完善 Spring Cloud Netflix Hystrix
服務網關 Spring Cloud Netflix Zuul
分布式配置 Spring Cloud Config
服務跟蹤 Spring Cloud Sleuth
消息總線 Spring Cloud Bus
數據流 Spring Cloud Stream
批量任務 Spring Cloud Task
…… …… ……

Dubbo 只是實現了服務治理,而 Spring Cloud 子項目分別覆蓋了微服務架構下的眾多部件,服務治理只是其中的一個方面。

 

建議:

REST調用及測試都很方便,RPC就顯得有點繁瑣,但是RPC的效率是毋庸置疑的,所以建議在多系統之間的內部調用采用RPC。對外提供的服務,Rest更加合適。


免責聲明!

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



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