Dubbo3 簡介

2022-03-28 17:36 更新

這篇文檔是關(guān)于 Dubbo 的簡單介紹,涵蓋 Dubbo 的核心概念、基本使用方式以及 Dubbo3 核心功能,無論你是 Dubbo 的老用戶還是新用戶,都可以通過這篇 文檔快速了解 Dubbo 及新版本帶來的變化。

Apache Dubbo 是一款微服務(wù)開發(fā)框架,它提供了 RPC通信 與 微服務(wù)治理 兩大關(guān)鍵能力。這意味著,使用 Dubbo 開發(fā)的微服務(wù),將具備相互之間的遠(yuǎn)程發(fā)現(xiàn)與通信能力, 同時(shí)利用 Dubbo 提供的豐富服務(wù)治理能力,可以實(shí)現(xiàn)諸如服務(wù)發(fā)現(xiàn)、負(fù)載均衡、流量調(diào)度等服務(wù)治理訴求。同時(shí) Dubbo 是高度可擴(kuò)展的,用戶幾乎可以在任意功能點(diǎn)去定制自己的實(shí)現(xiàn),以改變框架的默認(rèn)行為來滿足自己的業(yè)務(wù)需求。

Dubbo3 基于 Dubbo2 演進(jìn)而來,在保持原有核心功能特性的同時(shí), Dubbo3 在易用性、超大規(guī)模微服務(wù)實(shí)踐、云原生基礎(chǔ)設(shè)施適配、安全設(shè)計(jì)等幾大方向上進(jìn)行了全面升級。 以下文檔都將基于 Dubbo3 展開。

什么是Dubbo3?

如開篇所述,Dubbo 提供了構(gòu)建云原生微服務(wù)業(yè)務(wù)的一站式解決方案,可以使用 Dubbo 快速定義并發(fā)布微服務(wù)組件,同時(shí)基于 Dubbo 開箱即用的豐富特性及超強(qiáng)的擴(kuò)展能力,構(gòu)建運(yùn)維整個(gè)微服務(wù)體系所需的各項(xiàng)服務(wù)治理能力,如 Tracing(追蹤)、Transaction(事務(wù)) 等,Dubbo 提供的基礎(chǔ)能力包括:

  • 服務(wù)發(fā)現(xiàn)
  • 流式通信
  • 負(fù)載均衡
  • 流量治理
  • …..

Dubbo 計(jì)劃提供豐富的多語言客戶端實(shí)現(xiàn),其中 Java、Golang 版本是當(dāng)前穩(wěn)定性、活躍度最好的版本,其他多語言客戶端正在持續(xù)建設(shè)中。

自開源以來,Dubbo 就被一眾大規(guī)?;ヂ?lián)網(wǎng)、IT公司選型,經(jīng)過多年企業(yè)實(shí)踐積累了大量經(jīng)驗(yàn)。Dubbo3 是站在巨人肩膀上的下一代產(chǎn)品,它汲取了上一代的優(yōu)點(diǎn)并針對已知問題做了大量優(yōu)化,因此,Dubbo 在解決業(yè)務(wù)落地與規(guī)?;瘜?shí)踐方面有著無可比擬的優(yōu)勢:

  • 開箱即用易用性高,如 Java 版本的面向接口代理特性能實(shí)現(xiàn)本地透明調(diào)用功能豐富,基于原生庫或輕量擴(kuò)展即可實(shí)現(xiàn)絕大多數(shù)的微服務(wù)治理能力
  • 超大規(guī)模微服務(wù)集群實(shí)踐高性能的跨進(jìn)程通信協(xié)議地址發(fā)現(xiàn)、流量治理層面,輕松支持百萬規(guī)模集群實(shí)例
  • 企業(yè)級微服務(wù)治理能力服務(wù)測試服務(wù)Mock(模擬)

Dubbo3 是在云原生背景下誕生的,使用 Dubbo 構(gòu)建的微服務(wù)遵循云原生思想,能更好的復(fù)用底層云原生基礎(chǔ)設(shè)施、貼合云原生微服務(wù)架構(gòu)。這體現(xiàn)在:

  • 服務(wù)支持部署在容器、Kubernetes(K8S)平臺,服務(wù)生命周期可實(shí)現(xiàn)與平臺調(diào)度周期對齊;
  • 支持經(jīng)典 Service Mesh (服務(wù)網(wǎng)格)微服務(wù)架構(gòu),引入了 Proxyless Mesh 架構(gòu),進(jìn)一步簡化 Mesh 的落地與遷移成本,提供更靈活的選擇;
  • 作為橋接層,支持與 SpringCloud、gRPC 等異構(gòu)微服務(wù)體系的互調(diào)互通

一站式微服務(wù)解決方案

Dubbo 提供了從服務(wù)定義、服務(wù)發(fā)現(xiàn)、服務(wù)通信到流量管控等幾乎所有的服務(wù)治理能力,并且嘗試從使用上對用戶屏蔽底層細(xì)節(jié),以提供更好的易用性。

定義服務(wù)在 Dubbo 中非常簡單與直觀,可以選擇使用與某種語言綁定的方式(如 Java 中可直接定義Interface),也可以使用 Protobuf IDL 語言中立的方式。無論選擇哪種方式,站在服務(wù)消費(fèi)方的視角,都可以通過 Dubbo 提供的透明代理直接編碼。

需要注意的是,在 Dubbo 中,我們提到服務(wù)時(shí),通常是指 RPC 粒度的、提供某個(gè)具體業(yè)務(wù)增刪改功能的接口或方法,與一些微服務(wù)概念書籍中泛指的服務(wù)并不是一個(gè)概念。

點(diǎn)對點(diǎn)的服務(wù)通信是 Dubbo 提供的另一項(xiàng)基本能力,Dubbo 以 RPC 的方式將請求數(shù)據(jù)(Request)發(fā)送給后端服務(wù),并接收服務(wù)端返回的計(jì)算結(jié)果(Response)。RPC 通信對用戶來說是完全透明的,使用者無需關(guān)心請求是如何發(fā)出去的、發(fā)到了哪里,每次調(diào)用只需要拿到正確的調(diào)用結(jié)果就行。同步的 Request-Response 是默認(rèn)的通信模型,它最簡單但卻不能覆蓋所有的場景,因此,Dubbo 提供更豐富的通信模型:

  • 消費(fèi)端異步請求(Client Side Asynchronous Request-Response)
  • 提供端異步執(zhí)行(Server Side Asynchronous Request-Response)
  • 消費(fèi)端請求流(Request Streaming)
  • 提供端響應(yīng)流(Response Streaming)
  • 雙向流式通信(Bidirectional Streaming)

Dubbo 的服務(wù)發(fā)現(xiàn)機(jī)制,讓微服務(wù)組件之間可以獨(dú)立演進(jìn)并任意部署,消費(fèi)端可以在無需感知對端部署位置與 IP 地址的情況下完成通信。Dubbo 提供的是 Client-Based 的服務(wù)發(fā)現(xiàn)機(jī)制,使用者可以有多種方式啟用服務(wù)發(fā)現(xiàn):

  • 使用獨(dú)立的注冊中心組件,如 Nacos、Zookeeper、Consul、Etcd 等。
  • 將服務(wù)的組織與注冊交給底層容器平臺,如 Kubernetes,這被理解是一種更云原生的方式

透明地址發(fā)現(xiàn)讓 Dubbo 請求可以被發(fā)送到任意 IP 實(shí)例上,這個(gè)過程中流量被隨機(jī)分配。當(dāng)需要對流量進(jìn)行更豐富、更細(xì)粒度的管控時(shí),就可以用到 Dubbo 的流量管控策略,Dubbo 提供了包括負(fù)載均衡、流量路由、請求超時(shí)、流量降級、重試等策略,基于這些基礎(chǔ)能力可以輕松的實(shí)現(xiàn)更多場景化的路由方案,包括金絲雀發(fā)布、A/B測試、權(quán)重路由、同區(qū)域優(yōu)先等,更酷的是,Dubbo 支持流控策略在運(yùn)行態(tài)動(dòng)態(tài)生效,無需重新部署。

Dubbo 強(qiáng)大的服務(wù)治理能力不僅體現(xiàn)在核心框架上,還包括其優(yōu)秀的擴(kuò)展能力以及周邊配套設(shè)施的支持。通過 Filter、Router、Protocol 等幾乎存在于每一個(gè)關(guān)鍵流程上的擴(kuò)展點(diǎn)定義,我們可以豐富 Dubbo 的功能或?qū)崿F(xiàn)與其他微服務(wù)配套系統(tǒng)的對接,包括 Transaction、Tracing 目前都有通過 SPI 擴(kuò)展的實(shí)現(xiàn)方案,具體可以參見 Dubbo 擴(kuò)展性的詳情,也可以在 apache/dubbo-spi-extensions 項(xiàng)目中發(fā)現(xiàn)與更多的擴(kuò)展實(shí)現(xiàn)。

大規(guī)模企業(yè)微服務(wù)實(shí)踐沉淀

Dubbo 最早誕生于阿里巴巴,隨后加入 Apache 軟件基金會(huì),項(xiàng)目從設(shè)計(jì)之初就是為了解決企業(yè)的服務(wù)化問題,因此充分考慮了大規(guī)模集群場景下的服務(wù)開發(fā)與治理問題,如易用性、性能、流量管理、集群可伸縮性等。在 Dubbo 開源的將近 10 年時(shí)間內(nèi),Dubbo 幾乎成為了國內(nèi)微服務(wù)框架選型的首選框架,尤其受到大規(guī)模互聯(lián)網(wǎng)、IT企業(yè)的認(rèn)可,可以說作為開源服務(wù)框架,Dubbo 在支持微服務(wù)集群方面有著非常大的規(guī)模與非常久的實(shí)踐經(jīng)驗(yàn)積累,是最具有企業(yè)規(guī)?;⒎?wù)實(shí)踐話語權(quán)的框架之一。采用 Dubbo 的企業(yè)涵蓋互聯(lián)網(wǎng)、傳統(tǒng)IT、金融、生產(chǎn)制造業(yè)多個(gè)領(lǐng)域,一些典型用戶包括阿里巴巴、攜程、工商銀行、中國人壽、海爾、金蝶等。

在企業(yè)大規(guī)模實(shí)踐的過程中,Dubbo 的穩(wěn)定性得到了驗(yàn)證,服務(wù)治理的易用性與豐富度也在不斷提升,而也就是在這樣的背景下催生了下一代的產(chǎn)品 - Dubbo3。Dubbo3 的整個(gè)設(shè)計(jì)與開發(fā)過程,始終有來自社區(qū)團(tuán)隊(duì)與眾多企業(yè)用戶的共同參與,因此 Dubbo3 的許多核心架構(gòu)與功能都充分考慮了大規(guī)模微服務(wù)實(shí)踐訴求。阿里巴巴是參與在 Dubbo3 中的核心力量之一,作為企業(yè)用戶其主導(dǎo)了該版本許多核心功能的設(shè)計(jì)與開發(fā),阿里巴巴把 Dubbo3 社區(qū)版本確定為其未來內(nèi)部主推的服務(wù)框架,并選擇將內(nèi)部 HSF 通過 Dubbo3 的形式貢獻(xiàn)到開源社區(qū),在阿里巴巴內(nèi)部,眾多業(yè)務(wù)線包括電商系統(tǒng)的考拉、交易平臺,以及餓了么、釘釘?shù)榷家呀?jīng)成功遷移到 Dubbo3 版本。同樣全程參與在 Dubbo3 開發(fā)與驗(yàn)證試點(diǎn)過程中的企業(yè)用戶包括工商銀行、攜程、斗魚、小米等。

Dubbo 的大規(guī)模實(shí)踐經(jīng)驗(yàn)主要體現(xiàn)在:

  • 高性能通信
  • 高可擴(kuò)展性
  • 超大規(guī)模集群實(shí)例水平擴(kuò)展
  • 豐富的服務(wù)治理能力

關(guān)于 Dubbo 調(diào)用性能、支持超大規(guī)模集群地址方面的評測數(shù)據(jù),將在隨后發(fā)布,敬請期待。

云原生友好

Dubbo 從設(shè)計(jì)上是完全遵循云原生微服務(wù)開發(fā)理念的,這體現(xiàn)在多個(gè)方面,首先是對云原生基礎(chǔ)設(shè)施與部署架構(gòu)的支持,包括 Kubernetes、Service Mesh 等,另一方面,Dubbo 眾多核心組件都已面向云原生升級,包括 Triple 協(xié)議、統(tǒng)一路由規(guī)則、對多語言支持。值得一提的是,如何使用 Dubbo 支持彈性伸縮的服務(wù)如 Serverless 也在未來計(jì)劃之中,這包括利用 Native Image 提高 Dubbo 的啟動(dòng)速度與資源消耗等。

結(jié)合當(dāng)前版本,本節(jié)主要從以下兩點(diǎn)展開 Dubbo 的云原生特性

  • 容器調(diào)度平臺(Kubernetes)
  • Service Mesh

Kubernetes

Dubbo 微服務(wù)要支持 Kubernetes 平臺調(diào)度,最基礎(chǔ)的就是實(shí)現(xiàn) dubbo 服務(wù)生命周期與容器生命周期的對齊,這包括 Dubbo 的啟動(dòng)、銷毀、服務(wù)注冊等生命周期事件。相比于以往 Dubbo 自行定義生命周期事件,并要求開發(fā)人員在運(yùn)維實(shí)踐過程中遵守約定,Kubernetes 底層基礎(chǔ)設(shè)施定義了嚴(yán)格的組件生命周期事件(probe),轉(zhuǎn)而要求 Dubbo 去按約定適配。

Kubernetes Service 是另一個(gè)層面的適配,這體現(xiàn)了服務(wù)定義與注冊向云原生底層基礎(chǔ)設(shè)施下沉的趨勢。在這種模式下,用戶不再需要搭建額外的注冊中心組件,Dubbo 消費(fèi)端節(jié)點(diǎn)能自動(dòng)對接到 Kubernetes(API-Server 或 DNS),根據(jù)服務(wù)名(Kubernetes Service Name) 查詢到實(shí)例列表(Kubernetes endpoints)。 此時(shí)服務(wù)是通過標(biāo)準(zhǔn)的 Kubernetes Service API 定義,并被調(diào)度到各個(gè)節(jié)點(diǎn)。

Service Mesh

Service Mesh 在業(yè)界得到了廣泛的傳播與認(rèn)可,并被認(rèn)為是下一代的微服務(wù)架構(gòu),這主要是因?yàn)樗鉀Q了很多棘手的問題,包括透明升級、多語言、依賴沖突、流量治理等。Service Mesh 的典型架構(gòu)是通過部署獨(dú)立的 Sidecar 組件來攔截所有的出口與入口流量,并在 Sidecar 中集成豐富的流量治理策略如負(fù)載均衡、路由等,除此之外,Service Mesh 還需要一個(gè)控制面(Control Panel)來實(shí)現(xiàn)對 Sidecar 流量的管控,即各種策略下發(fā)。我們在這里稱這種架構(gòu)為經(jīng)典 Mesh。

然而任何技術(shù)架構(gòu)都不是完美的,經(jīng)典 Mesh 在實(shí)施層面也面臨成本過高的問題

  1. 需要運(yùn)維控制面(Control Panel)
  2. 需要運(yùn)維 Sidecar
  3. 需要考慮如何從原有 SDK 遷移到 Sidecar
  4. 需要考慮引入 Sidecar 后整個(gè)鏈路的性能損耗

為了解決 Sidecar 引入的相關(guān)成本問題,Dubbo 引入了另一種變相的 Mesh 架構(gòu) - Proxyless Mesh,顧名思義,Proxyless Mesh 就是指沒有 Sidecar 的部署,轉(zhuǎn)而由 Dubbo SDK 直接與控制面交互,其架構(gòu)圖如下:


可以設(shè)想,在不同的組織、不同的發(fā)展階段,未來以 Dubbo 構(gòu)建的微服務(wù)將會(huì)允許有三種部署架構(gòu):傳統(tǒng) SDK、基于 Sidecar 的 Service Mesh、脫離 Sidecar 的 Proxyless Mesh。基于 Sidecar 的 Service Mesh,即經(jīng)典的 Mesh 架構(gòu),獨(dú)立的 sidecar 運(yùn)行時(shí)接管所有的流量,脫離 Sidecar 的 Proxyless Mesh,富 SDK 直接通過 xDS 與控制面通信。Dubbo 微服務(wù)允許部署在物理機(jī)、容器、Kubernetes 平臺之上,能做到以 Admin 為控制面,以統(tǒng)一的流量治理規(guī)則進(jìn)行治理。

了解更多

What’s New in Dubbo3

體驗(yàn) Dubbo3

遷移到 Dubbo3


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號