2022-05-05覆盤
nacos優勢
Raft資料一致性策略:
分散式一致性協議 Raft,自 2013 年論文發表,之後就受到了技術領域的熱捧,與其他的分散式一致性演算法比,Raft 相對比較簡單並且易於實現,這也是 Raft 能異軍突起的主要因素。
Raft 協議強依賴 Leader 節點來確保叢集資料一致性。即 client 傳送過來的資料均先到達 Leader 節點,Leader 接收到資料後,先將資料標記為 uncommitted 狀態,隨後 Leader 開始向所有 Follower 複製資料並等待響應,在獲得叢集中大於 N/2 個 Follower 的已成功接收資料完畢的響應後,Leader 將資料的狀態標記為 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執行
下載完安裝包之後直接進行解壓即可
兩種執行模式:
-
單機模式:standalone
-
叢集模式:cluster
單機模式
如果只是在單機模式下啟動執行的話,不用修改任何配置,它會使用其內嵌的資料庫
linux & mac
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作為服務的註冊中心
分三步:
-
引入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>
-
在服務執行的主啟動類上新增開啟註冊的註解
@EnableDiscoveryClient
-
在yml檔案中填寫nacos-server的ip地址
spring:
application:
name: 自定義命名的服務名
cloud:
nacos:
discovery:
server-addr: 服務中心的地址
server:
port: 本服務的啟動埠
使用nacos作為配置中心
Java專案一般都會有多個Profile配置,用於區分開發環境,測試環境,生成環境等,每個環境對應一個yml檔案,然後通過設定 spring.profiles.active 的值來決定使用哪個配置檔案。
<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)的隔離
-
啟動nacos,不能訪問視覺化的控制中心頁面
-
nacos找不到java環境
修改nacos的startup.sh檔案,修改為如圖所示,指定JAVA_HOME為自己的安裝的路徑
如阿里的雲伺服器,需要在控制檯頁面進行安全組埠的開放。
-
版本不相容
比如本機的mac m1就用不了2.x版本的,降成1.4.3。
-
在使用gateway閘道器路由請求到各個服務的時候,503
原因:缺少路由的pom依賴
<!-- 閘道器路由 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> <version>3.1.1</version> </dependency>