W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
這篇文檔是關(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 展開。
如開篇所述,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ǔ)能力包括:
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)勢:
Dubbo3 是在云原生背景下誕生的,使用 Dubbo 構(gòu)建的微服務(wù)遵循云原生思想,能更好的復(fù)用底層云原生基礎(chǔ)設(shè)施、貼合云原生微服務(wù)架構(gòu)。這體現(xiàn)在:
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 提供更豐富的通信模型:
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):
透明地址發(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)。
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)在:
關(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 的云原生特性
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 在業(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í)施層面也面臨成本過高的問題
為了解決 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)行治理。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: