八:對微服務通訊方式RPC vs REST的理解
阿新 • • 發佈:2019-01-02
微服務專欄地址
目錄
1. 簡介
微服務的服務都是獨立程序,服務之間的通訊的效率、穩定性等等關乎著系統是否能高效、穩定執行。常見的通訊方式有RPC及REST,從以下幾個方面去理解微服務的服務通訊方式以及選擇:
- 關於RPC
1.1 什麼是RPC
1.2 RPC有什麼用
1.3 RPC的框架有哪些 - 什麼是REST
- 兩者有什麼區別
- 微服務通訊該如何選擇
補充了一些對於dubbo的體會
2. 關於RPC
2.1 什麼是RPC
RPC(Remote Procedure Call):遠端過程呼叫,它是一種通過網路從遠端計算機程式上請求服務,而不需要了解底層網路技術的協議。
理解:是一種用於網路上不同程式之間的遠端通訊的協議,內部封裝了底層網路技術細節。
2.2 RPC有什麼用
用以滿足分散式系統架構中不同的系統之間的遠端通訊和相互呼叫。
2.3 RPC的框架有哪些
2.3.1 服務治理型
- dubbo:出身於阿里巴巴開源的RPC框架,已於2018年2月15日宣佈進入 Apache 孵化器,期待成為apache頂級專案,並且全面擁抱Spring Cloud,git地址也已變更為https://github.com/apache/incubator-dubbo
- dubbox:噹噹網對dubbo的升級
- motan:是新浪微博開源的一套輕量級、方便使用的RPC框架
2.3.2 多語言型
只作簡單瞭解,不是重點,有興趣的可以點選連結瞭解詳細內容
- rpcx是Go語言生態圈的Dubbo, 比Dubbo更輕量,實現了Dubbo的許多特性,藉助於Go語言優秀的併發特性和簡潔語法,可以使用較少的程式碼實現分散式的RPC服務。
- gRPC是Google開發的高效能、通用的開源RPC框架,其由Google主要面向移動應用開發並基於HTTP/2協議標準而設計,基於ProtoBuf(Protocol Buffers)序列化協議開發,且支援眾多開發語言。本身它不是分散式的,所以要實現上面的框架的功能需要進一步的開發。
- thrift是Apache的一個跨語言的高效能的服務框架,也得到了廣泛的應用。
3. 什麼是REST
REST :representational state transfer 表述性狀態轉移,是一種架構風格。偷個懶,傳送門:REST wiki
4. 兩者有什麼區別
從以下各個角度進行對比
維度 | RPC | REST |
---|---|---|
耦合性 | 強耦合 | 鬆散耦合 |
訊息協議 | 二進位制thrift、protobuf、avro | 文字型XML、JSON |
通訊協議 | TCP為主,也可以是HTTP | HTTP/HTTP2 |
效能 | 高 | 一般低於RPC |
介面契約IDL | Thrift、protobuf idl | Swagger |
客戶端 | 強型別客戶端、一般自動生成,可支援多語言客戶端 | 一般http client可訪問,也可支援多語言 |
案例 | dubbo、motan、tars、grpc、thrift | spring boot/mvc、Jax-rs |
開發者友好 | 客戶端比較方便,但是二進位制訊息不可讀 | 文字訊息開發者可讀、瀏覽器可直接訪問檢視結果 |
對外開放 | 需要轉換成REST/文字協議 | 直接對外開放 |
5. 微服務通訊該如何選擇
仍是需要從實際情況去考慮,個人理解的幾點
- 對效能有著嚴格的要求:RPC
- 考慮學習成本,團隊成員的上手難度以及開發效率成本:REST
- 對外開放的需求,rpc需要進一步轉換,而rest可直接對外開放:REST
- 程式碼耦合度要求鬆散耦合:REST
- 與其他框架整合的難度低,微服務框架基本支援rest:REST
- 非同步需求,rest需要額外的實現手段,如通過中介軟體等:RPC
6. RPC框架dubbo 的服務呼叫原理圖解
暫時留個佔位符,有想法把dubbo的學習結合實踐整理出來、先放個傳送門:Apache Dubbo
6.1 服務提供
6.2 服務消費
6.3 Dubbo官方文件感觸
開發指南,Dubbo的文件包含了使用、運維、測試報告、開發指南、 以及設計原則。真心的感覺是從一個框架從無到有,從設計到實現到擴充套件到運維,各個角度去揭示了一個頂級的RPC框架是如何孕育的,其文件的價值早已超出使用指南的範疇。其中的一些設計的細節、原則、編碼規範、注意事項等等等等,都值得我們在實際工作中去遵循、實踐、體會以及總結。