当前位置:网站首页>Nacos - 配置管理

Nacos - 配置管理

2022-07-01 08:40:00 SXHENIGA

筆記翻譯出處:黑馬Nacoshttps://www.bilibili.com/video/BV1VJ411X7xX?p=17&spm_id_from=333.880.my_history.page.click&vd_source=3c0d9a4d48df5bf76352d1653111b1d7

一、配置中心

1、簡述

        配置中心一般用於微服務中,當單一系統被拆分成分布式系統上的一個個服務節點之後,系統的配置文件也需要被拆分。配置中心就是將配置文件從系統中分離出來,對系統配置進行統一的管理,並且系統配置遠程被修改後,應用還可以主動獲取修改後的配置內容,應用自身不需要自己去管理系統配置。
        簡單來說,就是把Springboot的yml等配置文件放在遠程管理,由Springboot主動獲取。

2、特性

1)配置特點

配置特點描述
1配置是獨立於程序的只讀變量讀取配置來改變自己的行為
2配置伴隨應用的整個生命周期配置貫穿應用整個生命周期
3配置可以有多種加載方式可通過配置文件、環境變量、啟動參數、數據庫等方式加載
4配置需要治理區分開發、測試、生產;區分不同的集群

2)配置中心特性 

配置中心特性
1配置項容易讀取和修改
2分布式環境下應用配置的可管理性,即提供遠程管理配置的能力
3致辭對配置的修改的檢視以把控風險
4可以查看配置修改的曆史記錄
5不同部署環境下應用配置的隔離性

二、Nacos

1、Nacos簡介

        Nacos致力於幫助您發現、配置和管理微服務。它是阿裏的一個開源產品,是針對微服務架構中的服務發現,配置管理,服務治理的綜合型解决方案,能幫助更加敏捷和容易地構建、交付和管理微服務平臺。

2、Nacos特性

Nacos特性描述
1服務發現與服務健康檢查更容易注册,通過DNS或HTTP接口發現服務;實時對服務進行健康檢查
2動態配置管理消除了在更新配置時重新部署應用程序,這使配置的更新更加高效和靈活
3動態DNS服務提供基於DNS協議的服務發現能力,旨在支持异構語言的服務發現
4服務和元數據管理可以從微服務平臺視角,管理數據中心的所有服務及元數據

3、配置中心對比

對比項目Spring Cloud ConfigApolloNacos
配送實時推送支持(Spring Cloud Bus)支持(HTTP長輪詢1S內)支持(HTTP長輪詢1S內)
版本管理支持(Git)支持支持
配置回滾支持(Git)支持支持
灰度發布支持支持不支持
權限管理支持(依賴Git)支持不支持
多集群支持支持支持
多環境支持支持支持
監聽查詢支持支持支持
多語言支持Java主流語言,Open API主流語言,Open API
配置格式校驗不支持支持支持
單機讀(QPS)7(限流所致)900015000
單機寫(QPS)5(限流所致)11001800
3節點讀(QPS)21(限流所致)2700045000
3節點寫(QPS)5(限流所致)33005600

三、Nacos快速入門

1、安裝包

nacos-server-1.1.4https://www.aliyundrive.com/s/2cUubQYMSX9

2、啟動服務器

 3、界面訪問

本地地址http://127.0.0.1:8848/nacos/index.html
賬號密碼賬號:nacos 密碼:nacos

4、OPEN API 配置管理測試

1)用ApiPost或者Postman發布配置請求

127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld

2)界面查看配置

5、Nacos連接外部Mysql存儲

        單機模式下,Nacos默認使用嵌入式數據庫實現數據的存儲,若想使用外部Mysql存儲Nacos數據,需要進行以下步驟:

1)安裝數據庫

        MySQL:5.6.5+,MySQL 8 以下

2)初始化數據庫

初始化MySQL數據庫名,將nacos-mysql.sql導入

3)修改配置文件application.properties

spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=

四、Nacos配置入門

1、發布配置[界面操作]

2、Nacos客戶端獲取配置[入門]

1)新建Maven項目

2)pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.dgs</groupId>
    <artifactId>Nacos01</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>1.1.3</version>
        </dependency>
    </dependencies>

</project>

五、Nacos配置管理模型

        對於Nacos配置管理,通過Namespace、group、Data ID 能够定比特到一個配置集

配置集(Data ID)

        在系統中,一個配置文件通常就是一個配置集,一個配置集可以包含了系統的各種配置信息,例如,一個配置集可能包含了數據源、線程池、日志級別等配置項。每個配置集都可以定義一個意義的名稱,就是配置集的ID,即Data ID。

配置項(配置內容)

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

配置分組(Group)

        配置分組是對配置集進行分組,通過一個有意義的字符串(如Buy或Trade)來錶示,不同的配置分組下可以有相同的配置集(Data ID)。當您再Nacos上創建一個配置時,如果未填寫配置分組的名稱,則配置分組的名稱默認采用DEFAULT_GROUP。配置分組的常見場景:可用於區分不同的項目或應用。

命名空間(Namespace) 

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

六、Nacos配置管理應用於分布式系統

1、微服務架構

        將應用分解為小的、相互連接的微服務,避免了開發一個巨大的單體式的應用,而是將應用分解為小的、互相連接的微服務。

        一個微服務一般完成某個特定的功能,比如訂單服務、用戶服務等等。每一個微服務都是完整應用,都有自己的業務邏輯和服務

2、分布式應用配置管理

  • 用戶通過Nacos Server的控制臺集中對多個服務的配置進行管理。
  • 各服務統一從Nacos Server中獲取各自的配置,並監聽配置的變化。

3、Nacos整合Springboot

1)新增命名空間dev 

2)在dev命名空間發布兩個配置

① Nacos1.yaml②Nacos2.yaml

3)創建Maven父工程

4)Maven版本配置

5)Maven父工程添加pom依賴

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.dgs</groupId>
    <artifactId>NacosTest</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
<!--  後面加入子工程,pom依賴中就會有這個
    <modules>
        <module>Nacos1</module>
        <module>Nacos2</module>
    </modules>-->
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF‐8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF‐8</project.reporting.outputEncoding>
    </properties>
    <dependencyManagement>
        <dependencies>
            <!-- spring cloud alibaba 2.1.0.RELEASE-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.SR3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.1.3.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

6)新建子工程Nacos1

 

7)子工程Nacos1添加pom依賴

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>NacosTest</artifactId>
        <groupId>com.dgs</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>Nacos1</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

</project>

8)Nacos1子工程,新增配置文件

9)Nacos1子工程,添加Springboot啟動類 

10)Nacos1子工程,添加Controller,獲取遠程Nacos配置文件內容 

11)啟動測試

12)新增子工程Nacos2,同Nacos1

13)新增子工程Nacos2的配置文件

14)新增子工程Nacos2啟動類

15)Nacos2子工程,添加Controller,獲取遠程Nacos配置文件內容 

16)啟動測試

4、自定義擴展的 Data Id 配置 

Spring Cloud Alibaba Nacos Config 可支持自定義的Data Id 的配置。

通過自定義擴展的 Data Id 配置,既可以解决多個應用間配置共享的問題,又可以支持一個應用有多個配置文件。

spring:
  application:
    name: service2
  cloud:
    nacos:
      config:
        server‐addr: 127.0.0.1:8848
        # config external configuration
        # 1、Data Id 在默認的組 DEFAULT_GROUP,不支持配置的動態刷新
        ext‐config[0]:
          data‐id: ext‐config‐common01.properties
        # 2、Data Id 不在默認的組,不支持動態刷新
        ext‐config[1]:
          data‐id: ext‐config‐common02.properties
          group: GLOBALE_GROUP
        # 3、Data Id 既不在默認的組,也支持動態刷新
        ext‐config[2]:
          data‐id: ext‐config‐common03.properties
          group: REFRESH_GROUP
          refresh: true
  • 通過spring.cloud.nacos.config.ext-config[n].data-id 的配置方式來支持多個Data Id的配置
  • 通過spring.cloud.nacos.config.ext-config[n].group 的配置方式自定義Daya Id 所在的租,默認DEFAULT_GROUP
  • 通過spring.cloud.nacos.config.ext-config[n].refresh的配置方式來控制該Data Id 在配置變更時,是否支持應用中科動態刷新,感知到最新的配置值。默認是不支持

5、自定義共享 Data Id 配置

spring:
  cloud: 
    nacos: 
      config: 
        shared‐dataids: ext‐config‐common01.properties,ext‐config‐common02.properties 
          refreshable‐dataids: ext‐config‐common01.properties
  • 通過spring.cloud.nacos.config.shared-dataids 來支持多個共享Data Id的配置,多個之前用逗號隔開。
  • 通過spring.cloud.nacos.config.refreshable-dataids 來支持哪些共享配置的Data Id 在配置變化時,應用中是否可動態刷新,感知到最新的配置值,多個Data ID 之間用逗號隔開。如果沒明確配置,默認都不支持動態刷新
  • 它把group固定為DEFAULT_GROUP

6、配置優先級

A、通過內部相關規則(應用名、擴展名) 自動生成相關的Data Id配置

B、多個擴展Data Id

C、多個共享Data Id

A>B>C

原网站

版权声明
本文为[SXHENIGA]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/182/202207010833328103.html