什麼是RPC?服務器
是指遠程過程調用,就是兩個服務A、B,一個應用部署在A服務器上,想要調用B服務器上應用提供的函數/方法,因爲不在一個內存空間,不能直接調用,須要經過網絡來表達調用的語義和傳達調用的數據。網絡
RPC 會隱藏底層的通信細節(不須要直接處理Socket通信或Http通信)
RPC 是一個請求響應模型。客戶端發起請求,服務器返回響應(相似於Http的工做方式) 架構
那麼:併發
一共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更加合適。