Nacos快速開始


Nacos是一個服務發現配置管理服務管理的組件。

說到服務注冊與發現,我想到Eureka、Zookeeper

說到服務治理,我想到Dubbo

說到配置管理,我想到Apollo

作為后起之秀的Nacos更強大更簡潔

Nacos的文檔很詳細,都是中文,不再詳述,此處只摘抄幾點比較重要的內容,算是對自己看了一下午的一個總結

1. 什么是Nacos

Nacos 可以快速實現動態服務發現、服務配置、服務元數據及流量管理。 

Nacos 支持幾乎所有主流類型的“服務”的發現、配置和管理。

特性:

  • 服務發現和服務健康監測

Nacos 支持基於 DNS 和 基於 RPC 的服務發現。服務提供者使用 原生SDK、OpenAPI、或一個獨立的Agent TODO注冊 Service 后,服務消費者可以使用DNS TODO 或HTTP&API查找和發現服務。

Nacos 提供對服務的實時的健康檢查,阻止向不健康的主機或服務實例發送請求。Nacos 支持傳輸層 (PING 或 TCP)和應用層 (如 HTTP、MySQL、用戶自定義)的健康檢查。 對於復雜的雲環境和網絡拓撲環境中(如 VPC、邊緣網絡等)服務的健康檢查,Nacos 提供了 agent 上報模式和服務端主動檢測2種健康檢查模式。Nacos 還提供了統一的健康檢查儀表盤,幫助您根據健康狀態管理服務的可用性及流量。

  • 動態配置服務 

更新配置后無需重新部署或重啟服務,立即生效; 

Nacos 提供了一個簡潔易用的UI(控制台)幫助您管理所有的服務和應用的配置;

Nacos 提供包括配置版本跟蹤、金絲雀發布、一鍵回滾配置以及客戶端配置更新狀態跟蹤等功能;

  • 動態 DNS 服務 

動態 DNS 服務支持權重路由,你可以更容易地實現中間層負載均衡、更靈活的路由策略、流量控制以及數據中心內網的簡單DNS解析服務。

  • 服務及其元數據管理

Nacos 能讓你從微服務平台建設的視角管理數據中心的所有服務及元數據,包括管理服務的描述、生命周期、服務的靜態依賴分析、服務的健康狀態、服務的流量管理、路由及安全策略、服務的 SLA 以及最首要的 metrics 統計數據。

2. 為什么用Nacos

用不用主要取決於:

  1. 是否能夠更好為業務發展做支撐;
  2. 功能是否滿足需求;
  3. 是否穩定,是否經過大規模的生成環境驗證;
  4. 是否有完善的文檔和活躍的社區;

阿里開源的組件還是比較受歡迎的,先來看Nacos地圖

2.1. 架構圖

這張圖很眼熟,如果去掉藍色的塊兒,就跟Dubbo的那個結構圖很像了(提供方、消費方、注冊中心、監控、控制台)

邏輯架構及其組件介紹

2.2. 數據模型

Nacos 數據模型 Key 由三元組唯一確定, Namespace默認是空串,公共命名空間(public),分組默認是 DEFAULT_GROUP。

 

3. 怎么用Nacos

最新穩定版本 下載 nacos-server-$version.zip 包 

wget https://github.com/alibaba/nacos/releases/download/1.1.4/nacos-server-1.1.4.tar.gz
tar -zxf nacos-server-1.1.4.tar.gz
cd nacos/bin
sh startup.sh -m standalone
sh shutdown.sh 

服務端(Nacos Server)啟動以后,可以先一下控制台

http://127.0.0.1:8848/nacos

初始用戶名密碼是:nacos/nacos

接下來,編寫客戶端(Nacos Client)程序

這里用Spring Boot寫一個測試用例

pom.xml 

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
 4     <modelVersion>4.0.0</modelVersion>
 5     <parent>
 6         <groupId>org.springframework.boot</groupId>
 7         <artifactId>spring-boot-starter-parent</artifactId>
 8         <version>2.2.2.RELEASE</version>
 9         <relativePath/> <!-- lookup parent from repository -->
10     </parent>
11     <groupId>com.cjs.example</groupId>
12     <artifactId>nacos-spring-boot-config-example</artifactId>
13     <version>0.0.1-SNAPSHOT</version>
14     <name>nacos-spring-boot-config-example</name>
15 
16     <properties>
17         <java.version>1.8</java.version>
18     </properties>
19 
20     <dependencies>
21         <dependency>
22             <groupId>org.springframework.boot</groupId>
23             <artifactId>spring-boot-starter-web</artifactId>
24         </dependency>
25 
26         <dependency>
27             <groupId>com.alibaba.boot</groupId>
28             <artifactId>nacos-config-spring-boot-starter</artifactId>
29             <version>0.2.1</version>
30         </dependency>
31     </dependencies>
32 
33     <build>
34         <plugins>
35             <plugin>
36                 <groupId>org.springframework.boot</groupId>
37                 <artifactId>spring-boot-maven-plugin</artifactId>
38             </plugin>
39         </plugins>
40     </build>
41 
42 </project> 

剛才已經啟動了服務端,默認端口是8848,因此我們需要告訴客戶端服務端的地址

application.properties

nacos.config.server-addr=127.0.0.1:8848

使用 @NacosPropertySource 加載 dataId 為 example 的配置源,並開啟自動更新

 1 package com.cjs.example.nacos;
 2 
 3 import com.alibaba.nacos.spring.context.annotation.config.NacosPropertySource;
 4 import org.springframework.boot.SpringApplication;
 5 import org.springframework.boot.autoconfigure.SpringBootApplication;
 6 
 7 @SpringBootApplication
 8 @NacosPropertySource(dataId = "example", autoRefreshed = true)
 9 public class NacosSpringBootConfigExampleApplication {
10 
11     public static void main(String[] args) {
12         SpringApplication.run(NacosSpringBootConfigExampleApplication.class, args);
13     }
14 
15 }

通過 Nacos 的 @NacosValue 注解設置屬性值

 1 package com.cjs.example.nacos.controller;
 2 
 3 import com.alibaba.nacos.api.config.annotation.NacosValue;
 4 import org.springframework.web.bind.annotation.GetMapping;
 5 import org.springframework.web.bind.annotation.RequestMapping;
 6 import org.springframework.web.bind.annotation.RestController;
 7 
 8 @RestController
 9 @RequestMapping("/config")
10 public class ConfigController {
11 
12     @NacosValue(value = "${useLocalCache:false}", autoRefreshed = true)
13     private boolean useLocalCache;
14 
15     @GetMapping("/get")
16     private boolean get() {
17         return useLocalCache;
18     }
19 }

啟動 NacosConfigApplication,調用 curl http://localhost:8080/config/get,返回內容是 false

通過調用 Nacos Open API 向 Nacos server 發布配置:dataId 為example,內容為useLocalCache=true

curl-X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=example&group=DEFAULT_GROUP&content=useLocalCache=true"

再次訪問 http://localhost:8080/config/get,此時返回內容為true,說明程序中的useLocalCache值已經被動態更新了

 

注冊一個服務再看

curl-X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=example&ip=127.0.0.1&port=8080'

 

3.1. 服務注冊、發現和配置管理

服務注冊

curl-X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080' 

服務發現

curl-X GET 'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName' 

發布配置

curl-X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld" 

獲取配置

curl-X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"

4. 文檔

https://nacos.io/zh-cn/index.html

https://nacos.io/zh-cn/docs/what-is-nacos.html

https://nacos.io/zh-cn/docs/quick-start.html

https://nacos.io/zh-cn/docs/deployment.html

https://github.com/alibaba/nacos

http://dubbo.apache.org/zh-cn/docs/user/references/registry/nacos.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM