1. 程式人生 > 其它 >2022-05-05覆盤

2022-05-05覆盤

nacos優勢

Raft資料一致性策略:

分散式一致性協議 Raft,自 2013 年論文發表,之後就受到了技術領域的熱捧,與其他的分散式一致性演算法比,Raft 相對比較簡單並且易於實現,這也是 Raft 能異軍突起的主要因素。

Raft 協議強依賴 Leader 節點來確保叢集資料一致性。即 client 傳送過來的資料均先到達 Leader 節點,Leader 接收到資料後,先將資料標記為 uncommitted 狀態,隨後 Leader 開始向所有 Follower 複製資料並等待響應,在獲得叢集中大於 N/2 個 Follower 的已成功接收資料完畢的響應後,Leader 將資料的狀態標記為 committed

,隨後向 client 傳送資料已接收確認,在向 client 傳送出已資料接收後,再向所有 Follower 節點發送通知表明該資料狀態為committed。

nacos架構

基本架構:

邏輯架構及其元件介紹:

 

資料模型:

Nacos 資料模型 Key 由三元組唯一確定, Namespace預設是空串,公共名稱空間(public),分組預設是 DEFAULT_GROUP

相容性及使用:

現在nacos升級到了2.0版本,在mac m1上使用2.0版本的的話,能正常啟動,但是不能訪問控制的視覺化介面,解決方案,降版本,1.4.3親測可用。

其它版本相容性參考官方文件:https://nacos.io/zh-cn/docs/2.0.0-compatibility.html

nacos下載安裝

git地址:https://github.com/alibaba/nacos

根據你需要下載對應的版本與安裝包

nacos執行

下載完安裝包之後直接進行解壓即可

兩種執行模式:

  1. 單機模式:standalone

  2. 叢集模式:cluster

單機模式

如果只是在單機模式下啟動執行的話,不用修改任何配置,它會使用其內嵌的資料庫

linux & mac

在bin目錄下

sh ./startup.sh -m standalone

windows

cmd ./startup.sh -m standalone

啟動完成之後,訪問http://ip:8848/nacos

賬號/密碼:nacos/nacos

叢集模式

使用叢集模式需要修改兩個配置檔案

  • conf/cluster.conf

這裡面填寫叢集的及其ip地址

192.168.0.1
192.168.0.2
192.168.0.3
  • conf/application.properties

使用叢集模式需要建立資料庫,不能使用內嵌的,因為叢集模式涉及到資料共享

資料庫的sql在conf目錄下

db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root
 

使用nacos作為服務的註冊中心

分三步:

  1. 引入nacos註冊中心的pom依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  1. 在服務執行的主啟動類上新增開啟註冊的註解

@EnableDiscoveryClient
  1. 在yml檔案中填寫nacos-server的ip地址

spring:
  application:
    name: 自定義命名的服務名
  cloud:
    nacos:
      discovery:
        server-addr: 服務中心的地址
server:
  port: 本服務的啟動埠

使用nacos作為配置中心

Java專案一般都會有多個Profile配置,用於區分開發環境,測試環境,生成環境等,每個環境對應一個yml檔案,然後通過設定 spring.profiles.active 的值來決定使用哪個配置檔案。

  • 引入config依賴

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>${nacos.version}</version>
</dependency>
  • 建立bootstrap.yml檔案 (如果引入了配置依賴沒有建立檔案的話會報錯)

spring:
  application:
    name: 服務名
  cloud:
    nacos:
      discovery:
        server-addr: ${NACOS_SERVER:8848}
      config:
        server-addr: ${NACOS_SERVER:8848}
  
server:
  port: 服務埠

注意:使用配置中心配置的話,要向實時重新整理資料,需要新增@RefreshScope註解

配置的隔離

可以通過三種方式來進行配置隔離:Nacos的伺服器、namespace名稱空間、group分組,在bootstrap.yml檔案中可以通過配置Nacos的server-addr、namespace和group來區分不同的配置資訊。

  • Nacos的伺服器 spring.cloud.nacos.config.server-addr

  • Nacos的名稱空間 spring.cloud.nacos.config.namespace,注意,這裡使用名稱空間的ID不是名稱

  • Nacos的分組 spring.cloud.nacos.config.group

一般情況下,使用名稱空間namespace來進行服務之間的隔離,使用分組group來進行生產環境(dev,test,prop)的隔離

 

可能出現的問題

  1. 啟動nacos,不能訪問視覺化的控制中心頁面

  • nacos找不到java環境

修改nacos的startup.sh檔案,修改為如圖所示,指定JAVA_HOME為自己的安裝的路徑

  • 遠端需要開啟服務的防火牆安全組

如阿里的雲伺服器,需要在控制檯頁面進行安全組埠的開放。

  • 版本不相容

比如本機的mac m1就用不了2.x版本的,降成1.4.3。

  1. 在使用gateway閘道器路由請求到各個服務的時候,503

原因:缺少路由的pom依賴

 <!-- 閘道器路由 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
    <version>3.1.1</version>
</dependency>