Dubbo3 簡(jiǎn)介

2022-03-28 17:36 更新

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

Apache Dubbo 是一款微服務(wù)開(kāi)發(fā)框架,它提供了 RPC通信 與 微服務(wù)治理 兩大關(guān)鍵能力。這意味著,使用 Dubbo 開(kāi)發(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)行為來(lái)滿足自己的業(yè)務(wù)需求。

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

什么是Dubbo3?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Dubbo 強(qiáng)大的服務(wù)治理能力不僅體現(xiàn)在核心框架上,還包括其優(yōu)秀的擴(kuò)展能力以及周邊配套設(shè)施的支持。通過(guò) Filter、Router、Protocol 等幾乎存在于每一個(gè)關(guān)鍵流程上的擴(kuò)展點(diǎn)定義,我們可以豐富 Dubbo 的功能或?qū)崿F(xiàn)與其他微服務(wù)配套系統(tǒng)的對(duì)接,包括 Transaction、Tracing 目前都有通過(guò) SPI 擴(kuò)展的實(shí)現(xiàn)方案,具體可以參見(jià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ù)化問(wèn)題,因此充分考慮了大規(guī)模集群場(chǎng)景下的服務(wù)開(kāi)發(fā)與治理問(wèn)題,如易用性、性能、流量管理、集群可伸縮性等。在 Dubbo 開(kāi)源的將近 10 年時(shí)間內(nèi),Dubbo 幾乎成為了國(guó)內(nèi)微服務(wù)框架選型的首選框架,尤其受到大規(guī)模互聯(lián)網(wǎng)、IT企業(yè)的認(rèn)可,可以說(shuō)作為開(kāi)源服務(wù)框架,Dubbo 在支持微服務(wù)集群方面有著非常大的規(guī)模與非常久的實(shí)踐經(jīng)驗(yàn)積累,是最具有企業(yè)規(guī)模化微服務(wù)實(shí)踐話語(yǔ)權(quán)的框架之一。采用 Dubbo 的企業(yè)涵蓋互聯(lián)網(wǎng)、傳統(tǒng)IT、金融、生產(chǎn)制造業(yè)多個(gè)領(lǐng)域,一些典型用戶包括阿里巴巴、攜程、工商銀行、中國(guó)人壽、海爾、金蝶等。

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

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

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

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

云原生友好

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

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

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

Kubernetes

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

Kubernetes Service 是另一個(gè)層面的適配,這體現(xiàn)了服務(wù)定義與注冊(cè)向云原生底層基礎(chǔ)設(shè)施下沉的趨勢(shì)。在這種模式下,用戶不再需要搭建額外的注冊(cè)中心組件,Dubbo 消費(fèi)端節(jié)點(diǎn)能自動(dòng)對(duì)接到 Kubernetes(API-Server 或 DNS),根據(jù)服務(wù)名(Kubernetes Service Name) 查詢到實(shí)例列表(Kubernetes endpoints)。 此時(shí)服務(wù)是通過(guò)標(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了很多棘手的問(wèn)題,包括透明升級(jí)、多語(yǔ)言、依賴沖突、流量治理等。Service Mesh 的典型架構(gòu)是通過(guò)部署獨(dú)立的 Sidecar 組件來(lái)攔截所有的出口與入口流量,并在 Sidecar 中集成豐富的流量治理策略如負(fù)載均衡、路由等,除此之外,Service Mesh 還需要一個(gè)控制面(Control Panel)來(lái)實(shí)現(xiàn)對(duì) Sidecar 流量的管控,即各種策略下發(fā)。我們?cè)谶@里稱這種架構(gòu)為經(jīng)典 Mesh。

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

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

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


可以設(shè)想,在不同的組織、不同的發(fā)展階段,未來(lái)以 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 直接通過(guò) xDS 與控制面通信。Dubbo 微服務(wù)允許部署在物理機(jī)、容器、Kubernetes 平臺(tái)之上,能做到以 Admin 為控制面,以統(tǒng)一的流量治理規(guī)則進(jìn)行治理。

了解更多

What’s New in Dubbo3

體驗(yàn) Dubbo3

遷移到 Dubbo3


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)