Nacos多環(huán)境的實(shí)現(xiàn)過程
簡介
說明
本文介紹Nacos實(shí)現(xiàn)多環(huán)境的方案。
方案概述
多環(huán)境有很多方案,如下:
- 單租戶方案(適用于項(xiàng)目很少的場景)
- 命名空間區(qū)分環(huán)境,GROUP 使用默認(rèn),DATA ID區(qū)分應(yīng)用
- 單租戶方案(適用于項(xiàng)目較少的場景)
- 命名空間區(qū)分環(huán)境,GROUP 區(qū)分項(xiàng)目,DATA ID區(qū)分應(yīng)用
- 多租戶方案(適用于項(xiàng)目很多的場景)
- 命名空間區(qū)分項(xiàng)目,GROUP使用默認(rèn),DATA ID區(qū)分應(yīng)用及環(huán)境
- 多租戶方案(適用于項(xiàng)目巨多的場景)
- 命名空間區(qū)分項(xiàng)目,GROUP 區(qū)分環(huán)境,DATA ID區(qū)分應(yīng)用
方案1:單租戶(單GROUP)
場景:適用于項(xiàng)目很少的場景。
有dev,test和prod三個不同的環(huán)境,那么使用一套 nacos 集群可以分別建以下三個不同的 namespace。
如下圖所示:
方案2:單租戶(多GROUP)
場景:適用于項(xiàng)目較少的場景。
以方案1為基礎(chǔ),多個項(xiàng)目同時使用該Nacos集群時,可以通過Group進(jìn)行Namespace內(nèi)的細(xì)化分組。
以Namespace:dev為例,在Namespace中通過不同Group進(jìn)行同一環(huán)境中不同項(xiàng)目的再分類:
通過代碼來實(shí)踐一下
創(chuàng)建Nacos配置文件
Namespace下新建配置文件
啟動Nacos-Server,進(jìn)入Nacos控制臺,切換到Namespace:dev界面,新建配置文件
- DataId:nacos-namespace-one-dev.yml
- Group:namespace-one
- 配置格式:YAML
- 配置內(nèi)容:
nacos: config: 項(xiàng)目:nacos-namespace-one,Namespace:dev
繼續(xù)新建配置文件
- DataId:nacos-namespace-two-dev.yml
- Group:namespace-two
- 配置格式:YAML
- 配置內(nèi)容:
nacos: config: 項(xiàng)目:nacos-namespace-two,Namespace:dev
切換到Namespace:test環(huán)境,按照dev中的創(chuàng)建方式,分別創(chuàng)建nacos-namespace-one-test.yml和nacos-namespace-two-test.yml
注意:檢查DataId是否正確、group、配置內(nèi)容與環(huán)境是否匹配
創(chuàng)建項(xiàng)目
在聚合工程N(yùn)acos下創(chuàng)建名為nacos-namespace-one的子項(xiàng)目。
以下NamespaceId均來自創(chuàng)建Namespace時生成的Id,在控制臺命名空間頁面中可以查看
創(chuàng)建dev環(huán)境配置文件bootstrap-dev.yml
server: port: 9911 spring: application: name: nacos-namespace-one profiles: active: dev cloud: nacos: discovery: server-addr: 127.0.0.1:8848 namespace: edbd013b-b178-44f7-8caa-e73071e49c4d group: namespace-one config: server-addr: 127.0.0.1:8848 prefix: ${spring.application.name} file-extension: yml namespace: edbd013b-b178-44f7-8caa-e73071e49c4d group: namespace-one
創(chuàng)建test環(huán)境配置文件bootstrap-dev.yml
server: port: 9912 spring: application: name: nacos-namespace-one profiles: active: test cloud: nacos: discovery: server-addr: 127.0.0.1:8848 namespace: 0133bd1e-25c3-4985-96ed-a4e34efdea2e group: namespace-one config: server-addr: 127.0.0.1:8848 prefix: ${spring.application.name} file-extension: yml namespace: 0133bd1e-25c3-4985-96ed-a4e34efdea2e group: namespace-one
重復(fù)以上操作,再創(chuàng)建一個名為nacos-namespace-two的子項(xiàng)目
nacos-namespace-two項(xiàng)目的dev和test啟動端口分別設(shè)置為9921和9922,group為:namespace-two(記得修改spring.application.name、namespace和group)。
測試
分別啟動兩個項(xiàng)目的兩個環(huán)境(四個啟動類),如下圖(兩個環(huán)境都啟動dev和test)
現(xiàn)在我們有2個項(xiàng)目:nacos-namespace-one和nacos-namespace-two,2個項(xiàng)目分別有兩個不同的環(huán)境dev和test。此時觀察Nacos-Server控制臺如下:
嘗試訪問接口來獲取配置信息,驗(yàn)證是否可以讀取相應(yīng)環(huán)境配置
訪問127.0.0.1:9911/getValue,返回:項(xiàng)目:nacos-namespace-one,Namespace:dev 訪問127.0.0.1:9912/getValue,返回:項(xiàng)目:nacos-namespace-one,Namespace:test 訪問127.0.0.1:9921/getValue,返回:項(xiàng)目:nacos-namespace-two,Namespace:dev 訪問127.0.0.1:9922/getValue,返回:項(xiàng)目:nacos-namespace-two,Namespace:test
通過以上實(shí)驗(yàn),方案1可以達(dá)到多環(huán)境多項(xiàng)目下的服務(wù)、配置管理的目標(biāo)。
方案3:多租戶(單GROUP)
從多個租戶(用戶)的角度來看,每個租戶(用戶)可能會有自己的 namespace,每個租戶(用戶)的配置數(shù)據(jù)以及注冊的服務(wù)數(shù)據(jù)都會歸屬到自己的 namespace 下,以此來實(shí)現(xiàn)多租戶間的數(shù)據(jù)隔離。他有很好的擴(kuò)展性。
例如超級管理員分配了三個租戶,分別為張三、李四和王五。張三負(fù)責(zé)A項(xiàng)目,李四負(fù)責(zé)B項(xiàng)目,王五負(fù)責(zé)C項(xiàng)目。
分配好了之后,各租戶用自己的賬戶名和密碼登錄后,創(chuàng)建自己的命名空間。如下圖所示:
方案4:多租戶(多GROUP)
以方案3為基礎(chǔ),公司發(fā)展迅速業(yè)務(wù)調(diào)整,張三負(fù)責(zé)A項(xiàng)目、B項(xiàng)目、C項(xiàng)目,李四負(fù)責(zé)D項(xiàng)目、E項(xiàng)目、F項(xiàng)目,王五負(fù)責(zé)G項(xiàng)目、H項(xiàng)目、I項(xiàng)目。每個項(xiàng)目又分了dev、test、prod三個環(huán)境,繼續(xù)沿用之前的Namespace隔離租戶方案,顯得有些管理不便,這時候可以在NameSpace中加入Group進(jìn)行項(xiàng)目環(huán)境分組,如圖:
當(dāng)業(yè)務(wù)規(guī)模更大的時候(不考慮Nacos集群能否支持的因素),張三、李四、王五每人都負(fù)責(zé)10多個項(xiàng)目時,即項(xiàng)目數(shù)>環(huán)境數(shù)時,可以通過Group進(jìn)行項(xiàng)目分組,如下圖:
實(shí)戰(zhàn)
場景描述
依舊使用上面的兩個項(xiàng)目,假設(shè)現(xiàn)在有兩個租戶,張三、李四
張三負(fù)責(zé)項(xiàng)目:nacos-namespace-one, 李四負(fù)責(zé)項(xiàng)目:nacos-namespace-two,項(xiàng)目分別有dev和test環(huán)境
新建Namespace和配置文件
新建兩個Namespace來隔離租戶,分別為zhangsan、lisi
在Namespace:zhangsan 下創(chuàng)建配置文件
- DataId:nacos-namespace-one-dev.yml
- Group:namespace-one-dev
- 配置格式:YAML
- 配置內(nèi)容:
nacos: config: 項(xiàng)目:nacos-namespace-one,Namespace:張三,環(huán)境:dev
繼續(xù)創(chuàng)建test環(huán)境配置文件
- DataId:nacos-namespace-one-test.yml
- Group:namespace-one-test
- 配置格式:YAML
- 配置內(nèi)容:
nacos: config: 項(xiàng)目:nacos-namespace-one,Namespace:張三,環(huán)境:test
參照以上操作,在Namespace:lisi命名空間中創(chuàng)建配置文件nacos-namespace-two-dev.yml和nacos-namespace-two-test.yml
注意:核對DataId、Group、和配置內(nèi)容
修改項(xiàng)目的配置文件bootstrap.yml
修改項(xiàng)目nacos-namespace-one的dev配置文件bootstrap-dev.yml
server: port: 9911 spring: application: name: nacos-namespace-one profiles: active: dev cloud: nacos: discovery: server-addr: 127.0.0.1:8848 # 方案2:NamespaceID\Group namespace: e0d75068-a12c-4314-9296-3f396139d5b3 group: namespace-one-dev config: server-addr: 127.0.0.1:8848 prefix: ${spring.application.name} file-extension: yml # 方案2:NamespaceID\Group namespace: e0d75068-a12c-4314-9296-3f396139d5b3 group: namespace-one-dev
修改test配置文件bootstrap-test.yml
server: port: 9912 spring: application: name: nacos-namespace-one profiles: active: test cloud: nacos: discovery: server-addr: 127.0.0.1:8848 # 方案2:NamespaceID\Group namespace: e0d75068-a12c-4314-9296-3f396139d5b3 group: namespace-one-test config: server-addr: 127.0.0.1:8848 prefix: ${spring.application.name} file-extension: yml # 方案2:NamespaceID\Group namespace: e0d75068-a12c-4314-9296-3f396139d5b3 group: namespace-one-test
重復(fù)以上操作相應(yīng)的修改項(xiàng)目nacos-namespace-two的dev和test配置文件
主要修改namespace和group屬性,與命名空間lisi的ID和其下配置文件的Group對應(yīng)
啟動項(xiàng)目
分別啟動兩個項(xiàng)目的兩個環(huán)境(四個啟動類),啟動成功如下圖
此時兩個項(xiàng)目分別啟動兩個環(huán)境后,注冊到Nacos上不同的Namespace下,并讀取相應(yīng)環(huán)境的配置,具體如下:
nacos-namespace-one
- dev: 注冊到Namespace:zhangsan,讀取Namespace:zhangsan下Group:namespace-one-dev的配置
- test: 注冊到Namespace:zhangsan,讀取Namespace:zhangsan下Group:namespace-one-test的配置
nacos-namespace-two
- dev: 注冊到Namespace:lisi,讀取Namespace:lisi下Group:namespace-two-dev的配置
- test: 注冊到Namespace:lisi,讀取Namespace:lisi下Group:namespace-two-test的配置
此時Nacos控制臺如下圖:
ok我們來測試下各個環(huán)境的服務(wù)能否訪問到對應(yīng)的配置
訪問127.0.0.1:9911/getValue,返回:項(xiàng)目:nacos-namespace-one,Namespace:張三,環(huán)境:dev 訪問127.0.0.1:9912/getValue,返回:項(xiàng)目:nacos-namespace-one,Namespace:張三,環(huán)境:test 訪問127.0.0.1:9921/getValue,返回:項(xiàng)目:nacos-namespace-two,Namespace:李四,環(huán)境:dev 訪問127.0.0.1:9922/getValue,返回:項(xiàng)目:nacos-namespace-two,Namespace:李四,環(huán)境:test
通過訪問服務(wù)的接口,各個服務(wù)都可以準(zhǔn)確的讀取到各自環(huán)境下的配置文件
方案二可以看到同樣支持服務(wù)和配置的隔離分組,同時支持業(yè)務(wù)的擴(kuò)展,有較好的擴(kuò)展性
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
在Spring?MVC中使用@ControllerAdvice創(chuàng)建全局異常處理器的方法
在Spring?MVC中,可以使用@ControllerAdvice或@RestControllerAdvice注解來定義全局異常處理器類,并使用?@ExceptionHandler注解來定義處理特定異常的方法,本文就給大家介紹了Spring?MVC?@ControllerAdvice創(chuàng)建處理器的方法,需要的朋友可以參考下2023-08-08Spring 報錯:元素 "context:component-scan" 的前綴 "context" 未綁定的問題解決
這篇文章主要介紹了Spring 報錯:元素 "context:component-scan" 的前綴 "context" 未綁定的問題解決的相關(guān)資料,需要的朋友可以參考下2016-11-11springboot如何通過session實(shí)現(xiàn)單點(diǎn)登入詳解
單點(diǎn)登錄(SSO)的定義是在多個應(yīng)用系統(tǒng)中,用戶只需要登錄一次就可以訪問所有相互信任的應(yīng)用系統(tǒng),下面這篇文章主要給大家介紹了關(guān)于springboot如何通過session實(shí)現(xiàn)單點(diǎn)登入的相關(guān)資料,需要的朋友可以參考下2021-12-12Struts2實(shí)現(xiàn)對action請求對象的攔截操作方法
這篇文章主要介紹了Struts2實(shí)現(xiàn)對action請求對象的攔截操作方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-11-11Java java.lang.InstantiationException異常案例詳解
這篇文章主要介紹了Java java.lang.InstantiationException異常案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08SpringBoot安全策略開發(fā)之集成數(shù)據(jù)傳輸加密
這篇文章主要介紹了SpringBoot集成數(shù)據(jù)傳輸加密,近期在對開發(fā)框架安全策略方面進(jìn)行升級優(yōu)化,提供一些通用場景的解決方案,本文針對前后端數(shù)據(jù)傳輸加密進(jìn)行簡單的分享2023-01-01java統(tǒng)計文件中每個字符出現(xiàn)的個數(shù)
這篇文章主要為大家詳細(xì)介紹了java統(tǒng)計文件中每個字符出現(xiàn)的個數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-03-03