精品 技术分享,知识的组装工
目录
- 前言
- 灰度配置
- 共享配置场景
- 测试
- 加载顺序
- 总结
前言
前几篇介绍了Nacos的配置中心的特性,今天介绍一下Nacos的高级特性,也是比较实用的特性,共享配置和灰度配置。
灰度配置
灰度配置指的是指定部分客户端IP进行新配置的下发,其余客户端配置保持不变,用以验证新配置对客户端的影响,保证配置的平稳发布。灰度配置是生产环境中一个比较重要的功能,对于保证生产环境的稳定性非常重要。在1.1.0中,Nacos 支持了以IP为粒度的灰度配置,具体使用步骤如下:
2、勾选“Beta发布”,在文本框里填入要下发配置的IP,多个IP用逗号分隔
3、 修改配置内容,点击“发布Beta”按钮,即可完成灰度配置的发布
A、“停止Beta”表示取消停止灰度发布,当前灰度发布配置的IP列表和配置内容都会删除,页面回到正常发布的样式。
B、“发布”表示将灰度配置在所有客户端生效,之前的配置也会被覆盖,同时页面回到正常发布的样式。
共享配置场景
一个系统中微服务数量增加后,配置文件相应增加,多个配置文件中会存在相同的配置,那么我们可以将相同的配置独立出来,作为该系统中各个服务的共享配置文件,每个服务都可以通过Nacos进行共享配置的读取。
我们已经知道Spring应用对Nacos中配置内容的对应关系是通过三个参数控制的:
1、
spring.cloud.nacos.config.prefix
2、
spring.cloud.nacos.config.file-extension
3、
spring.cloud.nacos.config.group
默认情况下,会加载DataID=${spring.application.name}.properties,Group=DEFAULT_GROUP的配置。
假设现在有这样的一个需求:现在有两个微服务,都涉及到库存的预警值这项配置,希望能够做到统一的配置管理。所以,我们希望可以将预警值放在独立的配置文件stock.yml文件中,要达到这种效果,可以采取以下两步:
第一步:在Nacos中创建Data ID=stock.yml,Group=DEFAULT_GROUP配置内容
第二步:在两个微服务应用中通过使用
spring.cloud.nacos.config.ext-config参数来配置要加载的配置内容,比如:
共享配置可以看到,
spring.cloud.nacos.config.ext-config配置是一个数组List类型。
每个配置中包含三个参数:data-id、group,refresh;data_id,group与Nacos中创建的配置相互对应,refresh参数控制这个配置文件中的内容时候支持自动刷新。
Nacos还提供了另外一个便捷的配置方式,比如下面的设置与上面使用的配置内容是等价的:
spring.cloud.nacos.config.shared-dataids=stock.yml spring.cloud.nacos.config.refreshable-dataids=stock.yml
配置加载的优先级
spring.cloud.nacos.config.shared-dataids参数用来配置多个共享配置的Data Id,多个的时候用用逗号分隔
spring.cloud.nacos.config.refreshable-dataids参数用来定义哪些共享配置的Data Id在配置变化时,应用中可以动态刷新,多个Data Id之间用逗号隔开。如果没有明确配置,默认情况下所有共享配置都不支持动态刷新。
测试
相应的业务代码没有什么变化,利用@Value注解获取配置值
通过请求消费端的/goods/stock和/goods/12(这个会调用生产端应用)都可以获取库存预警值
加载顺序
当我们加载多个配置的时候,如果存在相同的key时,我们需要深入了解配置加载的优先级关系。
在使用Nacos配置的时候,主要有以下三类配置:
A: 通过
spring.cloud.nacos.config.shared-dataids定义的共享配置
B: 通过
spring.cloud.nacos.config.ext-config[n]定义的加载配置
C: 通过内部规则(
spring.cloud.nacos.config.prefix、
spring.cloud.nacos.config.file-extension、
spring.cloud.nacos.config.group这几个参数)拼接出来的配置
加载的配置原则是会覆盖之前加载的配置,根据启动日志,我们观察可以看出优先级关系是:A < B < C
总结
Nacos共享配置的两种实现方式,两种方式针对不同的场景:
1、shared-dataids方式:适合于共享配置文件与项目默认配置文件处于相同Group时
2、ext-config方式:它可以由开发者自定义要读取的共享配置文件的DataId、Group、refresh属性,这样刚好解决了shared-dataids存在的局限性。
Nacos灰度发布现在只支持IP,将来也许会增加别的灰度方式。今天就介绍到这里,谢谢!!!
—End—
最近老顾上传了微服务 关的分享课程,请大家多多支持
推荐阅读
1、基于RocketMq的SpringCloud Stream框架实战入门
2、如何搭建消息中间件应用框架之SpringCloud Stream
3、面试必备: 关异常了怎么办?如何做全局异常处理?
4、Gateway 关系列(二):SpringCloud Gateway入门实战,路由规则
5、Gateway 关系列开篇:SpringCloud的官方 关Gateway介绍
6、API 关在微服务架构中的应用,这一篇就够了
7、学习Lambda表达式看这篇就够了,不会让你失望的哦(续篇)
8、Lambda用在哪里?几种场景?
9、为什么会出现Lambda表达式,你知道吗?
10、不说“分布式事务”理论,直接上大厂阿里的解决方案,绝对实用
11、女程序员问到这个问题,让我思考了半天,Mysql的“三高”架构
12、大厂二面:CAP原则为什么只能满足其中两项?而不能同时满足
13、阿里P7二面:聊聊零拷贝的原理
14、秒杀系统的核心点都在这里,快来取
15、你了解如何利用token方式实现分布式Session吗?
16、Mysql索引结构演变,为什么最终会是那个结构呢?让你一看就懂
17、一场比赛涉及到的知识,用通俗易通的方式介绍并发协调
18、企业实战Redis全方面思考,你思考了吗?
19、面试题:Thread的start和run的区别
20、面试题:什么是CAS?CAS的作用以及缺点
21、如何访问redis中的海量数据?避免事故产生
22、如何解决Redis热点问题?以及如何发现热点?
23、如何设计API接口,实现统一格式返回?
24、你真的知道在生产环境下如何部署tomcat吗?
25、分享一线互联 大厂分布式唯一ID设计 之 snowflake方案
26、分享大厂分布式唯一ID设计方案,快来围观
27、你想了解一线大厂的分布式唯一ID生成方案吗?
28、你知道如何处理大数据量吗?(数据拆分篇)
29、如何永不迁移数据和避免热点? 根据服务器指标分配数据量(揭秘篇)
30、你知道怎么分库分表吗?如何做到永不迁移数据和避免热点吗?
31、你了解大型 站的页面静态化吗?
32、你知道如何更新缓存吗?如何保证缓存和数据库双写一致性?
33、你知道怎么解决DB读写分离,导致数据不一致问题吗?
34、DB读写分离情况下,如何解决缓存和数据库不一致性问题?
35、你真的知道怎么使用缓存吗?
36、如何利用锁,防止缓存击穿?重构思想的重要性
37、海量订单产生的业务高峰期,如何避免消息的重复消费?
38、你知道如何保障生产端100%消息投递成功吗?
39、微服务下的分布式session该如何管理?
40、阿里二面:filter、interceptor、aspect应如何选择?很多人中招
41、互联 架构重要组员CDN,很多高级开发都没有实操过,来看这里
42、阿里二面:CDN缓存控制原理,看看能不能难住你
43、SpringCloud Alibaba之Nacos多环境多项目管理
44、SpringCloud Alibaba系列之Nacos配置中心玩法
45、SpringCloud Alibaba之Nacos注册中心
46、SpringCloud Plus版本之SpringCloud Alibaba
47、SpringCloud Alibaba之Nacos集群、持久化
声明:本站部分文章内容及图片转载于互联 、内容不代表本站观点,如有内容涉及侵权,请您立即联系本站处理,非常感谢!