Nacos快速开始

摘要:
Nacos支持几乎所有主流类型的“服务”的发现、配置和管理。Nacos提供服务的实时健康检查,并防止向不健康的主机或服务实例发送请求。对于复杂云环境和网络拓扑环境中的服务健康检查,Nacos提供了两种健康检查模式:代理报告模式和服务器主动检测。Nacos还提供了统一的健康检查仪表板,帮助您根据健康状态管理服务可用性和流量。

Nacos快速开始第1张

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地图

Nacos快速开始第2张

2.1. 架构图

Nacos快速开始第3张

这张图很眼熟,如果去掉蓝色的块儿,就跟Dubbo的那个结构图很像了(提供方、消费方、注册中心、监控、控制台)

逻辑架构及其组件介绍

Nacos快速开始第4张

2.2. 数据模型

Nacos 数据模型 Key 由三元组唯一确定, Namespace默认是空串,公共命名空间(public),分组默认是 DEFAULT_GROUP。

Nacos快速开始第5张 

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快速开始第6张

接下来,编写客户端(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值已经被动态更新了

Nacos快速开始第7张

Nacos快速开始第8张

注册一个服务再看

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

Nacos快速开始第9张 

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

免责声明:文章转载自《Nacos快速开始》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux下多线程查看工具(pstree、ps、pstack)spin_lock、spin_lock_irq、spin_lock_irqsave区别【转】下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

redmine部署

1. 下载Redmine源代码这里利用git下载: git clone https://github.com/redmine/redmine 2. 安装配置MySQL已经安装过MySQL就不需要执行下面的命令: sudo apt-get install mysql-server mysql-client 配置redmine数据库和用户: mysql -u...

asp.net mvc4使用log4.net 日志功能

对于网站来讲,不能把异常信息显示给用户,异常信息只能记录到日志,出了问题把日志文件发给开发人员,就能知道问题所在。 下面演示网站 出错后自动添加出错日志的实例 (1)新建一个WebApplication(2)添加对log4net.dll的引用 (3)在Web.Config (或App.Config)添加配置, <configuration>...

CKEditor上传图片—配置CKFinder

在网站开发中,如果有发布类似新闻的图文混排需求时,CKEditor不失为一个很好的选择,下载地址如下: http://ckeditor.com/download 它的前身是FCKEditor,随着它的更新,上传图片的功能被分离出去了,现在如果需要实现上传图片,要么自己写代码,还有一种方法是使用CKFinder,下载地址如下: http://ckfinder...

Android中SD卡内容读取和简易FTP文件上传(番外)

  大家好,又是一周一次的拔旗时间。本周公司事情较多,原本安排的关于MediaPlayer多媒体应用的技术在本周内分享的事宜要歌啦~ 为了不女装,这次的技术分享内容关于Android中SD卡处理和FTP上传功能,算是一个番外篇(其实我才不告诉你们我是代码没有写完)。So,下面正式开始吧。 Android中SD卡内容读取          有人可能会问,这有...

1.Vue技术栈开发实战-使用vue-cli3创建项目

vue-cli2.0和 vue cli3.0是有天壤之别的,主要得益于webpack4的零配置。vue-cli3.0创建项目,不再需要我们去书写庞杂的webpack配置,我们基本实现,什么都不用配置就可以启动、编译、打包我们的项目, 我们使用vue ui来创建项目,vue ui是vue cli3.0给我们提供的可视化的项目管理工具 你需要提前安装好vue...

webpack 多环境打包

目前来说有两种方案: 方案一: 1.修改build文件夹下build.js文件   添加声明变量    2.修改config文件夹下dev.env.js文件   这个是开发环境所用版本    3.修改config文件夹下prod.env.js文件    添加不同环境的名称,暂时以正式环境和测试环境两个环境为例    4.不同配置参数引用          ...