Nacos的配置管理模型

對於Nacos配置管理,通過Namespace、group、Data ID能夠定位到一個配置集。

名稱空間(Namespace)

名稱空間(namespace)可用於進行不同環境的配置隔離。例如可以隔離開發環境、測試環境和生產環境,因為它們的配置可能各不相同,或者是隔離不同的使用者,不同的開發人員使用同一個nacos管理各自的配置,可通過namespace隔離。不同的名稱空間下,可以存在相同名稱的配置分組(Group) 或 配置集。

配置分組(Group)

配置分組是對配置集進行分組,通過一個有意義的字串(如 Buy 或 Trade )來表示,不同的配置分組下可以有相同的配置集(Data ID)。當您在 Nacos 上建立一個配置時,如果未填寫配置分組的名稱,則配置分組的名稱預設採用 DEFAULT_GROUP 。配置分組的常見場景:可用於區分不同的專案或應用,例如:學生管理系統的配置集可以定義一個group為:STUDENT_GROUP。

配置集(Data ID)

在系統中,一個配置檔案通常就是一個配置集,一個配置集可以包含了系統的各種配置資訊,例如,一個配置集可能包含了資料來源、執行緒池、日誌級別等配置項。每個配置集都可以定義一個有意義的名稱,就是配置集的ID即DataID。

配置項

配置集中包含的一個個配置內容就是配置項。它代表一個具體的可配置的引數與其值域,通常以 key=value 的形式存在。例如我們常配置系統的日誌輸出級別(logLevel=INFO|WARN|ERROR) 就是一個配置項。

一個最佳實踐

Nacos抽象定義了Namespace、Group、Data ID的概念,具體這幾個概念代表什麼,取決於我們把它們看成什麼,這裡推薦給大家一種用法。

  • Namespace:代表不同環境,如開發、測試、生產環境;

  • Group:代表某專案,如XX醫療專案、XX電商專案;

  • DataId:每個專案下往往有若干個工程,每個配置集(DataId)是一個工程的主配置檔案。

下面演示一個使用 spring boot 來獲取配置的列子。

step1:新增Nacos的配置

nacos:
config:
access-key: 127.0.0.1:8848
namespace: 6f97a206-ce19-44c2-85be-c601170d306e -- 不配置的話預設是public

上面是在配置中心上已經建立的namespace,程式碼中使用的是tpag這個空間。

step2:新增@NacosPropertySource註解

@Configuration
@NacosPropertySource(groupId = "xxl-job", dataId = "config-file", autoRefreshed = true)
public class NacosConfig {
}

上面的dataId必須填寫,groupId不填寫的預設。

step3:使用配置

@RestController("/nacos")
public class NacosConfigCenter { @NacosValue(value = "${name:自由之路}", autoRefreshed = true)
private String name; @GetMapping("/getName")
public String getName() {
return name;
}
}

名稱空間管理

namespace 的設計是 nacos 基於此做多環境以及多租戶(多個使用者共同使用nacos)資料(配置和服務)隔離的。

多環境的角度

從一個租戶(使用者)的角度來看,如果有多套不同的環境,那麼這個時候可以根據指定的環境來建立不同的 namespce,以此來實現多環境的隔離。例如,你可能有日常,預發和生產三個不同的環境,那麼使用一套 nacos 叢集可以分別建以下三個不同的 namespace。如下圖所示:

從多租戶的角度

從多個租戶(使用者)的角度來看,每個租戶(使用者)可能會有自己的 namespace,每個租戶(使用者)的配置資料以及註冊的服務資料都會歸屬到自己的 namespace 下,以此來實現多租戶間的資料隔離。例如超級管理員分配了三個租戶,分別為張三、李四和王五。分配好了之後,各租戶用自己的賬戶名和密碼登入後,建立自己的名稱空間。如下圖所示:

可以通過Nacos控制檯上面的“名稱空間”選單來進行名稱空間的管理。

配置管理

通過控制檯的“配置管理”選單可以很方便的進行配置管理。

這裡面主要說下“監聽查詢”這個功能。

這個功能可以查詢到有哪些節點正在監聽配置檔案,並且通過MD5值來判斷,節點監聽到的檔案是不是最新的。

參考