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更加合適。

相關文章
相關標籤/搜索