1. 程式人生 > >八:對微服務通訊方式RPC vs REST的理解

八:對微服務通訊方式RPC vs REST的理解

微服務專欄地址

目錄

1. 簡介

微服務的服務都是獨立程序,服務之間的通訊的效率、穩定性等等關乎著系統是否能高效、穩定執行。常見的通訊方式有RPC及REST,從以下幾個方面去理解微服務的服務通訊方式以及選擇:

  1. 關於RPC
    1.1 什麼是RPC
    1.2 RPC有什麼用
    1.3 RPC的框架有哪些
  2. 什麼是REST
  3. 兩者有什麼區別
  4. 微服務通訊該如何選擇

補充了一些對於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框架是如何孕育的,其文件的價值早已超出使用指南的範疇。其中的一些設計的細節、原則、編碼規範、注意事項等等等等,都值得我們在實際工作中去遵循、實踐、體會以及總結。