Spring Cloud——功能丰富的Nacos

目录

认识Nacos

安装启动Nacos

Nacos核心功能特点

服务注册与发现

负载均衡

服务线下

权重配置

同集群优先访问

健康检查

环境隔离

配置中心

Nacos与Eureka区别


认识Nacos

Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的动态服务发现、配置管理和服务管理平台,也是 Spring Cloud Alibaba 生态中的核心组件。它同时具备 “服务注册中心” 和 “配置中心” 双重功能,解决了微服务架构中服务发现、配置动态更新、服务治理等核心问题,因功能全面、易用性强、高可用设计而被广泛采用。

相比 Eureka单一功能的注册中心,Nacos 的核心优势在于:

  1. 功能合一:同时支持服务注册发现和配置管理,无需集成多个组件。

  2. AP/CP 双模切换:可根据业务场景灵活切换一致性模型(AP 保证可用性,CP 保证一致性)。

  3. 高可用设计:支持集群部署,通过 Raft 协议保证数据一致性,避免单点故障。

  4. 动态配置:配置实时推送,无需重启服务即可生效,支持多环境、多版本管理。

  5. 服务治理:内置健康检查、负载均衡、服务元数据管理等能力。

  6. 易用性:提供可视化控制台,操作简单,且与 Spring Cloud、Dubbo 等框架无缝集成。

安装启动Nacos

下载地址 https://github.com/alibaba/nacos/releases/tag/2.2.3

下载后将压缩包解压

目录介绍:

bin:Nacos启停脚本 (.sh为Linux的启停脚本,.cmd为windows的启停脚本)

conf: Nacos配置文件

target: 存放 Nacos 应用的 jar 包

修改单机模式

Nacos 默认启动方式为集群,启动前需要修改配置为单机模式

使用记事本打开startup.cmd,然后将cluster修改为standalone

启动Nacos

进入bin目录下,双击startup.cmd即可。

访问Nacos主页,出现以下界面,表示Nacos启动成功http://127.0.0.1:8848/nacos

Nacos核心概念:

Namespace:命名空间,常用来做环境隔离(dev/test/prod)。

Group:组,进一步的逻辑分组(如 DEFAULT_GROUPcrm-group)。

Service:服务名(如 customer-service)。

Cluster:同一服务下的子集群标签(如 分地域 beijing / shanghai)。

Instance:具体一个实例(IP:Port + 元数据)。

Metadata:实例标签/权重/版本号等键值,常用于灰度与路由。

Ephemeral(临时实例):默认;靠客户端心跳维持存活,掉线自动摘除。

Persistent(持久实例):不靠心跳,由服务端健康检查;适用于非 JVM/非 SDK 客户端或希望服务端「更强一致管理」的场景。

Nacos核心功能特点

Nacos是Spring Cloud Alibaba的组件,Spring Cloud Alibaba遵循Spring Cloud中定义的服务注册, 服

务发现规范. 因此使用Nacos和使用Eureka对于微服务来说,并没有太大区别。

主要差异在于:

Eureka需要自己搭建⼀个服务,Nacos不用自己搭建服务,组件已经准备好了,只需启动即可。对应依赖和配置不同

服务注册与发现

下述配置演示过程基于微服务流量分发核心:Spring Cloud 负载均衡解析-CSDN博客

Nacos的使用流程:

1.引|入spring-cloud-alibaba的依赖

2.引入Nacos相关的依赖

3.修改配置

4.远程调用

5.测试

引入spring-cloud-alibaba依赖

在父工程的pom文件中的 <dependencyManagement> 中引⼊Spring Cloud Alibaba的依赖:

<properties>
    <spring-cloud-alibaba.version>2022.0.0.0-RC2</spring-cloud-alibaba.version>
</properties>
​
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
     <version>${spring-cloud-alibaba.version}</version>
     <type>pom</type>
    <scope>import</scope>
</dependency>

注意: Spring Boot 和Spring Cloud的版本是有⼀定对应关系的,Spring Cloud Alibaba也遵循Spring Cloud 的标准, 在引⼊依赖时,⼀定要确认各个版本的对应关系。
Spring Cloud Alibaba 和Spring Cloud版本对应关系,版本在⼀定范围内可以⾃由选择。
参考官⽅⽂档:https://sca.aliyun.com/zh-cn/docs/2022.0.0.0/overview/version-explain/

在order-service和product-service中引入nacos依赖

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

在order-service和product-service中修改配置

spring:
  application:
    name: order-service
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.0:8848
spring:
  application:
    name: product-service
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.0:8848

启动服务 启动两个服务, 观察Nacos的管理界面, 发现order-service 和product-service 都注册在Nacos上了。

测试接⼝: http://127.0.0.1:8080/order/1

负载均衡

生产环境相对是比较恶劣的,我们需要对服务的流量进行更加精细的控制,Nacos支持多种负载均衡策略,包括权重,同机房,同地域,同环境等。

服务线下

当某⼀个节点上接口的性能较差时,我们可以第⼀时间对该节点进行下线。

点击下线后, 再次请求接口,会发现该服务没有请求进来了,再次单击上线, 该节点会继续收到请求。

权重配置

通过配置实例权重(0-100),权重越高的实例接收请求比例越高,适用于机器性能差异场景(需开启Nacos负载均衡策略)

开启负载均衡策略

由于Spring Cloud LoadBalance组件自身有负载均衡配置方式,所以不支持Nacos的权重属性配置,我们需要开启Nacos的负载均衡策略,让权重配置生效。

#开启nacos的负载均衡策略
spring:
  cloud:
    loadbalancer:
      nacos:
        enabled: true

同集群优先访问

Nacos把同⼀个机房内的实例,划分为⼀个集群,所以同集群优先访问,在⼀定程度上也可以理解为同机房优先访问。微服务架构中,⼀个服务通常有多个实例共同提供服务,这些实例可以部署在不同的机器上,这些机器可以分布在不同的机房。

微服务访问时, 应尽量访问同机房的实例,当本机房内实例不可用时,才访问其他机房的实例,因为通常情况下因同⼀个机房的机器属于⼀个局域网,局域网访问速度更快⼀点。(要使该生效也需开启Nacos负载均衡策略)

配置集群名称

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 110.41.51.65:10020
        cluster-name: SH   #集群名称:上海集群
 

健康检查

Nacos作为注册中心,需要感知服务的健康状态,才能为服务调用方提供良好的服务。

Nacos 中提供了两种健康检查机制:

客户端主动上报机制:

客户端通过心跳上报方式告知服务端(nacos注册中心)健康状态,默认心跳间隔5秒。

nacos会在超过15秒未收到心跳后将实例设置为不健康状态,超过30秒将实例删除。

服务器端反向探测机制:

nacos主动探知客户端健康状态,默认间隔为20秒。

健康检查失败后实例会被标记为不健康,不会被立即删除。

Nacos 中的健康检查机制不能主动设置,健康检查机制是和 Nacos 的服务实例类型强相关的。

Nacos的服务实例(注册的节点)分为临时实例和非临时实例

临时实例: 如果实例宕机超过⼀定时间,会从服务列表剔除, 默认类型。

非临时实例: 如果实例宕机,不会从服务列表剔除,也可以叫永久实例。

Nacos对临时实例,采取的是 客户端主动上报机制, 对非临时实例,采取服务器端反向探测机制。

永久实例配置

spring:
  cloud:
    nacos:
      discovery:
        ephemeral: false  #设置为⾮临时实例

环境隔离

企业开发中,⼀个服务一般会分为开发环境,测试环境和生产环境。

  1. 开发环境:开发⼈员用于开发的服务器,是最基础的环境,⼀般日志级别设置较低,可能会开启⼀些调试信息。

  2. 测试环境:测试⼈员用来进行测试的服务器,是开发环境到生产环境的过渡环境。

  3. 生产环境:正式提供对外服务的环境,通常关掉调试信息。

通常情况下,这几个环境是不能互相通信的,Nacos提供了namespace(命名空间)来实现环境的隔离,不同的namaspace的服务不可见

新增命名空间:

修改配置

spring:
  cloud:
    nacos:
      discovery:
        namespace: 51152a13-7911-49e3-bbdc-16fd5670a257

配置中心

Nacos 既是注册中心,也是配置中心

配置中心就是对这些配置项进行统⼀管理,通过配置中心,可以集中查看,修改和删除配置,无需再逐个修改配置文件,提高效率的同时, 也降低了出错的风险。

服务启动时, 从配置中心读取配置项的内容,进行初始化。配置项修改时,通知微服务,实现配置的更新加载。

在Nacos控制台添加配置项

注意:服务管理的命名空间 ≠ 配置管理的命名空间

引入相关依赖

<dependency>    
    <groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- SpringCloud 2020.***之后版本需要引⼊**bootstrap-->
<dependency>
	<groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

配置bootstrap.properties

微服务启动前,需要先获取nacos中配置,并与application.yml配置合并,在微服务运行之前,Nacos要求必须使用 bootstrap.properties 或者使用bootstrap.yml 配置文件来配置Nacos Server 地址。

spring:
  application:
    name: product-service
  cloud:
    nacos:
      config:
        server-addr: 110.41.51.65:10020

注意

spring.application.name 需要和nacos配置管理的Data ID⼀致。

spring.cloud.nacos.config.server-addr 为Nacos Server的地址

编写程序

@RequestMapping("/config")
@RefreshScope   //配置进行热更新
@RestController
public class NacosController {
	@Value("${nacos.test.num:0}")   //读取配置
	private Integer nacosNum;

 	@RequestMapping("/get")
 		public Integer get() {
 		return nacosNum;
	}
}

启动程序, 访问接口: http://127.0.0.1:9090/config/get

修改nacos配置

再次访问链接:

Nacos与Eureka区别

  1. 功能

Nacos除了服务发现和注册之外, 还提供了配置中心, 流量管理和DNS服务等功能。

  1. CAP理论

Eureka遵循AP原则,Nacos可以切换AP和CP模式,默认AP。

Nacos 根据配置识别CP或者AP模式,如果注册Nacos的Client的节点是临时节点,那么Nacos对这个Client节点的效果就是AP,反之是CP,AP和CP可以同时混合存在。

  1. 服务发现

Eureka:基于拉模式,Eureka Client会定期从Server拉取服务信息,有缓存,默认每30秒拉取⼀次。

Nacos:基于推送模式,服务列表有变化时实时推送给订阅者,服务端和客户端保持心跳连接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值