Dubbo3 部署架構(gòu)

2022-03-30 10:27 更新

部署架構(gòu)(注冊(cè)中心 配置中心 元數(shù)據(jù)中心)

了解 Dubbo 的三大中心化組件,它們各自的職責(zé)、工作方式。

作為一個(gè)微服務(wù)框架,Dubbo sdk 跟隨著微服務(wù)組件被部署在分布式集群各個(gè)位置,為了在分布式環(huán)境下實(shí)現(xiàn)各個(gè)微服務(wù)組件間的協(xié)作, Dubbo 定義了一些中心化組件,這包括:

  • 注冊(cè)中心。協(xié)調(diào) Consumer 與 Provider 之間的地址注冊(cè)與發(fā)現(xiàn)
  • 配置中心。
    • 存儲(chǔ) Dubbo 啟動(dòng)階段的全局配置,保證配置的跨環(huán)境共享與全局一致性
    • 負(fù)責(zé)服務(wù)治理規(guī)則(路由規(guī)則、動(dòng)態(tài)配置等)的存儲(chǔ)與推送。
  • 元數(shù)據(jù)中心。
    • 接收 Provider 上報(bào)的服務(wù)接口元數(shù)據(jù),為 Admin 等控制臺(tái)提供運(yùn)維能力(如服務(wù)測(cè)試、接口文檔等)
    • 作為服務(wù)發(fā)現(xiàn)機(jī)制的補(bǔ)充,提供額外的接口/方法級(jí)別配置信息的同步能力,相當(dāng)于注冊(cè)中心的額外擴(kuò)展

http://imgs/v3/concepts/threecenters.png

上圖完整的描述了 Dubbo 微服務(wù)組件與各個(gè)中心的交互過(guò)程。

以上三個(gè)中心并不是運(yùn)行 Dubbo 的必要條件,用戶(hù)完全可以根據(jù)自身業(yè)務(wù)情況決定只啟用其中一個(gè)或多個(gè),以達(dá)到簡(jiǎn)化部署的目的。通常情況下,所有用戶(hù)都會(huì)以獨(dú)立的注冊(cè)中心 開(kāi)始 Dubbo 服務(wù)開(kāi)發(fā),而配置中心、元數(shù)據(jù)中心則會(huì)在微服務(wù)演進(jìn)的過(guò)程中逐步的按需被引入進(jìn)來(lái)。

注冊(cè)中心

注冊(cè)中心扮演著非常重要的角色,它承載著服務(wù)注冊(cè)和服務(wù)發(fā)現(xiàn)的職責(zé)。目前Dubbo支持以下兩種粒度的服務(wù)發(fā)現(xiàn)和服務(wù)注冊(cè),分別是接口級(jí)別和應(yīng)用級(jí)別,注冊(cè)中心可以按需進(jìn)行部署:

  • 在傳統(tǒng)的Dubbo SDK使用姿勢(shì)中,如果僅僅提供直連模式的RPC服務(wù),不需要部署注冊(cè)中心。
  • 無(wú)論是接口級(jí)別還是應(yīng)用級(jí)別,如果需要Dubbo SDK自身來(lái)做服務(wù)注冊(cè)和服務(wù)發(fā)現(xiàn),則可以選擇部署注冊(cè)中心,在Dubbo中集成對(duì)應(yīng)的注冊(cè)中心。
  • 在Dubbo + Mesh 的場(chǎng)景下,隨著 Dubbo 服務(wù)注冊(cè)能力的弱化,Dubbo內(nèi)的注冊(cè)中心也不再是必選項(xiàng),其職責(zé)開(kāi)始被控制面取代,如果采用了Dubbo + Mesh的部署方式,無(wú)論是ThinSDK的mesh方式還是Proxyless的mesh方式,都不再需要獨(dú)立部署注冊(cè)中心。

而注冊(cè)中心并不依賴(lài)于配置中心和元數(shù)據(jù)中心,如下圖所示:

http://imgs/v3/concepts/centers-registry.png

該圖中沒(méi)有部署配置中心和元數(shù)據(jù)中心,在Dubbo中會(huì)默認(rèn)將注冊(cè)中心的實(shí)例同時(shí)作為配置中心和元數(shù)據(jù)中心,這是Dubbo的默認(rèn)行為,如果確實(shí)不需要配置中心或者元數(shù)據(jù)中心的能力,可在配置中關(guān)閉,在注冊(cè)中心的配置中有兩個(gè)配置分別為use-as-config-center和use-as-metadata-center,將配置置為false即可。

元數(shù)據(jù)中心

元數(shù)據(jù)中心在2.7.x版本開(kāi)始支持,隨著應(yīng)用級(jí)別的服務(wù)注冊(cè)和服務(wù)發(fā)現(xiàn)在Dubbo中落地,元數(shù)據(jù)中心也變的越來(lái)越重要。在以下幾種情況下會(huì)需要部署元數(shù)據(jù)中心:

  1. 對(duì)于一個(gè)原先采用老版本Dubbo搭建的應(yīng)用服務(wù),在遷移到Dubbo 3時(shí),Dubbo 3 會(huì)需要一個(gè)元數(shù)據(jù)中心來(lái)維護(hù)RPC服務(wù)與應(yīng)用的映射關(guān)系(即接口與應(yīng)用的映射關(guān)系),因?yàn)槿绻捎昧藨?yīng)用級(jí)別的服務(wù)發(fā)現(xiàn)和服務(wù)注冊(cè),在注冊(cè)中心中將采用“應(yīng)用 —— 實(shí)例列表”結(jié)構(gòu)的數(shù)據(jù)組織形式,不再是以往的“接口 —— 實(shí)例列表”結(jié)構(gòu)的數(shù)據(jù)組織形式,而以往用接口級(jí)別的服務(wù)注冊(cè)和服務(wù)發(fā)現(xiàn)的應(yīng)用服務(wù)在遷移到應(yīng)用級(jí)別時(shí),得不到接口與應(yīng)用之間的對(duì)應(yīng)關(guān)系,從而無(wú)法從注冊(cè)中心得到實(shí)例列表信息,所以Dubbo為了兼容這種場(chǎng)景,在Provider端啟動(dòng)時(shí),會(huì)往元數(shù)據(jù)中心存儲(chǔ)接口與應(yīng)用的映射關(guān)系。
  2. 為了讓注冊(cè)中心更加聚焦與地址的發(fā)現(xiàn)和推送能力,減輕注冊(cè)中心的負(fù)擔(dān),元數(shù)據(jù)中心承載了所有的服務(wù)元數(shù)據(jù)、大量接口/方法級(jí)別配置信息等,無(wú)論是接口粒度還是應(yīng)用粒度的服務(wù)發(fā)現(xiàn)和注冊(cè),元數(shù)據(jù)中心都起到了重要的作用。

如果有以上兩種需求,都可以選擇部署元數(shù)據(jù)中心,并通過(guò)Dubbo的配置來(lái)集成該元數(shù)據(jù)中心。

元數(shù)據(jù)中心并不依賴(lài)于注冊(cè)中心和配置中心,用戶(hù)可以自由選擇是否集成和部署元數(shù)據(jù)中心,如下圖所示:

http://imgs/v3/concepts/centers-metadata.png

該圖中不配備配置中心,意味著可以不需要全局管理配置的能力。該圖中不配備注冊(cè)中心,意味著可能采用了Dubbo mesh的方案,也可能不需要進(jìn)行服務(wù)注冊(cè),僅僅接收直連模式的服務(wù)調(diào)用。

配置中心

配置中心與其他兩大中心不同,它無(wú)關(guān)于接口級(jí)還是應(yīng)用級(jí),它與接口并沒(méi)有對(duì)應(yīng)關(guān)系,它僅僅與配置數(shù)據(jù)有關(guān),即使沒(méi)有部署注冊(cè)中心和元數(shù)據(jù)中心,配置中心也能直接被接入到Dubbo應(yīng)用服務(wù)中。在整個(gè)部署架構(gòu)中,整個(gè)集群內(nèi)的實(shí)例(無(wú)論是Provider還是Consumer)都將會(huì)共享該配置中心集群中的配置,如下圖所示:  http://imgs/v3/concepts/centers-config.png

該圖中不配備注冊(cè)中心,意味著可能采用了Dubbo mesh的方案,也可能不需要進(jìn)行服務(wù)注冊(cè),僅僅接收直連模式的服務(wù)調(diào)用。

該圖中不配備元數(shù)據(jù)中心,意味著Consumer可以從Provider暴露的MetadataService獲取服務(wù)元數(shù)據(jù),從而實(shí)現(xiàn)RPC調(diào)用

保證三大中心高可用的部署架構(gòu)

雖然三大中心已不再是Dubbo應(yīng)用服務(wù)所必須的,但是在真實(shí)的生產(chǎn)環(huán)境中,一旦已經(jīng)集成并且部署了該三大中心,三大中心還是會(huì)面臨可用性問(wèn)題,Dubbo需要支持三大中心的高可用方案。在Dubbo中就支持多注冊(cè)中心、多元數(shù)據(jù)中心、多配置中心,來(lái)滿足同城多活、兩地三中心、異地多活等部署架構(gòu)模式的需求。

Dubbo SDK對(duì)三大中心都支持了Multiple模式。

  • 多注冊(cè)中心:Dubbo 支持多注冊(cè)中心,即一個(gè)接口或者一個(gè)應(yīng)用可以被注冊(cè)到多個(gè)注冊(cè)中心中,比如可以注冊(cè)到ZK集群和Nacos集群中,Consumer也能夠從多個(gè)注冊(cè)中心中進(jìn)行訂閱相關(guān)服務(wù)的地址信息,從而進(jìn)行服務(wù)發(fā)現(xiàn)。通過(guò)支持多注冊(cè)中心的方式來(lái)保證其中一個(gè)注冊(cè)中心集群出現(xiàn)不可用時(shí)能夠切換到另一個(gè)注冊(cè)中心集群,保證能夠正常提供服務(wù)以及發(fā)起服務(wù)調(diào)用。這也能夠滿足注冊(cè)中心在部署上適應(yīng)各類(lèi)高可用的部署架構(gòu)模式。
  • 多配置中心:Dubbo支持多配置中心,來(lái)保證其中一個(gè)配置中心集群出現(xiàn)不可用時(shí)能夠切換到另一個(gè)配置中心集群,保證能夠正常從配置中心獲取全局的配置、路由規(guī)則等信息。這也能夠滿足配置中心在部署上適應(yīng)各類(lèi)高可用的部署架構(gòu)模式。
  • 多元數(shù)據(jù)中心:Dubbo 支持多元數(shù)據(jù)中心:用于應(yīng)對(duì)容災(zāi)等情況導(dǎo)致某個(gè)元數(shù)據(jù)中心集群不可用,此時(shí)可以切換到另一個(gè)元數(shù)據(jù)中心集群,保證元數(shù)據(jù)中心能夠正常提供有關(guān)服務(wù)元數(shù)據(jù)的管理能力。

拿注冊(cè)中心舉例,下面是一個(gè)多活場(chǎng)景的部署架構(gòu)示意圖:

http://imgs/v3/concepts/multiple-registry-deployment-architecture


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

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)