SpringCloud Alibaba之Nacos多環境多項目管理

系統會有很多微服務項目,每個微服務項目都會有相應的開發環境、測試環境、預發環境、正式環境,那怎麼對這些微服務配置進行管理呢?今天老顧就這兩個問題和小夥伴們進行溝通分享,我們沿用前面文章的案例

DataId方案


在上一篇文章中有對Data ID進行過介紹,它的命名規則為

${prefix}-${spring.profile.active}.${file-extension}

通過其中的spring.profile.active屬性即可進行多環境下配置文件的讀取


新建配置

在Nacos控制檯新建DataID為goods-consumer-dev.yml和goods-consumer-test.yml,配置項goods.crisis_stock。

我們dev環境設置goods.crisis_stock=10,test環境設置goods.crisis_stock=20

SpringCloud Alibaba之Nacos多環境多項目管理

SpringCloud Alibaba之Nacos多環境多項目管理

SpringCloud Alibaba之Nacos多環境多項目管理


多環境測試

啟動goods-consumer應用,設置啟動參數spring.profiles.active,設置不同的環境dev、test;訪問URL請求,得到不同的值,表示多環境生效

DEV環境

SpringCloud Alibaba之Nacos多環境多項目管理

SpringCloud Alibaba之Nacos多環境多項目管理


TEST環境

SpringCloud Alibaba之Nacos多環境多項目管理

SpringCloud Alibaba之Nacos多環境多項目管理

Group方案

上面介紹了通過指定spring.profile.active和配置文件的DataID來使不同環境下讀取不同的配置。當然也可以不用DataID,可通過Group實現環境區分


新建配置

在nacos控制檯上面新建配置文件Data ID為:goods-consumer.yml, Group為:DEV_GROUP, 其配置如下

SpringCloud Alibaba之Nacos多環境多項目管理

繼續創建配置文件Data ID為:goods-consumer.yml, Group為:TEST_GROUP, 其配置如下:

SpringCloud Alibaba之Nacos多環境多項目管理


這裡的兩個配置文件他們的DataID相同但是Group不同

修改項目中的配置文件bootstrap.yml

在config下增加一條group的配置,指定配置文件所在的group,可配置為DEV_GROUP或TEST_GROUP

SpringCloud Alibaba之Nacos多環境多項目管理


啟動測試

啟動參數將group配置為DEV_GROUP或TEST_GROUP啟動進行測試,請求URL,得到不同Group配置的值

SpringCloud Alibaba之Nacos多環境多項目管理

SpringCloud Alibaba之Nacos多環境多項目管理

SpringCloud Alibaba之Nacos多環境多項目管理


Namespace方案

Namespace命名空間進行環境隔離也是官方推薦的一種方式。Namespace的常用場景之一是不同環境的配置的區分隔離,例如:開發測試環境和生產環境的資源(如配置、服務)隔離等。


創建命名空間

創建命名空間DEV、TEST、PROD,不同的命名空間會生成相應的UUID,如下圖

SpringCloud Alibaba之Nacos多環境多項目管理


新建配置文件

在命名空間DEV下創建DataID為:goods-consumer-dev.yml,Group為默認值的配置,配置如下:

SpringCloud Alibaba之Nacos多環境多項目管理

SpringCloud Alibaba之Nacos多環境多項目管理

在命名空間TEST下創建DataID為:goods-consumer-test.yml,Group為默認值的配置,配置如下:

SpringCloud Alibaba之Nacos多環境多項目管理

SpringCloud Alibaba之Nacos多環境多項目管理

新建項目中的配置文件bootstrap-dev.yml,bootstrap-test.yml

在config下增加一條namespace的配置,指定當前配置所在的命名空間ID。注意是命名空間ID

SpringCloud Alibaba之Nacos多環境多項目管理

SpringCloud Alibaba之Nacos多環境多項目管理


啟動測試

為什麼要新建bootstrap-dev.yml和bootstrap-test.yml;就是為了方便啟動參數進行設置,區分dev環境和test環境不同的配置;啟動參數-Dspring.profiles.active

SpringCloud Alibaba之Nacos多環境多項目管理

以上介紹了DataID,Group,Namespace三種方式可以實現多環境;一般在公司我們會多個項目共用同一個Nacos集群,那多個項目的多個環境如何設計呢?下面我們就講解單租戶和多租戶的設計方案。

單租戶實踐方案一

如果有多套不同的環境,那麼這個時候可以根據指定的環境來創建不同的namespce,以此來實現多環境的隔離。

例如,你可能有dev,test和prod三個不同的環境,那麼使用nacos可以分別建以下三個不同的 namespace。如下圖所示:

SpringCloud Alibaba之Nacos多環境多項目管理

這種方案適於小型項目,或者是項目不太多時的實施方案。

通過定義不同的環境,不同環境的項目在不同的Namespace下進行管理,不同環境之間通過Namespace進行隔離

當多個項目同時使用該Nacos時,還可以通過Group進行Namespace內的細化分組;這裡以Namespace:dev為例,在Namespace中通過不同Group進行同一環境中不同項目的再分類

SpringCloud Alibaba之Nacos多環境多項目管理

通過以上實驗,方案1可以達到多環境多項目下的服務、配置管理的目標

方案1通過Namespace來隔離不同的環境(dev\\test),在具體的環境Namespace中通過Group來管理不同的項目

多租戶實施方案二

在一些中大型公司,一般會多個人各自負責多個項目,那麼每個人可能會有自己的 namespace,每個人的配置數據以及註冊的服務數據都會歸屬到自己的namespace下,以此來實現多租戶間的數據隔離。

例如超級管理員分配了三個租戶,分別為張三、李四和王五。張三負責A項目,李四負責B項目,王五負責C項目

分配好了之後,各租戶用自己的賬戶名和密碼登錄後,創建自己的命名空間。

注:現在nacos權限管理還是不是太完善,期待下個版本

如下圖所示:

SpringCloud Alibaba之Nacos多環境多項目管理

方案2通過Namespace來隔離多租戶之間的服務和配置,但不僅於此,他有很好的擴展性

公司發展迅速業務調整,張三負責A項目、B項目、C項目,李四負責D項目、E項目、F項目,王五負責G項目、H項目、I項目。

而每個項目又分了dev、test、prod三個環境,繼續沿用之前的Namespace隔離租戶方案,顯得有些管理不便,這時候可以在NameSpace中加入Group進行項目環境分組,有兩種方式。如圖:

SpringCloud Alibaba之Nacos多環境多項目管理

另一個方式,張三、李四、王五每人都負責10多個項目時,即項目數>環境數時,可以通過Group進行項目分組,如下圖:

SpringCloud Alibaba之Nacos多環境多項目管理

通過上面的理論分析,可以看出方案二有很好的擴展性

依舊如上,我們通過代碼來實踐一下方案2(Namespace隔離租戶 + group環境分組)

關於單租戶和多租戶的演示,小夥伴們自行實踐一下,只要明白設計思路,操作是很簡單的

總結

以上分析了Nacos對於Namespace提供的兩種實踐方案,

1、單租戶方案(方案一):適合小型項目,服務數量不多時,方案一完全夠用

2、多租戶方案(方案二):適合項目量多,有一定的團隊規模,且服務數量較多時,可以相對條理清晰的管理和隔離配置及服務。


SpringCloud Alibaba之Nacos多環境多項目管理


分享到:


相關文章: