擴充性適配

擴充性適配

Dubbo 從設計之初就具有高度的擴充性。透過這些擴充點,您可以:

  • 攔截流量並控制其行為。
  • 微調 Dubbo 的一些預設策略和實作。
  • 將 Dubbo 服務適配到內部微服務叢集或其他主流開源元件。

一切皆可擴充

Dubbo 的擴充性允許將專案方便地劃分為各種子模組,實現熱插拔。使用者可以根據自身需求替換 Dubbo 的原生實作,以滿足特定的業務需求。

Admin Screenshot

  • 協定和編碼擴充:通訊協定、序列化協定等。
  • 流量控制擴充:叢集容錯策略、路由規則、負載均衡、速率限制、回退、斷路器等。
  • 服務治理擴充:服務註冊中心、配置中心、中繼資料中心、分散式交易、全鏈路追蹤、監控系統等。
  • 診斷和調優擴充:流量統計、執行緒池策略、日誌記錄、QoS 維護指令、健康檢查、配置載入等。

基於擴充點的微服務生態系統

眾多的擴充點和抽象化構成了 Dubbo 與各種微服務生態系統元件整合以及實現微服務治理能力的基礎。

Dubbo 各語言的 SDK 採用「微核心 + 外掛」的設計模式。每個程序中幾乎所有核心節點都被定義為擴充點。官方釋出的元件也以擴充點實作的形式釋出,因此 Dubbo 可以平等地對待所有官方和第三方元件擴充。

  • 擴充性適配是實現 Dubbo 微服務生態系統的關鍵。生態系統元件,例如全鏈路追蹤和服務註冊中心實作,都是基於 Filter、Registry 和 DynamicConfiguration 等擴充點進行適配的。
  • 擴充性適配為使用者提供了最大的靈活性,允許開發人員根據需要與內部元件整合並自訂核心功能。

extensibility-echosystem.png

以上是 Dubbo 中一些核心擴充點,按架構層級分類

  • 協定通訊層
  • 流量控制層
  • 服務治理層

協定通訊層

如同在通訊協定章節中強調的,Dubbo 並不綁定任何特定的協定。使用者可以選擇任何 RPC 和序列化協定的組合,例如 Triple、gRPC、Dubbo2、REST、客製化協定等等。

Protocol and Coding Principles

協定

Protocol 擴充點定義了相對應的 RPC 協定。藉由利用這個擴充點,Dubbo 可以作為一個統一的微服務開發和治理框架,允許底層通訊協定的靈活性。官方支援最流行的 RPC 通訊協定,如果您希望使用公司特定的 RPC 通訊協定,可以透過 Protocol 提供客製化的擴充實作。

序列化

Serialization 擴充點定義了序列化協定擴充。官方 Dubbo 提供了像是 Fastjson、Protobuf、Hessian2、Kryo 和 FST 等序列化協定。

流量控制層

Dubbo 在服務呼叫鏈中預先嵌入了大量的擴充點,允許使用者控制運行時流量並改變運行時呼叫的行為。

Protocol and Coding Principles

過濾器

過濾器,Dubbo 中的流量攔截器,基於 AOP 設計模式。它們會對每個服務呼叫進行前置和後置處理,處理像是存取日誌、加密/解密、流量統計、參數驗證等任務。

路由器

路由器是 Dubbo 流量控制的關鍵組件。它將符合特定條件的流量導向到特定的地址子集群組,實現各種流量控制模式。

負載平衡

在 Dubbo 中,負載平衡在路由器之後運作。它確保在一段時間內,呼叫能平均分配到地址子集中的所有機器上。

服務治理層

經典的 Dubbo 部署架構由一個註冊中心(服務發現)、配置中心和元資料中心組成。

Service Governance Architecture

本章節主要從架構和實作的角度討論 Dubbo 的服務治理。

註冊中心

註冊中心是 Dubbo 服務發現能力的基礎,官方支援像是 Zookeeper、Nacos、Etcd、Consul 和 Eureka 等註冊中心。

配置中心

配置中心是用於動態控制 Dubbo 行為的關鍵組件。所有在流量管理中配置的規則都會先儲存在配置中心。

元資料中心

與配置中心相比,從使用者的角度來看,元資料中心是唯讀的。

客製化擴充範例

以下範例展示了如何擴充 Dubbo 以解決實際問題。

更多擴充點

本文列出了一些 Dubbo 中常用的擴充點。然而,還有更多擴充點可供彈性客製化。不同語言的 SDK 在擴充定義和配置方法上可能會有差異。


最後修改日期:2023 年 10 月 16 日:將部分功能概述文件翻譯成英文 (#2831) (0c0180f8128)