Nacos

一、nacos 简介

Nacos (Dynamic Naming and Configuration Service) 是一个开源的动态服务发现、配置管理和服务管理平台,主要用于云原生应用的构建和管理。它由阿里巴巴开发,旨在帮助开发者更好地管理微服务架构中的服务发现和配置。

主要功能:

  1. 服务发现:支持服务的注册和发现,使微服务能够轻松找到彼此,支持多种服务注册模式

  2. 动态配置管理:提供实时的配置管理,可以动态地推送配置变化到客户端,支持多环境管理。

  3. 服务管理:包括服务的健康检查、服务的元数据管理等,帮助维护服务的稳定性。

  4. 高可用性:支持集群模式,能够应对高并发的请求,并且具备容错机制。

二、Nacos 安装

Ubuntu 系统下

1. 下载 nacos 压缩包 https://github.com/alibaba/nacos/releases

2. 上传压缩包到某个目录下,使用 unzip 命令(apt-get install unzip)解压

3. 解压后的目录结构如下

bin: Nacos启停脚本

startup.cmd:windows平台的启动脚本

startup.sh:Linux平台的启动脚本

shutdown.cmd: windows平台的停止脚本

shutdown.sh: Linux平台的停止脚本

conf: Nacos配置文件

target: 存放 Nacos 应用的 jar 包 

4. 启动:进入nacos/bin目录,输入命令  bash startup.sh -m standalone

standalone 指定为单机模式下启动

5. 启动成功后访问 Nacos :http://IP:port/nacos,port 默认为 8848

三、nacos 入门

1. 服务注册,服务发现

在父工程中引入 Spring Cloud Alibaba 依赖

<dependency>
 <groupId>com.alibaba.cloud</groupId>
 <artifactId>spring-cloud-alibaba-dependencies</artifactId>
 <version>2022.0.0.0-RC2</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/

在对应子工程中引入Nacos依赖和 Load Balance依赖

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

<dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>

nacos配置

 2. 负载均衡

Nacos 支持多种负载均衡策略,包括权重,同机房,同地域,同环境等

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

权重配置:可以配置某个节点的流量权重,然后开启 nacos 负载均衡策略,由于 Spring Cloud LoadBalance 组件自身有负载均衡配置方式,所以不支持 Nacos 的权重属性配置,所有需要开启Nacos 的负载均衡策略,让权重配置生效。

spring:
  cloud:
    loadbalancer:
      nacos:
        enabled: true

3. 同集群优先访问

需配置上述负载均衡策略

Nacos把同一个机房内的实例,划分为一个集群,所以同集群优先访问,在一定程度上也可以理解为同机房优先访问;

微服务访问时,应尽量访问同机房的实例,当本机房内实例不可用时,才访问其他机房的实例,通常情况下,因为同一个机房的机器属于一个局域网,局域网访问速度更快一点.

为实例配置集群名称

spring:
  cloud:
    nacos:
      discovery:
        server-addr: IP地址 + 端口号 # 127.0.0.1:XXXX
        cluster-name: BJ   # 集群名称

4. 健康检测

客户端主动上报机制

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

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

服务器反向探测机制

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

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

nacos 服务实例类型 

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

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

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

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

配置⼀个服务实例为永久实例 

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

设置服务实例类型,重新启动Nacos可能会报错

原因:Nacos 会记录每个服务实例的 IP 和端口号,当发现 IP 和端口都没有发生变化时,Nacos 不允许该服务实例类型发生变化,比如从临时实例变为非临时实例,或从非临时实例变成临时实例

解决办法
停掉 nacos 删除 nacos 目录下 /data/protocol/raft 信息,里面会保存应用实例的元数据信息,再次重启 nacos

5. 配置中心

除了注册中心和负载均衡之外,Nacos还是一个配置中心,具备配置管理的功能。
Namespace 的常用场景之一是不同环境的配置区分隔离,例如开发环境,测试环境和生产环境的配置隔离

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

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

在微服务运行之前,Nacos要求必须使用 bootstrap.properties(或.yaml) 配置文件来配置 Nacos Server 地址

${prefix}-${spring.profiles.active}.${file-extension}  //dataId 的完整格式

prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置
spring.profiles.active 即为当前环境对应的 profile,当 spring.profiles.active为空时,对应的连接符-也将不存在,datald的拼接格式变成${prefix}.${file-extension},file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型,默认为 properties

微服务启动时,会从 Nacos 读取多个 dataId 配置项并监听(当存在多个dataId 时,(以上述dataId 为例)优先级 为 dataId=oj-manage-dev.yaml > dataId=oj-manage.yaml > dataId=oj-manage)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rcnhtin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值