服務網格
Dubbo Mesh 是 Dubbo 在雲原生環境下的全方位微服務解決方案。它幫助開發者將 Dubbo 服務與標準的 Kubernetes 原生服務系統整合,實現與 Istio 等領先服務網格產品的無縫連接。
以下是 Dubbo Mesh 的部署架構圖。
- 控制平面:Istio 作為統一的控制平面,提供叢集範圍的功能,例如 Kubernetes 適配、服務發現、憑證管理、可觀察性和流量管理。
- 數據平面:Dubbo 應用程式實例作為數據平面元件,並支援兩種部署模式
- 代理模式:Dubbo 和 Envoy 部署在同一個 Pod 中,所有進出 Dubbo 的流量都由 Envoy 攔截和管理。
- Proxyless 模式:Dubbo 實例獨立部署,彼此直接通訊,並透過 xDS 協議直接與控制平面互動。
有關服務網格架構的一般內容以及為何要與 Istio 控制平面整合,請參閱 Istio 官方網站。本文檔將重點介紹 Dubbo Mesh 解決方案本身。
Dubbo Mesh
代理網格
在代理模式下,Dubbo 與 Envoy 等 Sidecar 一起部署。
上圖描述了 Dubbo 代理網格的部署
- Dubbo 和 Envoy 部署在同一個 Pod 中,由 Istio 管理流量和治理。
- Dubbo 為商業應用程式提供程式設計 API 和 RPC 通訊功能,而其他功能,例如地址發現、負載均衡和路由,則委託給 Envoy,Envoy 會攔截所有進出流量。
- 控制平面透過 xDS 協議將配置分發給 Envoy,如圖中的虛線所示。
在代理模式下,使用基於 HTTP 的 Dubbo3 通訊層,例如 Triple、gRPC 和 REST,可以獲得更好的閘道穿透性和效能。
Proxyless 網格
在 Proxyless 模式下,沒有像 Envoy 這樣的代理元件。Dubbo 的程序獨立部署並直接通訊。Istio 的控制平面透過 xDS 協議與 Dubbo 程序互動以進行治理。
在 Proxyless 模式下,Dubbo 的部署與之前基本相同,但 Dubbo3 SDK 直接實現了 xDS 協議解析。
為何選擇 Proxyless 網格?
雖然代理模式提供了許多優點,例如平滑升級、多語言支援和最小的業務侵入性,但也帶來了一些挑戰。
- Sidecar 通信會增加額外的效能負擔,尤其在複雜的網路拓撲中更為明顯。
- Sidecar 的存在使應用程式生命週期管理變得更加複雜。
- 並非所有環境都能夠支援 Sidecar 部署和請求攔截。
在無代理模式下,Dubbo 进程繼續直接通訊。
- 沒有額外的代理相關負擔,使其更適合對效能敏感的應用程式。
- 它簡化了舊系統的遷移。
- 架構簡單易於管理。
- 它適用於幾乎所有部署環境。
範例任務
在獲得足夠的理論知識後,我們建議您參考以下範例進行實作練習。
視覺化
我們建議使用Dubbo Admin作為 Dubbo 叢集的視覺化控制台。它與所有 Kubernetes、Mesh 和非 Mesh 架構部署相容。
此外,您可以使用Istio 官方推薦的視覺化工具來管理您的 Dubbo Mesh 叢集。
與非 Istio 控制平面的整合
Dubbo Mesh 本身並未與任何控制平面產品實作綁定。您可以使用 Istio、Linkerd、Kuma 或任何支援 xDS 協定的控制平面產品。Sidecar 也是如此。
如果您已經體驗過基於 Istio 的 Dubbo Mesh範例任務,並且發現 Istio 滿足您對 Dubbo Mesh 的治理需求,那麼採用 Istio 作為您的控制平面是首選方案。
如果您發現 Dubbo 在 Istio 模式下的功能有限,並且需要這些功能,您可以考慮整合 Dubbo 的控制平面來取代 Istio,以獲得更好的原生 Dubbo 支援和效能。詳情請參閱基於自定義 Dubbo 控制平面的 Dubbo Mesh 範例任務。
簡而言之,這是 Dubbo 社群基於 Istio 發布的自定義版本控制平面。有關 Dubbo 控制平面的安裝和功能差異,請參閱上面的範例任務連結。