SpringCloud實戰之路 | 應用篇(九)Spring Cloud Alibaba註冊中心+配置中心Nacos

SpringCloud實戰之路 | 應用篇(九)Spring Cloud Alibaba註冊中心+配置中心Nacos

Nacos介紹

一個更易於構建雲原生應用的動態服務發現、配置管理和服務管理平臺。
Nacos就是註冊中心+配置中心的組合,簡單對比Spring Cloud Netflix來說 Nacos = Eureka+Config+Bus

官⽹:https://nacos.io 下載地址:https://github.com/alibaba/Nacos

功能特性

  • 服務發現及管理: 動態服務發現對以服務爲中心的(例如微服務和雲原生)應用架構方式非常關鍵。Nacos支持DNS-Based和RPC-Based(Dubbo、gRPC)模式的服務發現。Nacos也提供實時健康檢查,以防止將請求發往不健康的主機或服務實例。藉助Nacos,您可以更容易地爲您的服務實現斷路器。
  • 動態配置服務: 動態配置服務讓您能夠以中心化、外部化和動態化的方式管理所有環境的配置。動態配置消除了配置變更時重新部署應用和服務的需要。配置中心化管理讓實現無狀態服務更簡單,也讓按需彈性擴展服務更容易。
  • 動態DNS服務: 通過支持權重路由,動態DNS服務能讓您輕鬆實現中間層負載均衡、更靈活的路由策略、流量控制以及簡單數據中心內網的簡單DNS解析服務。動態DNS服務還能讓您更容易地實現以DNS協議爲基礎的服務發現,以消除耦合到廠商私有服務發現API上的風險。
  • 服務及其元數據管理: Nacos 能讓您從微服務平臺建設的視角管理數據中心的所有服務及元數據,包括管理服務的描述、生命週期、服務的靜態依賴分析、服務的健康狀態、服務的流量管理、路由及安全策略、服務的 SLA 以及最首要的 metrics 統計數據。

Nacos部署

與Eureka不同,Nacos不需要再創建項目,官方已經提供好了安裝包(下載地址:https://github.com/alibaba/nacos/releases)
啓動命令:

#linux/mac:
sh startup.sh -m standalone

#windows:
cmd startup.cmd

訪問nacos管理頁面:http://127.0.0.1:8848/nacos/#/login(默認用戶名字/密碼:nacos/nacos)
在這裏插入圖片描述

Nacos註冊中心

在父項目maven中引入spring cloud alibaba依賴

    <dependencyManagement>
        <dependencies>
            <!--Spring Cloud Alibaba(SCA) -->
            <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>
        </dependencies>
    </dependencyManagement>

在服務提供者引入Nacos註冊中心依賴

		<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

修改服務的配置文件

server:
  port: 8080
spring:
  application:
    name: cloud-service-user
  main:
    allow-bean-definition-overriding: true
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useUnicode=true
    username: root
    password: root
  cloud:
    nacos:
      discovery:
        ################ 配置nacos server地址
        server-addr: 127.0.0.1:8848 
  jpa:
    database: MySQL
    show-sql: true
    hibernate:
      naming:
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl  #避免將駝峯命名轉換爲下劃線命名
management:
  endpoints:
    web:
      exposure:
        include: "*"
  # 暴露健康接口的細節
  endpoint:
    health:
      show-details: always

在這裏插入圖片描述

Nacos數據模型(領域模型)

Namespace命名空間、Group分組、集羣這些都是爲了進⾏歸類管理,把服務和配置⽂件進⾏歸類,歸類之後就可以實現隔離的效果,對於服務來說,不同命名空間中的服務不能夠互相訪問調⽤。

  • Namespace: 命名空間,對不同的環境進⾏隔離,⽐如隔離開發環境、測試環境和⽣產環境
  • Group: 分組,將若⼲個服務或者若⼲個配置集歸爲⼀組,通常習慣⼀個系統歸爲⼀個組
  • Service: 某⼀個服務
  • DataId: 配置集或者可以認爲是⼀個配置⽂件

推薦用法:

概念 描述
Namespace 代表不同的環境,如開發dev、測試test、⽣產環境prod
Group 代表某項⽬
Service 某個項⽬中具體xxx服務
DataId 某個項⽬中具體的xxx配置⽂件

註冊後服務配置信息:

在這裏插入圖片描述

  • 分組: 分組的名稱默認DEFAULT_GROUP(可以自定義設置分組)
  • 元數據: 與eureka中的元數據類似
  • 服務路由類型: 常規使用,保持默認即可,主要用它做多數據中心的就近訪問
  • 權重: 權重越大承擔流量越大
  • 下線: 支持動態操作服務的上線下線,下線後消費者獲取不到該實例的信息了
  • 保護閾值: 可以設置爲0-1的浮點數,當保護閾值>健康實例數/當前服務總實例數時,說明健康的實例過少,保護閾值會觸發(狀態true),nacos會把所有實例信息全部提供出去(健康的實例+不健康的實例),消費者有可能會請求到不健康的實例上,導致請求失敗,但這樣也會比雪崩好,犧牲部分請求,保證系統的可用。
    保護閾值場景: 一般流程下服務消費者要從nacos中請求某一個提供者的實例,nacos會給一個健康的提供者的實例,但是在大流量高併發訪問量的情況下,如果服務有100個實例,只有2個是健康的,如果nacos只返回這倆個健康的實例,後續的消費者都請求到這兩個實例上,2個健康的實例也扛不住了,整個服務 就扛不住,上游的微服務也會導致崩潰,產⽣雪崩效應。

負載均衡:Nacos客戶端引⼊的時候,會關聯引⼊Ribbon的依賴包,我們使⽤OpenFiegn的時候也會引⼊Ribbon的依賴,Ribbon包括Hystrix都按原來⽅式進⾏配置即可

Nacos集羣配置:

修改配置文件:
1.nacos/config/application.properties,修改每個nacos節點端口號server.port和綁定的ip地址nacos.inetutils.ip-address
2.複製⼀份conf/cluster.conf.example⽂件,命名爲cluster.conf,在配置⽂件中設置集羣中每⼀個節點的信息

# 集羣節點配置
127.0.0.1:8848
127.0.0.1:8849
127.0.0.1:8850

啓動命令:

sh startup.sh -m cluster

Nacos配置中心

添加配置信息

在這裏插入圖片描述
微服務通過 Namespace + Group + Data ID 來鎖定配置⽂件,Namespace不指定就默認public,Group不指定就默認 DEFAULT_GROUP
Data ID格式:
${prefix}-${spring.profile.active}.${file-extension}

  • prefix 默認爲 spring.application.name,也可以通過配置項spring.cloud.nacos.config.prefix修改
  • spring.profile.active 即爲當前環境對應的 profile
  • file-exetension 爲配置內容的數據格式,可以通過配置項spring.cloud.nacos.config.file-extension 來配置。⽬前只⽀持 properties 和 yaml類型

在微服務引入Nacos配置中心依賴

		<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

在之前的修改配置文件增加

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      #配置中心 
      config:
        server-addr: 127.0.0.1:8848
        #不填默認爲public 如果自己定義了namespace這裏可以按需要修改爲自己的*填寫的是Namespace的id
        #namespace:
        #不填默認爲DEFAULT_GROUP
        #group:
        file-extension: yaml

動態刷新配置信息

@RestController
@RefreshScope //動態刷新配置信息
public class CodeController {

    @Value("${spring.datasource.driver-class-name}")
    private String driverClassName;

    @GettMapping("/test")
    public String test() {
        return driverClassName;
    }

}

如何配置多個配置文件:

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      #配置中心 
      config:
        server-addr: 127.0.0.1:8848
        #不填默認爲public 如果自己定義了namespace這裏可以按需要修改爲自己的*填寫的是Namespace的id
        #namespace:
        #不填默認爲DEFAULT_GROUP
        #group:
        file-extension: yaml
        #多個配置文件
        ext-config[0]:
 		  data-id: a.yaml
          group: DEFAULT_GROUP
          refresh: true #開啓擴展dataId的動態刷新
        ext-config[1]:
 		  data-id: a.yaml
          group: DEFAULT_GROUP
          refresh: true #開啓擴展dataId的動態刷新

Nacos數據持久化

Nacos 默認使⽤嵌⼊式數據庫進⾏數據存儲,它⽀持改爲外部Mysql存儲
創建數據庫nacos_config,sql腳本位於config/nacos-mysql.sql目錄下
修改/conf/application.properties,修改Mysql數據源配置

spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnec
t=true
db.user=root
db.password=root
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章