Nacos 配置管理最佳实践

news2025/10/18 20:40:39

作者:翼严

Nacos 简介

在这里插入图片描述

Nacos 是一个更易于构建云原生应用的微服务基础平台,核心包含动态服务发现,配置管理,服务管理平台。

配置管理是 Nacos 的核心功能,它提供了运行期不重启应用的情况下动态修改配置值的功能。

Nacos 配置中心发展历程

在这里插入图片描述

Nacos 配置中心是从阿里集团内配置中心 Diamond 孵化而来,其整体发展分为三个阶段:

1.阿里集团内部孵化期

nacos 配置中心诞生于阿里巴巴集团内部的配置中心 Diamond,前期主要服务于集团内部对动态配置的需求。

2.开源&商业化探索尝试

集团 Diamond 经历了从开源再到闭源的过程,发布了商业化产品 ACM,并在 2018 年以 Nacos 配置中心为载体再次开源,期间对配置中心的开源及商业化进行了探索。

3.三位一体融合发展

明确三位一体发展战略,以开源 Nacos 为内核,插件化支持集团 Diamond &商业化 MSE 定制的配置中心,三位一体融合发展。

开源:以开源 Nacos 2.0 为内核,重构通信协议,性能扩展性提升10倍,支持 10w 级实例规模,提升开放性,联合开源微服务生态共同发展。

商业化:支持 Nacos2.0 和专业版,目前 20% 用户升级到 Nacos2.0,并且支持配置鉴权和加密能力,推送轨迹等高级功能。

集团:关注性能和高可用能力,支持大促 1 小时建站,10 分钟支持响应;完成 Diamond Over Nacos2.0 架构演进,扩展性提升 1 倍,支持 500w 实例规模。

在这里插入图片描述

应用场景&双十一实践

Nacos 配置管理应用场景

在这里插入图片描述

配置中心在业务域,基础技术域都有着广泛的应用,包括业务应用的开关,微服务生态的服务路由及元数据,高可用生态的预案,切流规则及降级开关等,前端生态的各类文案公告,数据库生态的核心配置参数,动态切库等配置。

在这里插入图片描述

在每年阿里集团的双十一大促中,配置中心也是一个不可或缺的基础组件,包括前期热点商品推送,大促氛围活动标调整,大促期间数据库主备切换开关,核心功能降级,各类名单调整,预案限流调整,各种基础中间件的核心参数动态,大促结束后各类预案的恢复,大促态到日常态的状态切换,都是配置中心所支持的场景。

配置中心使用指引

1.配置中心原理

在这里插入图片描述

  • 业务应用:nacos 的使用方,通过 nacos-client 实现配置的发布,查询,监听回调的等基础操作。

  • 负载均衡 SLB:与后端的 nacos 服务节点进行交互的地址,在用户自建或者调试的场景下,也可以采用直连 IP 或者地址服务器 endpoint 的模式。

  • Nacos Server:nacos 服务端存储当前集群全量配置的内存和磁盘缓存,集群节点之间进行水平通知配置变更事件,和后端数据库进行对账保证数据一致性。

  • Nacos 控制台:管理控制台,可以进行配置查看,配置发布,监听查询等运维功能。商业化 Nacos 支持推送轨迹,监控,事件中心等高级功能。

  • 数据库:配置持久化存储的数据库,一般是主备库架构进行容灾。

用户在接入 nacos 主要有两种模式,一种是通过原生 nacos-client 的 ConfigService 组件的基础 API 接入,第二种是通过 Spring 框架或者其他类似框架组件接入,包括 SpringCloud 和 SpringBoot 等。

2.基础 API 接入

nacos 配置中心以 NacosConfigService 接口对外提供基础 API,包括配置发布,查询,监听,回调等基础功能。

在构建 ConfigService 时需要指定 Nacos 的服务端地址,需要访问的命名空间。更多的 API 使用细节,可参照官方文档。

Properties properties = new Properties();
properties.put(PropertyKeyConst.SERVER_ADDR, "127.0.0.1");
properties.put(PropertyKeyConst.NAMESPACE, "namespaceId");

final ConfigService configService = new NacosConfigService(properties);
final String dataId = "my-config-dataId";
final String group = "group";
//初始化查询配置,并添加监听器,监听后续变更
String config = configService.getConfigAndSignListener(dataId, group, 3000L, new Listener() {
    @Override
    public Executor getExecutor() {
        //如果回调逻辑比较耗时,建议自定义线程池,以免堵塞推送回调线程
        return null;
    }
            
    @Override
    public void receiveConfigInfo(String configInfo) {
        handleBusinessLogic(configInfo);
    }
});

//初始化业务逻辑.
handleBusinessLogic(config);

3.SpringCloud 接入

新增 bootstrap.yml,配置 nacos 相关参数,包括 nacos 地址,命令空间等参数,具体可参照 com.alibaba.cloud.nacos.NacosConfigProperties 属性类。

spring:
  application:
    name: nacos-config-demo
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        namespace: namespaceid-对应nacos服务端的命名空间ID,public填空
        group: group-demo
        file-extension: yml
        refresh-enabled: true
        accessKey: xxx
        secretKey: xxx

在配置中心对应命名空间下创建 dataId=nacos-config-demo.yml,group=group-demo 的配置

在这里插入图片描述

使用 @Value 注解引用 nacos 中的参数值,当 nacos 中配置值发生变化时,value 的值会自动更新。

@Configuration
@RefreshScope
public class ConfigBean {
    
    @Value("${cache.useLocalCache:false}")
    private boolean useLocalCache;
    
    public boolean isUseLocalCache() {
        return useLocalCache;
    }
}

通过 Value 注解可以实现属性值的自动更新,如果希望在配置内容变更时触发回调方法执行。在SpringCloud也可以通过NacosConfigManager#getConfigService获取 springboot 内置的 NacosConfigService 进行基础 API 操作。

更多的接入指引可参照官方文档:

  • Spring: https://nacos.io/zh-cn/docs/quick-start-spring.html
  • Spring Boot: https://nacos.io/zh-cn/docs/quick-start-spring-boot.html
  • Spring Cloud:
    https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html

4.日志自助排查

以上介绍两种比较典型的 nacos 配置中心的接入方式,在日常使用过程中,nacos-client 本地的日志是非常有助于提高问题排查效率。

nacos 在发布配置,监听配置及变更推送时都会在 {user.home}/logs/nacos/config.log 中打印详细的事件日志。以下是客户端运行期打印的几个关键日志:

在这里插入图片描述

    • add-listener: 添加监听,只有添加了对配置的监听,才能收到配置变更推送

    • server-push:客户端已经收到某个配置的变更通知

    • data-received:收到变更通知后,客户端向服务端查询到了最新的配置内容

    • notify-listener: nacos回调了的监听器Listener,可以看到回调的配置内容MD5。

    • notify-ok: 回调执行正常,可以查看执行回调的具体监听器 Listener,执行耗时。

    • notify-error:监听器执行失败,对业务来说可能业务不符合预期,需要根据异常排查原因。

如果有 notify-listener 日志,但是没有 notify-ok 日志,则可能是监听器执行堵塞。如果想确认回调线程是否阻塞,可以通过 jstack 命令查看线程堆栈,jstack {pid} | grep -20 ‘nacos’ ,通过堆栈判断导致线程堵塞的原因,对应解决即可。

5.使用须知

在这里插入图片描述

  • 小配置

配置中心的主要作用是发布 meta-data,而不是数据的存储服务。我们对所发布的单个配置数据内容大小 100k 以内。

  • 低频变更

nacos 是个配置管理系统,不是流量链路产品,配置变更需小于 1 次/分钟。

  • 低频查询

nacos 与 redis 等缓存产品有着本质上区别,所以请不要在流量链路内查询配置,正常情况下应用启动时查询一次配置进行业务初始化,后续只需监听配置变化即可。

  • 最终一致性

nacos 只保证最后一次推送的值一定会到达,不保证中间的每一次变更都会送达订阅端。配置在发布成功后并不是实时推送到客户端,中间有一定的时延。

  • 幂等性

nacos 可能在网络状况欠佳时会向订阅者发送重复的数据通知,订阅者对数据通知的处理应满足幂等性,支持重复推送,相同配置回调多次不应产生异常预期外的情况。

  • 轻回调

在回调监听器中,处理逻辑应尽量轻量化,高耗时操作容易堵塞回调线程,影响其他配置的推送。对于重回调的场景,可以自定义业务线程池异步化处理。

错用场景:

  • 配置超过 1M,频繁变更导致配置中心数据库可用性下降

  • 配置频繁变更,导致对客户端造成推送风暴,造成客户端应用 cpu,gc 压力。

  • 客户端在流量链路中调用 getConfig 方法查询配置,业务请求上涨时,配置中心服务端压力上涨,可用性下降

  • 回调方法中处理远程 RPC,IO 操作,锁等待等造成回调方法执行堵塞,进而堵塞其他配置变更推送,影响业务

配置中心高可用

1.客户端容灾

在这里插入图片描述

容灾目录

当服务端不可用时且短时无法恢复时,用户可以在本地的容灾目录中手动更新配置内容,以达到模拟服务端配置发生变更的场景。容灾目录中的配置内容具有最高优先级,配置的查询&监听逻辑都将返回容灾配置内容,因此当远程 nacos 服务端恢复正常时,需要将容灾目录中的内容发布到远端,然后删除本地容灾目录。

容灾目录地址:

    • public 命名空间:{user.home}/nacos/config/{servername}_nacos/data/config-data
    • 非 public 命名空间:{user.home}/nacos/config/{servername}_nacos/data/config-data-tenant

本地缓存

nacos向服务端查询一次配置内容时,会将内容同步到本地磁盘,当下一次访问服务端接口失败时,会读取本地配置内容,以最大程度保证客户端可用。

缓存目录地址:

    • public 命名空间:{user.home}/nacos/config/{servername}_nacos/snapshot
    • 非 public 命名空间:{user.home}/nacos/config/{servername}_nacos/snapshot-tenant

2.服务端反脆弱

在上一章节中的使用须知里,我们分享了使用 nacos 配置中心的一些使用限制及误用场景,而当客户端错用已经发生时,服务端的反脆弱机制保证了客户端的错用不会影响服务端的可用性。

服务端的反脆弱机制包括连接限流,频繁变更限流,配置发布流量限流等机制来保证可用性。

在这里插入图片描述

商业化 MSE 优势

微服务引擎 MSE 是一个面向业界主流开源微服务框架 SpringCloud、Dubbo 以及多语言等一站式微服务平台,支持服务网格生态,标准、灵活、精准的控制流量,帮助提升系统整体的可用性,并且 MSE 在高可用、性能、安全方面大量增强,让您的应用获得企业级的保障。

在这里插入图片描述

MSE Nacos 和自建 Nacos 对比

在这里插入图片描述

迁移指引

  • 自建 Nacos 迁移 Mse Nacos详见:

  • https://help.aliyun.com/document_detail/460944.html

  • ACM 迁移 MSE Nacos详见:

  • https://help.aliyun.com/document_detail/312705.html

  • Applo 等迁移 MSE Nacos详见:

  • https://help.aliyun.com/document_detail/460717.html

Nacos 3.0

在这里插入图片描述

Nacos3.0 中,在 SDK 能力提升,界面交互升级,服务端核心能力,可观测可运维,稳定性&高可用方面都规划了诸多功能,除了基础通用的产品能力外,其中配置中心规划了社区呼声较高的模糊订阅功能,也将基于长连接的一致性协议进行升级,提升当前版本在边界异常场景下的稳定性及可靠性,欢迎对 Nacos 感兴趣的社区开发者参与其中。

点击此处查看微服务引擎产品

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/334648.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

修改Vue项目运行的IP和端口

前言 我们在使用VsCode启动Vue项目的时候,我发现:默认的端口号好像和tomcat一样,默认都是8080,如果8080被占用了,就会使用8081,8082这样的方式以此类推。 那么,我们是否可以像后端一样,通过修改…

MySQL数据库04——索引

索引基础 使用索引的主要原因之一就是提供唯一的字段值。唯一索引强制表中任意两条记录的索引值互不相同。创建唯一索引需要使用UNIQUE关键字。下面通过例题说明创建和使用惟一索引的方法。 创建和使用唯一索引 首先,在MySQL 中创建例题中将要使用的testuni表&…

独立图片服务器有什么突出之处

服务器是网络中非常重要的设施,承载着不同流量的访问,这就要求服务器具有快速的吞吐量、高稳定性和高可靠性。独立图片服务器作为独立服务器的衍生品,在数据利用方面的应用可以为企业在数据处理和分析方面带来一场革命。本文就将介绍独立图片…

windows 重启redis的方法

目录打开本地的文件夹选中文件的路径输入cmd在cmd命令窗口中输入以下的指令指令的内容以及对应的命令含义前言:最近在本地搭建redis环境,突然发现本地的redis启动失败了,使用reids的启动命令也不行,于是找了不少的方法&#xff0c…

windows下Spark环境搭建

一、下载 我的是hadoop3.0.0,下载Hadoop3.0:下载链接 自己选择一个盘,我这里是 D:\software 1、配置Hadoop_HOME环境变量 新建系统变量 2、在Path环境变量,添加 %HADOOP_HOME%\bin3、修改配置文件:在hadoop-3.0.0\etc\hadoop…

原创 | arXiv上成功发表的预印本有什么特征?这样写,你的论文也能中!

作者:林嘉亮审校:陈之炎本文约4400字,建议阅读8分钟本文介绍了专注于科学和工程领域的印刷本平台——arXiv的特征。“预印本(preprint)是一份完整的科学论文手稿(通常也会同时提交给需要同行评审的期刊&…

Linux centos系统安装argoverse-api问题解决

1、遇到带有sklearn关键字的报错 将setup.py中的sklearn改为scikit-learn 2、遇到CMake 3.1 or higher is required. You are running version 2.8.12.2....... 在python包管理器发现版本正常 于是使用centos命令手动安装 1、移除老版本cmake版本并安装依赖包 yum remove c…

[Unity 打包WebGL用本地服务器Tomcat测试]

打包WebGLUnity-WebGL-环境部署、打包1、 步骤流程图:不要忘记把场景加上去发布时不要勾选Development Build,勾选后文件非常大,然后点击上图左下角的 Player Settings设置一下分辨率、做一个 UI 自适应。strip engine code:官方文…

从降本增效到电机控制知识树

回顾永磁同步电机控制应用场景,电机控制算法的发展大体归结于四个字,降本增效。以下内容围绕这四个字,增效、降本两个方面梳理该领域相关知识,串联永磁同步电机控制技术体系。 1、 增效 增效即提高控制性能,具体落脚…

[Nginx]Ngnix基础

文章目录一、基础1.1 what can nginx do1.1.1 基本HTTP服务1.1.2 高级HTTP服务1.1.3 Nginx常用的功能模块1.1.4 Nginx的核心组成1.2 why nginx?1.3 安装(略)1.4 nginx的目录结构1.5 nginx.conf的几个关键配置keepalive_timeoutkeepalive_requestsserver块和locatio…

Python自动化测试实战篇(4)selenium+unttest+ddt实现自动化用例测试,模拟用户登陆点击交互测试,Assert捕获断言多种断言

这些是之前的文章,里面有一些基础的知识点在前面由于前面已经有写过,所以这一篇就不再详细对之前的内容进行描述 Python自动化测试实战篇(1)读取xlsx中账户密码,unittest框架实现通过requests接口post登录网站请求&…

详讲常见的字符函数

👦个人主页:Weraphael ✍🏻作者简介:目前是C语言学习者 ✈️专栏:C语言航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&a…

最近大火的chatGPT是什么?它是怎样聊天的?

ChatGPT是一款革命性的聊天机器人软件, ChatGPT( ChatGPT AI,聊天机器人欢迎您!)的核心功能是自动回复,可以根据客户的输入自动生成回复,从而提高客户服务的效率。还可以根据客户的输入自动生成…

四种幂等性解决方案

什么是幂等性? 幂等是一个数学与计算机学概念,在数学中某一元运算为幂等时,其作用在任一元素两次后会和其作用一次的结果相同。 在计算机中编程中,一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。 幂等…

C++学习记录——유 类和对象(3)

文章目录1、赋值运算符重载1、运算符重载1、理解2、运算符重载实例2、赋值运算符重载2、日期类的实现1、加减函数1、加函数2、减函数2、前/后置--重载3.两个日期相减其他1、流插入2、流提取日期类的整体实现代码: https://gitee.com/kongqizyd/start-some-c-codes-for-learning…

WebDAV之葫芦儿·派盘+KMPlayer

KMPlayer 支持WebDAV方式连接葫芦儿派盘。 KMPlayer几乎可以播放您系统上所有的影音文件,支持几乎全部音视频格式。通过其强大的插件功能,可以支持层出不穷的新格式。软件还具有齐全的操控功能,支持捕获音频、捕获AVI、捕获画面、外挂字幕、自定义编辑设置,是视频爱好者的不…

吞噬互联网:边缘计算和新商业网络的兴起

五年前,Gartner博客的一篇文章写道:“边缘将吞噬云。”表达的大概意思是,当大家都在特别关注云端时,Gartner看到了另一个方向——边缘,更能满足大家对低延迟和近乎实时处理的需求。如果快进五年,到2028 年&…

【Spark分布式内存计算框架——Spark Core】4. RDD函数(下) 重分区函数、聚合函数

重分区函数 如何对RDD中分区数目进行调整(增加分区或减少分区),在RDD函数中主要有如下三个函数。 1)、增加分区函数 函数名称:repartition,此函数使用的谨慎,会产生Shuffle。 2)、…

回归预测 | MATLAB实现PSO-LSSVM粒子群算法优化最小二乘支持向量机多输入单输出

回归预测 | MATLAB实现PSO-LSSVM粒子群算法优化最小二乘支持向量机多输入单输出 目录回归预测 | MATLAB实现PSO-LSSVM粒子群算法优化最小二乘支持向量机多输入单输出预测效果基本介绍模型描述程序设计参考资料预测效果 基本介绍 MATLAB实现PSO_LSSVM粒子群算法优化最小二乘支持…

车道线检测-LaneATT 论文学习笔记

论文:《Keep your Eyes on the Lane: Real-time Attention-guided Lane Detection》 地址:https://arxiv.org/abs/2010.12035v2 代码:https://github.com/lucastabelini/LaneATT 整体结构 车道线的表示方式 Lane{(xi,yi)}i0Npts−1,yii⋅Hima…