跳至主要內容

Nacos

荒流2021年11月28日大约 6 分钟约 1903 字

1. Nacos 简介

Nacos 是阿里巴巴的产品,现在是 SpringCloud 中的一个组件,相比 Eureka 功能更加丰富与强大,集服务注册/发现、配置管理于一身,在国内受欢迎程度较高。

Nacos 的关键特性包括(详见 什么是 Nacos):

Nacos 地图与生态图

Nacos 地图:

img

Nacos 生态图:

img

安装

类似于 zookeeper,nacos 运行也需要下载安装一个 server 端,系统中的微服务仅作为 client 端,nacos 安装的部分参考 官网 吧。

2. 服务注册

image-20211128211348606image-20211128211407488

3. Nacos 服务分级存储模型

image-20211128212006476image-20211128212122650

设置实例的集群属性:

image-20211128212328655

4. Nacos 负载均衡

4.1 根据集群负载均衡

  1. 修改 order-service 中 application.yml,设置集群为 HZ:

    spring:
      cloud:
        nacos:
          server-addr: localhost:8848 # nacos 服务端位置
          discovery:
            cluster-name: HZ # 配置集群名称,也就是机房位置
  2. 然后在 order-service 中设置负载均衡的 IRule 为 NacosRule,这个规则优先会寻找与自己同集群的服务:

    userservice:
      ribbon:
        NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
  3. 注意将 user-service 的权重都设置为 1

NacosRule 负载均衡策略:

4.2 根据权重负载均衡

实际部署中会出现这样的场景:服务器设置性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求。

面对这样的场景,Nacos 提供了权重配置来控制访问频率,权重越大则访问频率越高。

实际步骤示例:

  1. 在 Nacos 控制台可以设置实例的权重值,首先选中实例后面的编辑按钮

    IMG_0899
    IMG_0899
  2. 将权重设置为 0.1,测试可以发现 8081 被访问到的频率大大降低

    IMG_0899-2

5. Nacos 注册中心

环境隔离-namespace

Nacos 中服务存储和数据存储的最外层都是一个名为 namespace 的东西,用来做最外层隔离。

IMG_0901

步骤示例:

  1. 在 Nacos 控制台可以创建 namespace,用来隔离不同环境

    IMG_0902
  2. 然后填写一个新的命名空间信息

    IMG_0903
  3. 保存后会在控制台看到这个命名空间的 id:

    image-20211221232618963
  4. 修改 order-service 的 application.yml,添加 namespace:

    image-20211221232701490
  5. 重启 order-service 后,再来查看控制台: image-20211221232930869

  6. 此时访问 order-service,因为 namespace 不同,会导致找不到 userservice,控制台会报错:

    image-20211221232951661

Nacos 环境隔离:

Nacos 注册中心原理

IMG_0910

临时实例和非临时实例

服务注册到 Nacos 时,可以选择注册为临时或非临时实例:

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

临时实例宕机时,会从 nacos 的服务列表中剔除,而非临时实例则不会。

Nacos 与 Eureka

共同点:

区别:

6. Nacos 配置管理

6.1 统一配置管理

6.1.1 特点与原理

配置更改热更新:

IMG_0913

在弹出表单中填写配置信息:

IMG_0914

配置获取的步骤如下:

IMG_0916

6.1.2 步骤

  1. 引入 Nacos 的配置管理客户端依赖:

    image-20211221234335154
  2. 在 userservice 中的 resource 目录添加一个 bootstrap.yml 文件,这个文件是引导文件,优先级高于 application.yml:

    image-20211221234355526
  3. 测试:在 user-service 中将 pattern.dateformat 这个属性注入到 UserController 中做测试:

    IMG_0918

将配置交给 Nacos 管理的步骤:

6.2 配置自动刷新

Nacos 中的配置文件变更后,微服务无需重启即可感知,不过需通过以下两种配置实现:

注意事项:不宜把所有的配置都放到配置中心,维护起来比较麻烦,建议将一些关键参数,需要运行时调整的参数放到 nacos 配置中心,一般都是自定义配置。

6.3 多环境配置共享

微服务启动时会从 nacos 读取多个配置文件:

无论 profile 如何变化,[spring.application.name].yaml这个文件一定会加载,因此多环境共享配置可以写入这个文件:

IMG_0923

多种配置的优先级:

[服务名]-[环境].yaml > [服务名].yaml > 本地配置

image-20211221235605552

6.4 Nacos 集群搭建

IMG_0926

集群搭建步骤: