Dubbo Mesh 總體技術架構方案
作者: 江河清
Dubbo Mesh 作為 Dubbo 全面擁抱雲原生的又一個里程碑專案,將為 Dubbo 使用者提供平滑升級到 Service Mesh 架構的解決方案,同時繼續基於 Dubbo 強大可擴充套件性底座提供生產級服務治理、服務管控等能力。
本文將對 Dubbo Mesh 整體設計原則、部署架構與外掛管控機制的規劃做整體說明。
設計原則
Dubbo Mesh 以外掛化的方式接入各生態,除了部分維持基礎執行的架構外絕大部分的元件支援熱插拔,支援根據不同部署場景動態選擇部署方式。
外掛化能力的設計延續了 Dubbo 一貫的高可擴充套件性的特徵,基於這樣的一個基礎能力,開發者可以根據自己所需的真實部署場景進行定製,如接入內部的自建 DevOps 平臺等。通過外掛化的能力,也使得 Dubbo Mesh 在未來能更容易適配新的基礎元件;通過熱插拔的設計,絕大部分的新功能將能在生產環境平滑落地,很大程度上隔離由於中介軟體變更給業務帶來的變更協作影響。
部署架構
從架構與部署形態上來說 Dubbo Mesh 明確的區分為控制面與資料面。
其中控制面作為服務治理核心,具有抽象的、統一的模型,負責與底層基礎設施的對接,提供從啟動配置、服務發現、流量管理到認證鑑權等的統一治理入口。
資料面則專注在業務程式設計模型與通訊能力上,基於多種部署形態(SDK、Sidecar、Agent)接入服務治理能力,基於動態部署能力從業務程式碼中解耦出來。
從整體元件角色來說,Dubbo Mesh 中有兩種角色的元件:基礎元件、擴充套件性元件。
基礎元件由 Dubbo 原生提供,用於構建整個體系,如上圖中的 Admin 使用者管控元件、Dynamic Binary Push 動態分發元件(下文中會展開說明)、Proxy 資料代理元件等。
擴充套件性元件由 Dubbo 和其他生態共建提供,用於提供特定化能力,如上圖中功能的 Test 服務測試元件、Config 配置動態修改元件、Skywalking 全鏈路追蹤元件等。各擴充套件性元件均設計為可熱插,可以可選的動態開關部分能力。
資料流
上圖中除了部署架構的描述之外,還標識了在 Dubbo Mesh 這樣一個部署架構下的資料流向。
Dubbo Mesh 提供了兩種通訊模式,分別是 Proxy 模式與直連模式。在基礎元件中的 Proxy 提供到達資料面的通路,一個 Any 資料流,不繫結任何上層語義。擴充套件性元件可選通過 Proxy 進行互通,或者直接和資料面進行互通。
Proxy 模式不需要元件感知叢集的連線模式,適用於一些比較簡單、無獨立服務端的元件實現,基於 Dubbo 的能力能直接實現與資料面的通訊,降低管理連線的難度。直連模式用於整合一些複雜、有獨立服務端的元件,如全鏈路追蹤元件通常都需要獨立部署中心化的收集服務端,如果流量通過 Dubbo Proxy 進行轉發在一定程度上會導致部署成本的提高。
資料面架構
Dubbo Mesh 的資料面規劃分成 Java Proxyless 和 Sidecar 兩種模式。Java Proxyless 模式提供基於 Java ClassLoader 動態載入能力下的高效能部署方案;Sidecar 模式提供基於外接程序替換的跨語言、跨架構的通用部署方案。
Java Proxyless
Java Proxyless 模式是從常規 Dubbo Java 部署模式升級而來的,通過將 Dubbo 核心與實現分離的方式,基於 Java ClassLoader 的動態載入機制避免具體實現能力與業務程式碼進行耦合,提供中介軟體熱升級能力。
如上圖所示,Dubbo SDK 定義 Dubbo 擴充套件點,如 Router、Registry、LoadBalance 等,擴充套件點儘可能複用 Dubbo 已有的 SPI 機制。此外,Dubbo SDK 中整合一個統一的 DubboInitializer,執行時從控制面拉取所需執行時程式碼,組裝成為一個完整的 Dubbo SDK。
Sidecar
Sidecar 模式下 Dubbo 作為一個獨立程序執行,通過 UDS / TCP 等本地通訊方式或者請求攔截的方式管控流量。通過在 Sidecar 程序中進行資料加工、流量定製化路由等方式達成流量治理的目標。
Sidecar 模式也類似 Proxyless 模式提供擴充套件點,支援不同場景下自定義組裝實現、動態替換升級的能力。由於 Sidecar 是從流量層面直接進行治理,和業務程式碼本身不耦合,可以提供跨語言、跨架構的通用治理能力。
外掛推送模式
在前面的兩種資料面架構中都涉及到了擴充套件實現的動態下發的能力,本節中將對這部分能力做具體闡述說明。
Java Proxyless
Java Proxyless 模式下的擴充套件是通過 Java ClassLoader 進行動態類載入的,因此只需要拿到對應擴充套件的實現類既可實現載入。在 Dubbo Mesh 中通過統一的 Dynamic Binary Push 動態分發元件可以實現將每個外掛中自帶的對應類實現下發到資料面中進行載入。
Sidecar(Preview)
Sidecar 模式下,有多種方式能實現熱生效。這裡以替換程序的方式為例,在控制面中動態組裝 Sidecar 的程式碼並編譯,通過Dynamic Binary Push 動態分發元件動態下發 Sidecar 的二進位制包到資料面中的 Dubbo Agent,由 Dubbo Agent 負責拉起新的程序並切換流量到新的程序上。
更多關於 Dubbo Mesh 的動態可以關注 Apache Dubbo 社群官方公眾號(ApacheDubbo),及時獲取最新的訊息。
微信公眾號 | ApacheDubbo
釘釘群號 | 21976540
點選“此處”,直達 Dubbo 官網!
- 從 JDK 9 到 19,我們幫您提煉了和雲原生場景有關的能力列表(上)
- 統一觀測丨如何使用Prometheus 實現效能壓測指標可觀測
- CNStack 2.0:雲原生的技術中臺
- 全景剖析阿里雲容器網路資料鏈路(五):Terway ENI-Trunking
- 全景剖析阿里雲容器網路資料鏈路(四):Terway IPVLAN EBPF
- 全景剖析阿里雲容器網路資料鏈路(三):Terway ENIIP
- 談談我工作中的23個設計模式
- 雲邊協同下的統一應用管理:基於 OpenYurt 和 KubeVela 的解決方案
- OpenKruise v1.3:新增自定義 Pod Probe 探針能力與大規模叢集效能顯著提升
- Koordinator v0.7: 為任務排程領域注入新活力
- 傳統大型國企雲原生轉型,如何解決彈性、運維和團隊協同等問題
- Dubbo 3 易用性升級之 Dubbo 官網大改版
- 阿里雲容器服務 ACK 產品技術動態(202208)
- RocketMQ Streams在雲安全及 IoT 場景下的大規模最佳實踐
- RocketMQ 5.0:無狀態代理模式的探索與實踐
- Apache RocketMQ 5.0 在Stream場景的儲存增強
- 快手 RocketMQ 高效能實踐
- RocketMQ DLedger架構在小米的大規模實踐
- 定時任務報警通知解決方案詳解
- Dubbo Mesh 總體技術架構方案