nacos配置空间(nacos作为配置中心)
nacos配置文件多少kB
你问的是下载nacos配置文件需要多少kb吗?如下。
最新版的nacos下载的话需要75.4MB,也就是差不多75400KB。
Nacos 是阿里巴巴今年7月份开源的项目,如其名, Naming Configuration Service ,专注于服务发现和配置管理领域。
Nacos-参数配置
Nacos中的参数有很多,如:命名空间、分组名、服务名、保护阀值、服务路由类型、临时实例等,那这些参数都是什么意思?又该如何设置?
在Nacos中通过命名空间(Namespace)+分组(Group)+服务名(Name)可以定位到一个唯一的服务实例。
命名空间(Namespace):Nacos服务中最顶层、也是包含范围最广的概念,用于强制隔离类似环境或者租户等场景。Nacos的服务也需要使用命名空间来进行隔离。 命名空间在Nacos控制台的一级目录里可以找到,如下所示:
在服务列表中也能看到命名空间的身影,如下所示:
命名空间默认为public,在项目开发中,如果不指定命名空间,那么会使用默认值public。 官方推荐使用运行环境来定义命名空间 ,如生产版本可使用public,开发版可定义为private。在项目开发中,可通过配置"spring.cloud.nacos.discovery.namespace"老定义命名空间,如下所示:
命名空间在使用前,必须先在控制台新建命名空间 ,如下所示:
如果在控制台没有新建命名空间,直接在项目中使用的话,是不能将服务成功注册到Nacos中的,如下在项目中配置一个未新建的dev命名空间,如下所示:
然后启动项目,会发现,在Nacos控制台的服务列表中一直刷新不到任何服务实例
分组名(Group):Nacos中次于命名空间的一种隔离概念,区别于命名空间的强制隔离属性,分组属于一个弱隔离概念,主要用于逻辑区分一些服务使用场景或不同应用的同名服务,用常用的情况主要是同一个服务的测试分组和生产分组、或者将应用名作为分组以防止不同应用提供的服务重名。 分组名在Nacos控制台的服务列表中可以看到,如下所示:
分组名默认为DEFAULT_GROUP,在项目中可通过"spring.cloud.nacos.discovery.group"来设置,如下所示:
此项可省略,省略时的默认值为DEFAULT_GROUP。 分组名可以直接在项目中使用 ,无需像命名空间那样,在使用前还要在控制台中新建,设定了分组名之后,刷新服务列表就可以看到新的分组名称了,如下所示:
服务名(Name):该服务实际的名字,一般用于描述该服务提供了某种功能或能力。 通常推荐使用由运行环境作为命名空间、应用名作为分组,服务功能作为服务名的组合来确保该服务的天然唯一性,当然使用者可以忽略命名空间和分组,仅使用服务名作为服务唯一标识,这就需要使用者在定义服务名的额外增加自己的规则来确保在使用中能够唯一定位到该服务而不会发现到错误的服务上。服务名在项目中可以通过"spring.application.name"来指定,如下所示:
健康保护阈值(ProtectThresHold):为了防止因过多实例故障,导致所有流量全部流入剩余实例,继而造成流量压力将剩余实例被压垮形成雪崩效应。应将健康保护阈值定义为一个0到1之间的浮点数。当域名健康实例数占总服务实例数的比例小于该值时,无论实例是否健康,都会将这个实例返回给客户端。这样做虽然损失一部分流量,但是保证了集群中剩余健康实例能正常工作。 简单来说,保护阈值是一个0-1浮点数,保护阈值是允许群里中健康实例占比的最小值,如果实际健康实例的占比小于或等于设置的保护阈值时,就会触发阈值保护,如下所示,设置保护阈值为0.75:
停掉唯一的健康实例,集群的健康实例占比降成了0%,小于设置的保护阈值0.75,此时就会触发阈值保护,如下所示:
服务路由类型的设置如下所示:
它是用来设置服务的路由策略的,默认值为none。如果 设置为label(标签)模式,需要设置响应的标签表达式来匹配实例选择器(Selector),通过实例选择器可以完成自定义负载均衡策略, 比如我们可以自定义实例选择器,实现就近访问的负载均衡策略,这样消费者在调用时,会优先调用离自己比较近的IP节点,从而实现更高效的服务调用。
权重(Weight):实例的级别配置。权重为浮点数,范围为0-10000。权重越大,分配给该实例的流量越大。 它是针对服务实例进行设置的,如下所示:
在Nacos中服务实例有二种类型:持久化实例和临时实例(也叫非持久化实例)。 在控制台中"临时实例"为true时,表示此服务为临时实例,如下所示:
临时实例和持久化实例的区别主要有一下两点:
在项目开发中,可以通过设置
“spring.cloud.nacos.discovery.ephemeral”来指定服务的实例类型,默认为临时实例,也就是默认“spring.cloud.nacos.discovery.ephemeral=true”。如果要设置持久化实例,需要设置“spring.cloud.nacos.discovery.ephemeral”设置为 false,如下图所示:
服务的实例类型一旦确定之后,整个生命周期内不允许被修改,如果试图修改实例类型会提示如下错误:
【Nacos专题】Nacos Config
【专题回顾】
【Nacos专题】Nacos 快速入门
【Nacos专题】Nacos 集群搭建
Nacos 既可以作为注册中线,提供服务注册与发现;又是配置中心,提供配置的动态管理。Nacos 既能支持 properties 类型的配置,也能支持 ymal 类型的配置。
为了满足 多租户、多环境、多服务 配置隔离的需求,Nacos 提供了 Data Id 、 Group 以及 Namespace 不同管理级别的概念,利用 Nacos 定义的层级关系,用户可以非常方便的管理多环境的配置。
Data Id 的完成格式如下:
完整的 Data Id 由 3 部分构成,具体格式说明如下:
示例:
如果 Data Id 的值为 nacos-config-dev.properties ,则在 bootstrap.properties 配置如下:
如下图所示,用 Data Id 来区分开发、测试、生产环境配置:
在分布式系统中,我们经常会根据业务来对系统进行水平拆分,业务独立的模块单独构成一个系统,从而实现业务解耦。Nacos 的 Group 能够很好的应对分布式系统的配置管理。 Group 是 Data Id 的集合,按照业务系统来定义 Group ,然后再在每个 Group 下按照 dev 、 test 、 prod 来区分环境,这样整个系统配置就非常的清晰明了。
在 Nacos 服务端定义完分组后,还需要在项目中通过 spring.cloud.nacos.config.group 配置来指定分组, 这样在项目启动的时候,就能拉取指定分组下的配置。
如下图所示,为订单系统创建分组:
Namespace 是用于在多租户之间进行配置隔离,不同的 命名空间 下,可以存在相同的 Group 和 Data Id ,再配合 Nacos 的权限管理功能,针对用户角色(多组合),进行 Namespace 级别的读写权限控制。
Nacos 默认命名空间为 public ,当在新建一个 Namespace 时,Nacos会生成一个唯一标识UUID,在项目中通过 spring.cloud.nacos.config.namespace 来指定命名空间。
什么是Nacos?Nacos注册配置中心介绍
英文全称Dynamic Naming and Configuration Service,Na为naming/nameServer即注册中心,co为configuration即注册中心,service是指该注册/配置中心都是以服务为核心。服务在nacos是一等公民
Nacos注册中心分为server与client,server采用Java编写,为client提供注册发现服务与配置服务。而client可以用多语言实现,client与微服务嵌套在一起,nacos提供sdk和openApi,如果没有sdk也可以根据openApi手动写服务注册与发现和配置拉取的逻辑
Nacos服务领域模型主要分为命名空间、集群、服务。在下图的分级存储模型可以看到,在服务级别,保存了健康检查开关、元数据、路由机制、保护阈值等设置,而集群保存了健康检查模式、元数据、同步机制等数据,实例保存了该实例的ip、端口、权重、健康检查状态、下线状态、元数据、响应时间。这些数据的作用会在第三章讲到
服务注册方法:以Java nacos client v1.0.1 为例子,服务注册的策略的是每5秒向nacos server发送一次心跳,心跳带上了服务名,服务ip,服务端口等信息。同时 nacos server也会向client 主动发起健康检查,支持tcp/http检查。如果15秒内无心跳且健康检查失败则认为实例不健康,如果30秒内健康检查失败则剔除实例。
不同的命名空间逻辑上是隔离的,不特殊设置的情况下,服务不会跨命名空间请求,命名空间主要的作用是区分服务使用的范围,比如开发、测试、生产、灰度可以分别设置四个命名空间来互相隔离。
以springcloud为例,首先用maven导入nacos clinet的依赖:
先导入springcloud的alibaba-nacos-config和alibaba-nacos-discovery两个依赖,这两个依赖是用于nacos clinet与cloud结合的工具,0.2.x对应springboot 2.x.x ,0.1.x对应springboot 1.x.x。这两个组件可以和各种版本的nacos-client结合。把其中的nacos-clinet依赖给排除,引入想要引入的nacosclinet版本,如下:
在bootstrap.properties上添加配置中心的配置
在application-xxx.properties新增如下配置
如果springboot启动类没有 @EnableDiscover 注解则加上
完成如上更改,即可使用Nacos注册/配置服务
演示:
使用Feign、Ribbon均可,在这不做过多介绍
普通application参数在配置中心直接配置皆可,如果需要可以动态刷新的配置,需要在相应类上加上 @RefreshScope 注解,示例如下,当在nacos配置中心更改配置后,方法getId的值也会刷新。
配置中心参数修改/设置
如下两张图:在nacos控制台的 配置管理-配置列表 中顶部选择相应的命名空间,点击列表右上角的加号新增配置,Data ID 为 项目名-{spring.profiles.active}.properties,Group如果在bootstrap.properties中不指定则填默认的DEFAULT_GROUP,描述写该配置的描述,配置内容填写Properties格式或者Yaml格式。
在控制台的 服务管理-服务列表 选择一个服务点击详情,在下方的集群列表可以看到有上线/下线按钮,点击即可以对该实例执行上线/下线操作,下线后的实例不会被请求
可以通过手动配置权重来控制流量,当一个集群内两个实例,权重越高,到达该实例的请求比例越多。
权重的初始值是1
保护阈值的范围是0~1
服务的健康比例=服务的健康实例/总实例个数
当服务健康比例=保护阈值时候,无论实例健不健康都会返回给调用方
当服务健康比例保护阈值的时候,只会返回健康实例给调用方
在 服务管理-服务列表 选择一个服务点击详情可以配置
nacos+gateway服务的配置
1、pom文件中引入的依赖
gateway包:网关服务的主要依赖
alibaba-nacos-discovery包:nacos的发现注册功能组件,在子服务启动类添加注解@EnableDiscoveryClient,就可以把服务注册到nacos中。
alibaba-nacos-config包:nacos的配置功能组件,添加后服务可以动态的从nacos中读取配置。
2、配置文件
配置组件的数据应该配在bootstrap.yml文件,而不是application.yml当中。因为两者的加载时机不同,bootstrap在程序引导阶段读取,而application在加载配置阶段读取。因为配置文件需要在加载配置阶段之前获取,所以bootstrap中写入引用配置的nacos地址,命名空间,还有dataId的参数。
在application中配入路由的断言规则,和注册发现的nacos服务地址。
3、跨域配置。
创建过滤器CorsWebFilter,并添加@Bean注解,让服务启动时创建此类。