Dubbo Mesh - 從服務框架到統一服務控制平台

語言: CN / TW / HK

Apache Dubbo 是一款 RPC 服務開發框架,用於解決微服務架構下的服務治理與通信問題,官方提供了 Java、Golang 等多語言 SDK 實現。使用 Dubbo 開發的微服務原生具備相互之間的遠程地址發現與通信能力, 利用 Dubbo 提供的豐富服務治理特性,可以實現諸如服務發現、負載均衡、流量調度等服務治理訴求。Dubbo 被設計為高度可擴展,用户可以方便地實現流量攔截、選址的各種定製邏輯。

什麼是 Dubbo 3

Cloud Native

Dubbo 3 保持了 Dubbo 2 的經典架構,以解決微服務進程間通信為主要職責,通過豐富的服務治理(如地址發現、流量管理等)能力來更好地管控微服務集羣; Dubbo3 對原有框架的升級是全面的,體現在核心 Dubbo 特性的幾乎每個環節,通過升級實現了穩定性、性能、伸縮性、易用性的全面提升。

通用的通信協議: 全新的 RPC 協議應摒棄私有協議棧,以更通用的 HTTP/2 協議為傳輸層載體,藉助 HTTP 協議的標準化特性,解決流量通用性、穿透性等問題,讓協議能更好地應對前後端對接、網關代理等場景;支持 Stream 通信模式,滿足不同業務通信模型訴求的同時給集羣帶來更大的吞吐量。

面向百萬集羣實例,集羣高度可伸縮 :隨着微服務實踐的推廣,微服務集羣實例的規模也在不停地擴展,這得益於微服務輕量化、易於水平擴容的特性,同時也給整個集羣容量帶來了負擔,尤其是一些中心化的服務治理組件;Dubbo 3 需要解決實例規模擴展帶來的種種資源瓶頸問題,實現真正的無限水平擴容。

擁抱雲原生 :在雲原生時代,底層基礎設施的變革正深刻影響應用的部署、運維甚至開發過程,往上也影響了 Dubbo 3 微服務技術方案的選型與部署模式。Dubbo 3 在服務發現模型上全面對齊雲原生基礎設施的模型,在地址、生命週期等設計可與 Kubernetes 等容器調度平台對齊。

未來的 Dubbo 需要解決什麼問題

Cloud Native

在 Dubbo 3 功能基本完備的當下,我們開始重新對當前 Dubbo 的整體架構進行思考,總結出有以下幾個問題:

業務代碼與各微服務組件直接耦合,升級難度高

在目前的部署形態下,如果需要集成一個組件需要在業務代碼的環境中對該組件進行適配。舉一個簡單的例子,如果需要接入一個自定義數據格式轉換組件需要基於 Dubbo 的 SPI 在業務的代碼中織入對應的適配實現。這種部署方式對業務的部署造成較高的侵入。如果這個轉換組件需要升級,需要推動所有部署了該組件的業務方都升級一遍。在生產環境中難度極高。

多語言實現複雜度高

由於目前 Dubbo 所有的計算處理邏輯都以 SDK 的形式集成進業務代碼中,在需要跨語言進行調用的時候不可避免地導致了實現複雜度高的問題。 對於 Dubbo 來説,除了 Java 和 Golang 的 SDK 實現較為完善,其他語言仍欠缺對應完善的實現。 此外,對於一個攔截器功能,在 Java SDK 下的實現由於語言和接口設計的差異不可能直接複用到 Golang 的 SDK 上,一定程度上也給中間件開發帶來難度和不穩定因素。

治理能力下沉在數據面,中間件治理能力割裂

當前 Dubbo 的部署形態下在需要接入一箇中間件治理能力的時候,需要通過數據面業務代碼直接接入的方式集成的,這種方式會導致各治理組件獨立工作,從全局視角來看數據面的接入十分混亂,無法通過一個統一的視角進行統一治理。 同時由於這些組件是獨立接入的,組件之間的工作在某些場景下並不能很好地結合起來。

Dubbo Mesh

Cloud Native

Dubbo Mesh 從架構與部署形態上明確地區分為控制面與數據面。

其中控制面作為服務治理核心,具有抽象的、統一的模型,負責與底層基礎設施的對接,提供從啟動配置、服務發現、流量管理到認證鑑權等的統一治理入口。

數據面則專注在業務編程模型與通信能力上,基於多種部署形態(SDK、Sidecar、Agent)接入服務治理能力,基於動態部署能力從業務代碼中解耦出來。

總體來説,數據面更輕量、專注,控制面更內聚、強大,只需要部署一套控制面即可使用生產級的服務治理能力。

以下分別從控制面和數據面兩個部分分別説明在 Dubbo Mesh 下各自的職責與能力:

Dubbo 控制面

控制面是服務治理核心,具有抽象的、統一的模型,負責與底層基礎設施的對接,提供從啟動配置、服務發現、流量管理到認證鑑權等的統一治理入口。

1. 抽象的服務治理模型 :Dubbo 控制面繼承了 Dubbo 擴展性高的特點,劃分了各種領域與擴展點供各組件使用。支持自定義增加組件,只需要組件按照標準的格式進行擴展就可以在 Dubbo Mesh 下進行快速部署、拉起、熱更新等行為。

2. 屏蔽基礎設施與組件 :Dubbo 控制面將基礎設施如 Kubernetes 的接入通過組件的模式集成在內部,面向數據面屏蔽來自各基礎設施的差異,支持原生 Kubernetes 部署、VM 部署、混合部署等場景。

3. 統一的服務治理規則 :Dubbo 控制面支持對接統一的服務治理規則,支持通過一套規則治理多種框架。

4. 跨語言支持 :Dubbo 控制面通過通用的數據格式下發控制數據,配合數據面的多種部署方式解決跨語言的治理難題。

Dubbo 數據面

Dubbo 數據面將專注在業務編程模型與通信能力上,提供多種接入方式,對接來自 Dubbo 控制面的組件管控,支持通過組件熱更新的方式動態拉取控制面下發的治理規則識別與執行能力。

1. 專注編程與通信 :Dubbo 數據面將更專注於向業務開發者提供編程模型的支持。用户只需要依賴簡單的調用 API 即可完成對應的 RPC 遠程調用,而不再需要關心背後的治理能力的接入。

2. 多種接入方式 :Dubbo 數據面在未來將支持基於 SDK 的 proxyless 模式接入、基於 Agent 的無感知接入以及基於 Sidecar 的跨語言接入方式,儘可能覆蓋更過的使用場景,提高整體功能的易用性。

3. 組件熱更新 :Dubbo 數據面將支持動態加載、更新來自 Dubbo 控制面下發對應的治理組件能力,將治理能力的管理收口在 Dubbo 控制面進行統一管理,完善運維流程。

4. 治理規則識別與執行 :Dubbo 數據面主要負責對應的治理規則的識別與執行,通過動態加載能力的方式加載對應的治理能力,實現對數據面流量的治理能力。

Roadmap

在今年年底,Dubbo Mesh 將發佈具備有服務發現能力的版本,屆時將面向所有 Dubbo 用户提供從低版本平滑遷移到 Mesh 架構的能力;在明年初春季的時候發佈帶有治理能力的版本;在明年年底前發佈帶插件熱更新能力的版本。

點擊閲讀原文,直達 Dubbo 官網!