??【Alibaba微服務(wù)技術(shù)系列】「Dubbo3.0技術(shù)專題」第一章之Dubbo3新特性概覽的介紹說明

Dubbo3的微服務(wù)框架系列

??【Alibaba微服務(wù)技術(shù)系列】「Dubbo3.0技術(shù)專題」總體技術(shù)體系介紹及技術(shù)指南(目錄)

本系列專題是關(guān)于 Dubbo 的簡單介紹,涵蓋Dubbo的核心概念、基本使用方式以及Dubbo3核心功能。

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的升級發(fā)展

  • Dubbo3基于Dubbo2演進(jìn)而來,在保持原有核心功能特性的同時(shí), Dubbo3在易用性、超大規(guī)模微服務(wù)實(shí)踐、云原生基礎(chǔ)設(shè)施適配等幾大方向上進(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 等

Dubbo3提供的基礎(chǔ)能力包括:

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

Dubbo3的語言的層面范圍

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

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

  • 服務(wù)支持部署在容器、Kubernetes平臺,服務(wù)生命周期可實(shí)現(xiàn)與平臺調(diào)度周期對齊;
  • 支持經(jīng)典Service Mesh微服務(wù)架構(gòu),引入了 Proxyless Mesh 架構(gòu),進(jìn)一步簡化 Mesh 的落地與遷移成本,提供更靈活的選擇;
  • Dubbo作為橋接層,支持與 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)。

云原生友好

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)速度與資源消耗等。
主要從以下兩點(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 Plane)來實(shí)現(xiàn)對 Sidecar 流量的管控,即各種策略下發(fā)。我們在這里稱這種架構(gòu)為經(jīng)典 Mesh。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容