前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >聊聊Nacos配置隔离和分类的使用

聊聊Nacos配置隔离和分类的使用

作者头像
猿天地
发布2019-11-28 14:53:30
1.7K0
发布2019-11-28 14:53:30
举报
文章被收录于专栏:猿天地猿天地
今天的主题还是Nacos

正所谓一入江湖身不由己

至今还在探索中

如今到底如何

最近在使用Nacos来作为配置中心和注册中心,在使用的过程难免会有些问题。有的是框架问题,有的是使用方式的问题,不久前也分享了一篇《最近使用Nacos的一些问题》,感兴趣的可以看看。

今天要聊的话题也是在使用过程中发现的,主要是前期赶进度太忙了,停下来之后才有时间去整理,去思考更优的方式。

- 1 - 环境隔离

环境隔离是最基本的一个需求,在日常开发过程中,常需要不同的环境,比如开发,测试,预发,线上环境。

在Nacos中有命名空间的概念,通过空间来支持多环境隔离,也就是一个环境对应一个命名空间

我们可以创建如下图所示的多个空间来进行隔离:

如果需要物理隔离,就要部署多套Nacos环境,我们目前就是部署的多套,部署多套的主要原因就是目前还没有完善的权限控制,生产环境的配置直接暴露给所有人是很危险的事情,据说在下个版本中会增加权限相关的功能。

还有一种使用场景就是租户隔离,从多个租户(用户)的角度来看,每个租户(用户)可能会有自己的 namespace,每个租户(用户)的配置数据以及注册的服务数据都会归属到自己的 namespace 下,以此来实现多租户间的数据隔离。例如超级管理员分配了三个租户,分别为张三、李四和王五。分配好了之后,各租户用自己的账户名和密码登录后,创建自己的命名空间。如下图所示:

但此功能还在规划中,后面才会支持。目前我们在使用上也在往这个方面靠拢,不同环境目前是通过多套部署来进行隔离,那么namespace我们就得用在其他地方才能体现它的价值和意义。

可以根据内部产品线来划分namespace,每个namespace下再细分配置文件,这样存在的一个问题是如果我多个产品线之前有共用的配置信息,也就是共享配置,目前看下来,只能每边都存放一份。

namespace已经隔离了,如果要跨namespace进行配置的共享,不知道后面有没有计划支持这样的功能。

Nacos的namespace设计也就是为了区分多环境或者多租户,这样来看跨namespace就属于特殊需求了,所以我们在做配置规划的需要需要考虑进去,有共同配置需要共享的,得放入相同的namespace中。

- 2 - 配置分类

一般在最开始使用的时候,也不会考虑太多,直接为每个项目建一个对应的application配置,所有的配置都放在里面。配置量少还可以,配置量大的时候不建议这么做,我们需要有具体的分类才能让配置更加的一目了然。

除了这个问题,还有就是像一些需要共用的配置,没有独立出来,每个项目的application中都存在一份相同的,万一哪天需要修改了,你会发现改了一个地方还不行,很多地方都得改,苦啊。。。

下面说下我是怎么分类的,每个人都有自己的想法,并没有什么标准,仅供参考:

Group

Group是用来分组的,默认是DEFAULT_GROUP,我这边分了三个组,如下:

  • MIDDLEWARE_GROUP

中间件配置,比如Redis, Mq等。

  • APPLICATION_GROUP

应用配置,比如jackson,SpringBoot Actuator等。

  • BIZ_GROUP

业务配置,跟业务相关,比如订单超时未支付的时间,全局的邮费等。

DataId

DataId是配置的ID,也就是唯一标识。

通常以服务名称来命名,示列:

  • xxx-order-biz (BIZ_GROUP)
  • xxx-order-application (APPLICATION_GROUP)

中间件的配置就以中间件名称来命名,示列:

  • xxx-redis (MIDDLEWARE_GROUP)
  • xxx-rocketmq (MIDDLEWARE_GROUP)
  • xxx-elasticsearch (MIDDLEWARE_GROUP)

有了细致的分类后,我们需要哪个配置就引入哪个DataId即可,不用全部引入,修改也不用每个配置文件都去修改,使用如下:

代码语言:javascript
复制
@NacosPropertySource(dataId = NacosConstant.REDIS, groupId = NacosConstant.MIDDLEWARE_GROUP, autoRefreshed = true)
@NacosPropertySource(dataId = NacosConstant.ORDER_BIZ, groupId = NacosConstant.BIZ_GROUP, autoRefreshed = true)
@NacosPropertySource(dataId = NacosConstant.ORDER_APPLICATION, groupId = NacosConstant.APPLICATION_GROUP, autoRefreshed = true)
代码语言:javascript
复制

-

3

-

配置使用

最常用的我们是通过@NacosValue注解来读取对应的配置内容,比较尴尬的是经常忘记将@NacosValue中的autoRefreshed设置为true,然后就会发现配置修改了没实时生效,得重启才行。

我建议还是不要到处使用@NacosValue注解来读取配置,可以将配置统一管理起来,比如使用@NacosConfigurationProperties就很方便。

代码语言:javascript
复制
@Data
@Configuration
@NacosConfigurationProperties(dataId = NacosConstant.ORDER_BIZ, groupId = NacosConstant.BIZ_GROUP, autoRefreshed = true)
public class OrderBizConfig {
    private BigDecimal postage;
}
代码语言:javascript
复制

像业务配置也有多种类型,每种类型就可以使用一个@NacosConfigurationProperties来管理,计算不用@NacosConfigurationProperties也可以创建一个单独的配置类,在这个类中使用@NacosValue,使用方就直接注入这个配置类,万一哪天配置的key要修改或者要去掉这个配置也非常方便。

代码语言:javascript
复制
@Data
@Configuration
public class OrderBizConfig {
    @NacosValue(value = "${postage}", autoRefreshed = true)
    private BigDecimal postage;
}
代码语言:javascript
复制
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 猿天地 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • - 1 - 环境隔离
  • - 2 - 配置分类
    • Group
      • DataId
      相关产品与服务
      对象存储
      对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档