[question] Nacos 兼容性说明

  1. https://nacos.io/zh-cn/docs/2.0.0-compatibility.html

Nacos2.0的服务端完全兼容1.X客户端。
Nacos2.0客户端由于使用了gRPC,无法兼容Nacos1.X服务端,请勿使用2.0以上版本客户端连接Nacos1.X服务端。

1. Nacos 是什么?

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

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

2. Nacos 关键特性

2.1. 服务发现和服务健康监测

Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用 原生SDKOpenAPI、或一个独立的Agent TODO注册 Service 后,服务消费者可以使用DNS TODOHTTP&API查找和发现服务。

Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。Nacos 支持传输层 (PING 或 TCP)和应用层 (如 HTTP、MySQL、用户自定义)的健康检查。 对于复杂的云环境和网络拓扑环境中(如 VPC、边缘网络等)服务的健康检查,Nacos 提供了 agent 上报模式和服务端主动检测2种健康检查模式。Nacos 还提供了统一的健康检查仪表盘,帮助您根据健康状态管理服务的可用性及流量。

2.2. 动态配置服务

动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。
动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。

配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。
Nacos 提供了一个简洁易用的UI (控制台样例 Demo) 帮助您管理所有的服务和应用的配置。

Nacos 还提供包括配置版本跟踪、金丝雀发布、一键回滚配置以及客户端配置更新状态跟踪在内的一系列开箱即用的配置管理特性,帮助您更安全地在生产环境中管理配置变更和降低配置变更带来的风险。

2.3. 动态 DNS 服务

动态 DNS 服务支持权重路由,让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。

动态DNS服务还能让您更容易地实现以 DNS 协议为基础的服务发现,以帮助您消除耦合到厂商私有服务发现 API 上的风险。

Nacos 提供了一些简单的 DNS APIs TODO 帮助您管理服务的关联域名和可用的 IP:PORT 列表

2.4. 服务及其元数据管理

Nacos 能让您从微服务平台建设的视角,管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。

3. Nacos 相关概念

  1. https://nacos.io/zh-cn/docs/concepts.html

4. 启动 Nacos 服务


Linux/Unix/Mac Windows
启动 Nacos 服务器 sh startup.sh -m standalone
(standalone代表着单机模式运行,非集群模式)
startup.cmd -m standalone
(standalone代表着单机模式运行,非集群模式)
关闭 Nacos 服务器 sh shutdown.sh shutdown.cmd
或者双击shutdown.cmd运行文件。

5. Nacos 注册中心

5.1. Nacos 服务分级存储模型

等级划分 名称 范例
一级 服务 例如 用户服务、订单服务
二级 集群 例如 杭州或上海机房
三级 实例 例如杭州机房的某台部署了服务的服务器

image.png

5.2. 设置实例的集群属性

  1. spring:
  2. cloud:
  3. nacos:
  4. discovery:
  5. cluster-name: 集群名称 # 设置实例的集群属性

设置了实例的集群属性之后,就可以让微服务的消费者按照负载均衡策略消费提供者实现高可用。

5.3. NacosRule 负载均衡策略

  1. 优先选择同集群服务实例列表
  2. 本地集群找不到提供者,才去其他集群寻找,并且会报警告。
  3. 确定了可用实例列表后,在采用随机负载均衡挑选实例。
    1. 服务提供者的服务名称:
    2. ribbon:
    3. NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 设置 NacosRule 负载均衡策略

    5.4. 根据权重负载均衡

    Nacos 提供了权重配置来控制访问频率, 权重越大则访问频率越高。

权重值说明:

  1. 权重值在 0~1 之间
  2. 权重值等于 0 则完全不会被访问

5.5. 环境隔离

Nacos 中服务存储和数据存储的最外层都是一个名为 namespace 的东西,用来做最外层的隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。

image.png

将服务注册到默认(public)命名空间之外的命名空间,需要在配置文件中配置自定义命名空间 ID(唯一),且不同命名空间的实例不可相互访问。

  1. spring:
  2. cloud:
  3. nacos:
  4. discovery:
  5. namespace: 命名空间唯一 ID

5.6. 临时实例

  1. spring:
  2. cloud:
  3. nacos:
  4. discovery:
  5. ephemeral: false # true:临时实例(默认) false:非临时实例

相关文档:

6. Nacos 配置管理

6.1. 为什么要用 Nacos 配置管理

在系统开发过程中通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。目的是让静态的系统工件或者交付物(如 WAR,JAR 包等)更好地和实际的物理运行环境进行适配。配置管理一般包含在系统部署的过程中,由系统管理员或者运维人员完成这个步骤。配置变更是调整系统运行时的行为的有效手段之一。

6.2. 控制台关于配置的属性

DaraID 配置文件名,一般取名格式:服务名称-运行环境.yaml 范例:userservice-dev.yaml
Group 分组
描述

注意:配置文件成功创建后仅可更改配置内容。

6.3. 快速入门 Nacos 配置管理

  1. 引入 Nacos 的配置管理客户端依赖
  2. 在服务中添加一个bootstrap.yml文件,这是引导文件,优先级高于 Application.yml

    1. spring:
    2. application:
    3. name: nacosdemo # 服务名称
    4. profiles:
    5. active: dev # 开发环境
    6. cloud:
    7. nacos:
    8. server-addr: 127.0.0.1:8848 # nacos 服务地址
    9. config:
    10. file-extension: yaml # 文件后缀名
  3. 在配置类中使用注解@ConfigruationProperties,成员变量名需要和配置文件的 key 一致。