nacos基本知识

  • 基本概念
  • 四大关键特性
  • 架构图及概念
  • 数据模型
  • 作用与好处
  • 快速接入nacos相关配置


基本概念

英文全称Dynamic Naming and Configuration Service,Na为naming/nameServer即注册中心,co为configuration即配置中心,service是指该注册/配置中心都是以服务为核心作者。Nacos 是阿里巴巴推出来的一个新开源项目,是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

四大关键特性

  1. 动态配置服务: 动态配置服务让您能够以中心化、外部化和动态化的方式管理所有环境的配置。动态配置消除了配置变更时重新部署应用和服务的需要。配置中心化管理让实现无状态服务更简单,也让按需弹性扩展服务更容易。
  2. 动态服务发现: 对以服务为中心的(例如微服务和云原生)应用架构方式非常关键。Nacos支持DNS-Based和RPC-Based(Dubbo、gRPC)模式的服务发现。Nacos也提供实时健康检查,以防止将请求发往不健康的主机或服务实例。借助Nacos,您可以更容易地为您的服务实现断路器。
  3. 动态DNS服务: 通过支持权重路由,动态DNS服务能让您轻松实现中间层负载均衡、更灵活的路由策略、流量控制以及简单数据中心内网的简单DNS解析服务。动态DNS服务还能让您更容易地实现以DNS协议为基础的服务发现,以消除耦合到厂商私有服务发现API上的风险。
  4. 服务及其元数据管理: Nacos能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的SLA以及最首要的metrics 统计数据。

架构图及概念

LoopMergeStrategy 动态配置 动态配置英文_分布式


服务 (Service)

服务是指一个或一组软件功能(例如特定信息的检索或一组操作的执行),其目的是不同的客户端可以为不同的目的重用(例如通过跨进程的网络调用)。Nacos 支持主流的服务生态,如 Kubernetes Service、gRPC|Dubbo RPC Service 或者 Spring Cloud RESTful Service。

服务注册中心 (Service Registry)

服务注册中心,它是服务,其实例及元数据的数据库。服务实例在启动时注册到服务注册表,并在关闭时注销。服务和路由器的客户端查询服务注册表以查找服务的可用实例。服务注册中心可能会调用服务实例的健康检查 API 来验证它是否能够处理请求。

服务元数据 (Service Metadata)

服务元数据是指包括服务端点(endpoints)、服务标签、服务版本号、服务实例权重、路由规则、安全策略等描述服务的数据。

服务提供方 (Service Provider)

是指提供可复用和可调用服务的应用方。

服务消费方 (Service Consumer)

是指会发起对某个服务调用的应用方。

配置 (Configuration)

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

配置管理 (Configuration Management)

在数据中心中,系统中所有配置的编辑、存储、分发、变更管理、历史版本管理、变更审计等所有与配置相关的活动统称为配置管理。

名字服务 (Naming Service)

提供分布式系统中所有对象(Object)、实体(Entity)的“名字”到关联的元数据之间的映射管理服务,例如 ServiceName -> Endpoints Info, Distributed Lock Name -> Lock Owner/Status Info, DNS Domain Name -> IP List, 服务发现和 DNS 就是名字服务的2大场景。

配置服务 (Configuration Service)

在服务或者应用运行过程中,提供动态配置或者元数据以及配置管理的服务提供者。

数据模型

LoopMergeStrategy 动态配置 动态配置英文_spring cloud_02

Nacos 数据模型 Key 由三元组唯一确定,
Namespace:项目开发过程中肯定会有dev、test、pro等多个不同环境,namespace则是对不同环境进行隔离,默认所有配置都在public里。
group:dataId配置的分组管理,比如同在dev环境下开发,但同环境不同分支需要不同的配置数据,这时就可以用分组隔离,默认分组DEFAULT_GROUP。
dataId:是配置中心里最基础的单元,它是一种key-value结构,key通常是我们的配置文件名称,比如:application.yml、mybatis.xml,而value是整个文件下的内容。
目前支持JSON、XML、YAML等多种配置格式。

作用与好处

Nacos是微服务架构中的注册中心和配置中心,其他服务的服务信息(ip,端口等信息)可以注册到nacos服务端。nacos又为客户端提供了服务发现的功能。客户端会开启一个定时任务,定时向服务端获取最新的服务列表,加载到客户端本地缓存。客户端同时又开启一个定时心跳发送的任务,用于告知服务端,当前服务的健康状态。服务端启动的时候同样也会开启一个健康检查的定时任务,扫描服务列表,将长时间未与服务端发送心跳的服务的健康状态改为false,达到某个时间,会踢出该服务。
Nacos好处就是服务不需要记录其他服务的ip信息,通过nacos可以实时获取其他服务列表。仅仅只需从本地缓存中根据服务名找到服务列表,利用负载均衡算法从列表中拉取一个ip进行调用

快速接入nacos相关配置

配置项

key

默认值

说明(解释说明)

服务端地址

spring.cloud.nacos.config.server-addr

DataId前缀

spring.cloud.nacos.config.prefixspring.application.name

Group

spring.cloud.nacos.config.group

DEFAULT_GROUP

dataID后缀及内容文件格式

spring.cloud.nacos.config.file-extension

properties

dataId的后缀,同时也是配置内容的文件格式,目前只支持 properties

配置内容的编码方式

spring.cloud.nacos.config.encode

UTF-8

配置的编码

获取配置的超时时间

spring.cloud.nacos.config.timeout

3000

单位为 ms

配置的命名空间

spring.cloud.nacos.config.namespace

AccessKey

spring.cloud.nacos.config.access-key

SecretKey

spring.cloud.nacos.config.secret-key

相对路径

spring.cloud.nacos.config.context-path

接入点

spring.cloud.nacos.config.endpoint

UTF-8

地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址

dataId

{spring.profiles.active}.${file-extension}

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

下一篇讲过配置中心解析