Dubbo3 部署架構(gòu)

2022-03-30 10:27 更新

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

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

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

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

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

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

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

注冊中心

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

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

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

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

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

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

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

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

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

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

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

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

配置中心

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

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

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

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

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

Dubbo SDK對三大中心都支持了Multiple模式。

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

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

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


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號