協定

協定

Dubbo 框架提供自訂的高效能 RPC 通訊協定:基於 HTTP/2 的 Triple 協定和基於 TCP 的 Dubbo2 協定。此外,Dubbo 也支援任何第三方通訊協定,例如官方支援的 gRPC、Thrift、REST、JsonRPC、Hessian2 等。更多協定可透過自訂擴充功能來實現。這對於處理微服務實務中常見的多協定通訊場景特別有用。

Dubbo 框架並未與任何特定的通訊協定綁定。在其設計中,Dubbo 對多協定的支援非常靈活。它允許您在單個應用程式中發佈使用不同協定的服務。此外,它支援透過同一個埠對外暴露所有協定。

protocols

透過 Dubbo 框架對多協定的支援,您可以實現:

  • 將任何通訊協定無縫整合到 Dubbo 服務治理系統中。Dubbo 生態系統下的所有通訊協定都可以利用 Dubbo 的程式設計模型、服務發現和流量控制的優勢。例如,在 Dubbo 上使用 gRPC 的情況下,服務治理和程式設計 API 都可以零成本地無縫整合到 Dubbo 生態系統中。
  • 與不同技術堆疊的相容性,允許在業務系統中混合使用不同的服務框架和 RPC 框架。例如,某些服務可能使用 gRPC 或 Spring Cloud 開發,而其他服務則使用 Dubbo 框架。透過 Dubbo 對多協定的支援,可以實現無縫的互通性。
  • 簡化協定遷移。透過協調註冊中心的多個協定,您可以快速滿足公司對協定遷移的需求。例如,從專有協定遷移到 Dubbo 協定、升級 Dubbo 協定本身、從 Dubbo 協定遷移到 gRPC,或從 HTTP 轉換到 Dubbo 協定等等。

HTTP/2 (Triple)

Triple 協議是 Dubbo 3 中引入的一種面向雲原生時代的通訊協議,它基於 HTTP/2 並且完全相容 gRPC 協議。Triple 原生支援串流通訊語義,可以運行在 HTTP/1 和 HTTP/2 傳輸協議之上,讓您可以使用 curl 或網頁瀏覽器等工具直接訪問後端 Dubbo 服務。

自從引入了 Triple 協議,Dubbo 也支援基於 Protocol Buffers 的服務定義和數據傳輸,但 Triple 的實現並不綁定接口定義語言(IDL),例如您可以直接使用 Java 接口定義和發佈 Triple 服務。Triple 擁有更好的網關和代理穿透能力,非常適合服務網格等涉及跨網關、代理通訊的部署架構。

Triple 協議的主要特性包括:

  • 支援 TLS 加密和明文數據傳輸
  • 支援背壓和流量控制
  • 支援串流通訊
  • 同時支援 HTTP/1 和 HTTP/2 傳輸協議

在程式設計和通訊模型方面,Triple 協議支援以下模式:

  • 客戶端非同步請求-響應
  • 伺服器端非同步請求-響應
  • 客戶端請求串流
  • 伺服器端響應串流
  • 雙向串流通訊

開發實踐

Dubbo2

Dubbo2 協議是構建在 TCP 傳輸層協議之上的 RPC 通訊協議,由於其精簡、靈活、高性能的特點,在 Dubbo2 時代得到了廣泛應用,是企業構建高性能、大規模微服務集群的首選通訊方案。在雲原生時代,我們更推薦使用通用性和穿透性更強的 Triple 協議。

Dubbo2 協議也內建支援 HTTP,因此您可以在開發過程中使用 curl 進行快速的服務驗證或除錯。

gRPC

您可以使用 Dubbo 進行微服務的開發和治理,然後使用 gRPC 協議進行底層通訊。但為什麼要這樣做,而不是直接使用 gRPC 框架呢?與之相比有什麼優勢?簡單的答案是,這是使用 gRPC 開發微服務的常見模式。請继续阅读以了解更多详细信息。

gRPC 是 Google 開源的基於 HTTP/2 的通訊協議,正如我們在 產品比較 文件中提到的那樣,gRPC 的定位是通訊協議及其官方實現,是一個纯粹的 RPC 框架。而 Dubbo 定位為微服務框架,為微服務實踐提供解決方案。因此,與 Dubbo 相比,gRPC 缺少對微服務程式設計模型、服務治理等能力的抽象。

在 Dubbo 生態系統中使用 gRPC 協議(gRPC over Dubbo Framework)是一個高效且輕量級的選擇,它允許您使用原生的 gRPC 協議進行通訊,同時避免了基於 gRPC 進行定制和開發的複雜性(基於 gRPC 進行定制和開發是很多企業級實踐中不可避免的環節,而 Dubbo 框架為開發者處理了這些事情,讓開發者可以最簡單的方式使用 gRPC)。

gRPC over Dubbo 範例

REST

微服務領域常見的通訊模式是 HTTP + JSON,包括 Spring Cloud、Microprofile 等主流微服務框架預設使用的都是這種通訊模式,Dubbo 也提供了對基於 HTTP 的程式設計和通訊模式的支援。

其他通訊協議

除了上述協議之外,您還可以在 Dubbo 上運行以下協議。對於 Dubbo 來說,只需簡單地更改配置即可切換底層服務通訊協議,而不會影響其他周邊 API 和治理能力。

  • Hessian2
  • Thrift
  • JsonRPC

異構微服務生態系統中的互操作性

有關協議遷移和多協議技術棧共存的實踐,請參考這篇部落格文章

配置方法

有關上述協議的配置和使用方法,包括如何配置 單端口多協議 支持,請參考以下 SDK 文件

自訂擴充

除了官方支持的通訊協議外,Dubbo 還支持擴展對新協議的支持。有關具體細節,請參考 【任務】-【擴展性】-【協議】


上次修改時間:2023 年 10 月 17 日:翻譯 en\overview\core-features\protocols.md (#2837) (047466fc43a)