擴充性適配
Dubbo 從設計之初就具有高度的擴充性。透過這些擴充點,您可以:
- 攔截流量並控制其行為。
- 微調 Dubbo 的一些預設策略和實作。
- 將 Dubbo 服務適配到內部微服務叢集或其他主流開源元件。
一切皆可擴充
Dubbo 的擴充性允許將專案方便地劃分為各種子模組,實現熱插拔。使用者可以根據自身需求替換 Dubbo 的原生實作,以滿足特定的業務需求。
- 協定和編碼擴充:通訊協定、序列化協定等。
- 流量控制擴充:叢集容錯策略、路由規則、負載均衡、速率限制、回退、斷路器等。
- 服務治理擴充:服務註冊中心、配置中心、中繼資料中心、分散式交易、全鏈路追蹤、監控系統等。
- 診斷和調優擴充:流量統計、執行緒池策略、日誌記錄、QoS 維護指令、健康檢查、配置載入等。
基於擴充點的微服務生態系統
眾多的擴充點和抽象化構成了 Dubbo 與各種微服務生態系統元件整合以及實現微服務治理能力的基礎。
Dubbo 各語言的 SDK 採用「微核心 + 外掛」的設計模式。每個程序中幾乎所有核心節點都被定義為擴充點。官方釋出的元件也以擴充點實作的形式釋出,因此 Dubbo 可以平等地對待所有官方和第三方元件擴充。
- 擴充性適配是實現 Dubbo 微服務生態系統的關鍵。生態系統元件,例如全鏈路追蹤和服務註冊中心實作,都是基於 Filter、Registry 和 DynamicConfiguration 等擴充點進行適配的。
- 擴充性適配為使用者提供了最大的靈活性,允許開發人員根據需要與內部元件整合並自訂核心功能。
以上是 Dubbo 中一些核心擴充點,按架構層級分類
- 協定通訊層
- 流量控制層
- 服務治理層
協定通訊層
如同在通訊協定章節中強調的,Dubbo 並不綁定任何特定的協定。使用者可以選擇任何 RPC 和序列化協定的組合,例如 Triple、gRPC、Dubbo2、REST、客製化協定等等。
協定
Protocol 擴充點定義了相對應的 RPC 協定。藉由利用這個擴充點,Dubbo 可以作為一個統一的微服務開發和治理框架,允許底層通訊協定的靈活性。官方支援最流行的 RPC 通訊協定,如果您希望使用公司特定的 RPC 通訊協定,可以透過 Protocol 提供客製化的擴充實作。
序列化
Serialization 擴充點定義了序列化協定擴充。官方 Dubbo 提供了像是 Fastjson、Protobuf、Hessian2、Kryo 和 FST 等序列化協定。
流量控制層
Dubbo 在服務呼叫鏈中預先嵌入了大量的擴充點,允許使用者控制運行時流量並改變運行時呼叫的行為。
過濾器
過濾器,Dubbo 中的流量攔截器,基於 AOP 設計模式。它們會對每個服務呼叫進行前置和後置處理,處理像是存取日誌、加密/解密、流量統計、參數驗證等任務。
路由器
路由器是 Dubbo 流量控制的關鍵組件。它將符合特定條件的流量導向到特定的地址子集群組,實現各種流量控制模式。
負載平衡
在 Dubbo 中,負載平衡在路由器之後運作。它確保在一段時間內,呼叫能平均分配到地址子集中的所有機器上。
服務治理層
經典的 Dubbo 部署架構由一個註冊中心(服務發現)、配置中心和元資料中心組成。
本章節主要從架構和實作的角度討論 Dubbo 的服務治理。
註冊中心
註冊中心是 Dubbo 服務發現能力的基礎,官方支援像是 Zookeeper、Nacos、Etcd、Consul 和 Eureka 等註冊中心。
配置中心
配置中心是用於動態控制 Dubbo 行為的關鍵組件。所有在流量管理中配置的規則都會先儲存在配置中心。
元資料中心
與配置中心相比,從使用者的角度來看,元資料中心是唯讀的。
客製化擴充範例
以下範例展示了如何擴充 Dubbo 以解決實際問題。
更多擴充點
本文列出了一些 Dubbo 中常用的擴充點。然而,還有更多擴充點可供彈性客製化。不同語言的 SDK 在擴充定義和配置方法上可能會有差異。