nacos怎么修改服务分组_Nacos(六):多环境下如何“管理”及“隔离”配置和服务...
前言
前景回顧:
現(xiàn)如今,在微服務(wù)體系中,一個(gè)系統(tǒng)往往被拆分為多個(gè)服務(wù),每個(gè)服務(wù)都有自己的配置文件,然后每個(gè)系統(tǒng)往往還會(huì)準(zhǔn)備開(kāi)發(fā)環(huán)境、測(cè)試環(huán)境、正式環(huán)境
我們來(lái)說(shuō)算一算,假設(shè)某系統(tǒng)有10個(gè)微服務(wù),那么至少有10個(gè)配置文件吧,三個(gè)環(huán)境(devtestprod),那就有30個(gè)配置文件需要進(jìn)行管理。
這么多的配置文件,要修改一個(gè)或者多個(gè)的時(shí)候,稍有不慎可能就會(huì)出現(xiàn)改錯(cuò)了、不生效....等等問(wèn)題。
那么如果引入Nacos作為配置中心后,如何有效的進(jìn)行配置文件的管理和不同環(huán)境間的隔離區(qū)分呢?
別擔(dān)心,Namespace可以幫助我們進(jìn)行多環(huán)境下的管理和隔離
有了上一篇文章的介紹,本文主要從以下幾個(gè)方面介紹:
Namespace是什么
Namespace如何進(jìn)行配置和服務(wù)的管理、隔離
創(chuàng)建和獲取NamespaceID
Namespace實(shí)施方案1
Namespace實(shí)施方案2
Namespace
Nacos引入了命名空間(Namespace)的概念來(lái)進(jìn)行多環(huán)境配置和服務(wù)的管理及隔離
Namespace也是官方推薦的多環(huán)境支持方案。
如何進(jìn)行配置和服務(wù)的管理、隔離
當(dāng)我們的服務(wù)達(dá)到一定的數(shù)量,集中式的管理許多服務(wù)會(huì)十分不便,
那我們可以將這些具有相同特征或?qū)傩缘姆?wù)進(jìn)行分組管理,服務(wù)對(duì)應(yīng)的配置也進(jìn)行分組隔離
這里的分組就是Namespace的概念,將服務(wù)和配置納入相同的Namespace進(jìn)行管理
不同Namespace下的服務(wù)和配置之間就隔離開(kāi)來(lái)
創(chuàng)建和獲取NamespaceID
NamespaceId值是在配置文件配置時(shí)必須要填入的配置項(xiàng),所以需要我們先創(chuàng)建Namespace和Id,步驟如下:
nacos 的控制臺(tái)左邊功能欄看到有一個(gè)命名空間的功能,點(diǎn)擊就可以看到新建命名空間 的按鈕
新建成功后,可以在命名空間列表中查看到你所創(chuàng)建的Namespace和他生成的ID值
這里只是講解創(chuàng)建步驟,本文繼續(xù)延用Nacos(五)中創(chuàng)建的DEV、TEST
Namespace實(shí)施方案1
Nacos給出了兩種Namespace的實(shí)踐方案
面向一個(gè)租戶
面向多個(gè)租戶
方案1主要說(shuō)明一下面向一個(gè)租戶
從一個(gè)租戶(用戶)的角度來(lái)看,如果有多套不同的環(huán)境,那么這個(gè)時(shí)候可以根據(jù)指定的環(huán)境來(lái)創(chuàng)建不同的 namespce,以此來(lái)實(shí)現(xiàn)多環(huán)境的隔離。
例如,你可能有dev,test和prod三個(gè)不同的環(huán)境,那么使用一套 nacos 集群可以分別建以下三個(gè)不同的 namespace。如下圖所示:
這里的單租戶同樣也適于小型項(xiàng)目,或者是項(xiàng)目不太多時(shí)的實(shí)施方案
通過(guò)定義不同的環(huán)境,不同環(huán)境的項(xiàng)目在不同的Namespace下進(jìn)行管理,不同環(huán)境之間通過(guò)Namespace進(jìn)行隔離
當(dāng)多個(gè)項(xiàng)目同時(shí)使用該Nacos集群時(shí),還可以通過(guò)Group進(jìn)行Namespace內(nèi)的細(xì)化分組
這里以Namespace:dev為例,在Namespace中通過(guò)不同Group進(jìn)行同一環(huán)境中不同項(xiàng)目的再分類
有了以上思路,我們通過(guò)代碼來(lái)實(shí)踐一下
Namespace下新建配置文件
啟動(dòng)Nacos-Server,進(jìn)入Nacos控制臺(tái),切換到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)目,該工程的依賴文件和啟動(dòng)類的代碼與Nacos(四)完全一致。
以下NamespaceId均來(lái)自創(chuàng)建Namespace時(shí)生成的Id,在控制臺(tái)命名空間頁(yè)面中可以查看
創(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)建一個(gè)名為nacos-namespace-two的子項(xiàng)目
nacos-namespace-two項(xiàng)目的dev和test啟動(dòng)端口分別設(shè)置為9921和9922,group為:namespace-two
記得修改spring.application.name、namespace和group
啟動(dòng)工程
分別啟動(dòng)兩個(gè)項(xiàng)目的兩個(gè)環(huán)境(四個(gè)啟動(dòng)類),如下圖
現(xiàn)在我們有2個(gè)項(xiàng)目:nacos-namespace-one和nacos-namespace-two
2個(gè)項(xiàng)目分別有兩個(gè)不同的環(huán)境dev和test
此時(shí)觀察Nacos-Server控制臺(tái)如下:
嘗試訪問(wèn)接口來(lái)獲取配置信息,驗(yàn)證是否可以讀取相應(yīng)環(huán)境配置
訪問(wèn)127.0.0.1:9911/getValue,返回:項(xiàng)目:nacos-namespace-one,Namespace:dev
訪問(wèn)127.0.0.1:9912/getValue,返回:項(xiàng)目:nacos-namespace-one,Namespace:test
訪問(wèn)127.0.0.1:9921/getValue,返回:項(xiàng)目:nacos-namespace-two,Namespace:dev
訪問(wèn)127.0.0.1:9922/getValue,返回:項(xiàng)目:nacos-namespace-two,Namespace:test
通過(guò)以上實(shí)驗(yàn),方案1可以達(dá)到多環(huán)境多項(xiàng)目下的服務(wù)、配置管理的目標(biāo)
方案1通過(guò)Namespace來(lái)隔離不同的環(huán)境(devtest),在具體的環(huán)境Namespace中通過(guò)Group來(lái)管理不同的項(xiàng)目
Namespace實(shí)施方案2
了解了單租戶的方案1,再來(lái)看看Nacos推薦的面向多租戶的方案2
從多個(gè)租戶(用戶)的角度來(lái)看,每個(gè)租戶(用戶)可能會(huì)有自己的 namespace,每個(gè)租戶(用戶)的配置數(shù)據(jù)以及注冊(cè)的服務(wù)數(shù)據(jù)都會(huì)歸屬到自己的 namespace 下,以此來(lái)實(shí)現(xiàn)多租戶間的數(shù)據(jù)隔離。
例如超級(jí)管理員分配了三個(gè)租戶,分別為張三、李四和王五。張三負(fù)責(zé)A項(xiàng)目,李四負(fù)責(zé)B項(xiàng)目,王五負(fù)責(zé)C項(xiàng)目
分配好了之后,各租戶用自己的賬戶名和密碼登錄后,創(chuàng)建自己的命名空間。如下圖所示:
方案2通過(guò)Namespace來(lái)隔離多租戶之間的服務(wù)和配置,但不僅于此,他有很好的擴(kuò)展性
在該方案中,Group同樣也有用武之地。
需求改變下,公司發(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)目,
而每個(gè)項(xiàng)目又分了dev、test、prod三個(gè)環(huán)境,繼續(xù)沿用之前的Namespace隔離租戶方案,顯得有些管理不便,這時(shí)候可以在NameSpace中加入Group進(jìn)行項(xiàng)目環(huán)境分組,如圖:
但是當(dāng)業(yè)務(wù)規(guī)模更大的時(shí)候(不考慮Nacos集群能否支持的因素),張三、李四、王五每人都負(fù)責(zé)10多個(gè)項(xiàng)目時(shí),即項(xiàng)目數(shù)>環(huán)境數(shù)時(shí),可以通過(guò)Group進(jìn)行項(xiàng)目分組,如下圖:
通過(guò)上面的理論分析,可以看出方案二有很好的擴(kuò)展性
依舊如上,我們通過(guò)代碼來(lái)實(shí)踐一下方案2(Namespace隔離租戶 + group環(huán)境分組)
場(chǎng)景描述
依舊使用上面的兩個(gè)項(xiàng)目,假設(shè)現(xiàn)在有兩個(gè)租戶,張三、李四
張三負(fù)責(zé)項(xiàng)目:nacos-namespace-one, 李四負(fù)責(zé)項(xiàng)目:nacos-namespace-two,項(xiàng)目分別有dev和test環(huán)境
新建Namespace和配置文件
新建兩個(gè)Namespace來(lái)隔離租戶,分別為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
注意核對(duì)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對(duì)應(yīng)
啟動(dòng)項(xiàng)目
分別啟動(dòng)兩個(gè)項(xiàng)目的兩個(gè)環(huán)境(四個(gè)啟動(dòng)類),啟動(dòng)成功如下圖
此時(shí)兩個(gè)項(xiàng)目分別啟動(dòng)兩個(gè)環(huán)境后,注冊(cè)到Nacos上不同的Namespace下,并讀取相應(yīng)環(huán)境的配置,具體如下:
nacos-namespace-one
dev: 注冊(cè)到Namespace:zhangsan,讀取Namespace:zhangsan下Group:namespace-one-dev的配置
test: 注冊(cè)到Namespace:zhangsan,讀取Namespace:zhangsan下Group:namespace-one-test的配置
nacos-namespace-two
dev: 注冊(cè)到Namespace:lisi,讀取Namespace:lisi下Group:namespace-two-dev的配置
test: 注冊(cè)到Namespace:lisi,讀取Namespace:lisi下Group:namespace-two-test的配置
此時(shí)Nacos控制臺(tái)如下圖:
ok我們來(lái)測(cè)試下各個(gè)環(huán)境的服務(wù)能否訪問(wèn)到對(duì)應(yīng)的配置
訪問(wèn)127.0.0.1:9911/getValue,返回:項(xiàng)目:nacos-namespace-one,Namespace:張三,環(huán)境:dev
訪問(wèn)127.0.0.1:9912/getValue,返回:項(xiàng)目:nacos-namespace-one,Namespace:張三,環(huán)境:test
訪問(wèn)127.0.0.1:9921/getValue,返回:項(xiàng)目:nacos-namespace-two,Namespace:李四,環(huán)境:dev
訪問(wèn)127.0.0.1:9922/getValue,返回:項(xiàng)目:nacos-namespace-two,Namespace:李四,環(huán)境:test
通過(guò)訪問(wèn)服務(wù)的接口,各個(gè)服務(wù)都可以準(zhǔn)確的讀取到各自環(huán)境下的配置文件
方案二可以看到同樣支持服務(wù)和配置的隔離分組,同時(shí)支持業(yè)務(wù)的擴(kuò)展,有較好的擴(kuò)展性
問(wèn)題描述
但是相信大家已經(jīng)發(fā)現(xiàn)了一個(gè)問(wèn)題,當(dāng)使用的Group來(lái)進(jìn)行分組后,配置文件相互之間可以實(shí)現(xiàn)不同環(huán)境與不同項(xiàng)目之間的分組隔離
但是服務(wù)注冊(cè)后,雖然可以通過(guò)Namespace隔離,但指定的Group分組卻并沒(méi)有生效,依然是DEFAULT_GROUP
比如方案1 所有項(xiàng)目啟動(dòng)后Nacos服務(wù)列表頁(yè)如下圖
這里本應(yīng)該是我們自定義的分組namespace-one和namespace-two卻沒(méi)有生效
由此發(fā)現(xiàn),配置之間是達(dá)到了相互分組隔離名但服務(wù)列表暫時(shí)并不支持。
但是不要擔(dān)心,Nacos的社區(qū)極度活躍,社區(qū)的大佬們也發(fā)現(xiàn)了這一情況,并且在Nacos-client的源碼中可以看到NameingService在加載配置文件時(shí)是有預(yù)留Group這一屬性字段的。
所以既然Nacos提供了這一實(shí)踐方案,正常使用只不過(guò)是時(shí)間問(wèn)題。
總結(jié)
以上分析了Nacos對(duì)于Namespace提供的兩種實(shí)踐方案,同時(shí)進(jìn)行了代碼實(shí)驗(yàn),均達(dá)到了預(yù)期的要求。
現(xiàn)對(duì)兩種方案進(jìn)行一個(gè)總結(jié)
單租戶方案(方案1):適合小型項(xiàng)目,服務(wù)數(shù)量不多時(shí),方案一完全夠用
多租戶方案(方案2):適合項(xiàng)目量多,有一定的團(tuán)隊(duì)規(guī)模,且服務(wù)數(shù)量較多時(shí),可以相對(duì)條理清晰的管理和隔離配置及服務(wù)。
參考與感謝
版權(quán)聲明: 本博客所有文章除特別聲明外,均采用 CC BY-NC-SA 4.0 許可協(xié)議。轉(zhuǎn)載請(qǐng)注明來(lái)自 LarsCheng's Blog!
---
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的nacos怎么修改服务分组_Nacos(六):多环境下如何“管理”及“隔离”配置和服务...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 应用安全-操作系统安全-漏洞修复整理
- 下一篇: dda算法c语言opengl实现