nacos配置中心模块详解

nacos手动初始化实现 手动初始化nacos链接示例 阅读详情

本文已收录 https://github.com/lkxiaolou/lkxiaolou 欢迎star。

配置中心

业务上的配置,功能开关,服务治理上对弱依赖的降级,甚至数据库的密码等,都可能用到动态配置中心。

在没有专门的配置中心组件时,我们使用硬编码、或配置文件、或数据库、缓存等方式来解决问题。

硬编码修改配置时需要重新编译打包,配置文件需要重启应用,数据库受限于性能,缓存丧失了及时性。

可能都不完美,但能从中总结出配置中心的需求,相对来说还是比较明确:

  • 能够存储、获取并监听配置(必须)
  • 配置变更时能及时推送给监听者(必须)
  • 有一个可视化的查看变更配置的控制台(必须)
  • 配置变更可灰度执行(加分)
  • 配置变更可回滚(加分)

目前使用最多的配置中心可能是携程开源的Apollo,还有Spring Cloud Config、阿里开源的Nacos、百度的Disconf等。

Nacos配置中心

NacosNaming and Configuration Service的缩写,从名字上能看出它重点关注的两个领域是Naming即注册中心和Configuration配置中心。

本文讲解nacos的配置中心的架构设计和实现原理,基于2.0.0版本(注:2.0.0版本与1.x版本区别较大)

Nacos调试环境搭建

  • 先从github上clone代码(网速比较慢,加上–depth=1参数)
git clone --depth=1 https://github.com/alibaba/nacos.git
  • 导入IDE,看代码,调试更方便
  • 启动Server端:运行console模块下的Nacos.main(),这个类扫描的路径最广,能启动所有的模块
    • JVM参数可带上-Dnacos.standalone=true -Dnacos.functionMode=config,指定单机模式,且只启动config模块

    • --spring.config.additional-location=nacos/distribution/conf,程序参数指定配置文件目录

    • 正常启动,console打印出Ncos控制台地址,进入Nacos控制台,输入用户名密码(默认均为nacos)即可登录

  • 使用client进行测试,example模块下有configExample可进行config的测试,为了不动源代码,可copy一份configExample进行修改测试

Nacos配置模型

namespace + group + dataId 唯一确定一个配置

  • namespace:与client绑定,一个clinet对应到一个namespace,可用来隔离环境或区分租户
  • group:分组,区分业务
  • dataId:配置的id

客户端启动流程

  • 参数准备时,如果配置了nacos服务端地址,则直接使用;如果配置了endpoint,则从endpoint中获取nacos服务端地址,这样有个好处是服务端地址变更,扩缩容都无需重启client,更详细可参考https://nacos.io/en-us/blog/namespace-endpoint-best-practices.html
  • 在客户端第一次与服务端交互时创建GRPC连接,随机挑选一台server建立连接,后续都使用该连接,请求失败都会有重试,针对请求级别也有限流;重试失败或者服务端主动断开连接,则会重新挑选一台server进行建链

请求模型

从gRPC的proto文件能看出请求与返回的定义比较统一

message Metadata {
  string type = 3;
  string clientIp = 8;
  map<string, string> headers = 7;
}

message Payload {
  Metadata metadata = 2;
  google.protobuf.Any body = 3;
}

service Request {
  // Sends a commonRequest
  rpc request (Payload) returns (Payload) {
  }
}
  • type是请求/返回类的类名
  • clientIp是客户端ip
  • headers是携带的header信息
  • Playload中的body以json格式编码

com.alibaba.nacos.api.config.ConfigService中可以找到所有配置中心能使用的接口

重点关注这几个接口:

  • getConfig:读取配置
  • publishConfig:发布配置
  • publishConfigCas:原子的发布配置,若有被其他线程变更则发布失败,类似java中的CAS
  • removeConfig:删除配置
  • addListener:监听配置
  • removeListener:移除配置的监听

变更推送

采取推拉结合的方式,既保证时效性,又保证数据一致性

数据存储

Nacos配置中心的数据存储支持内嵌的derby数据库,也支持外部数据库mysql,内嵌数据库主要是为了单机测试时使用。

其中上文提及的publishConfigCas的实现是利用了数据库update ${table} set ${xx}=${zz} where md5=${old_md5}来实现,如果已经这条数据被变更,则这次publish会失败。

灰度和回滚

当勾选灰度发布时可填写灰度的ip进行推送,不在灰度列表内的ip则不会接受到变更推送,并且灰度和正式是区分开的。


灰度的实现是记录下了每次的发布,回滚到指定版本即可。

结语

本文从背景出发,结合Nacos配置中心的各个重要模块进行了一一解释,能够从整体上对Nacos的配置中心有一个把握。期望后续能对Nacos注册中心进行分析介绍。


搜索关注微信公众号"捉虫大师",后端技术分享,架构设计、性能优化、源码阅读、问题排查、踩坑实践。

【深入理解SpringCloud微服务】深入理解nacos配置中心(四)——配置新增或修改源码分析 dump配置内容到磁盘文件是通过DumpService进行的,DumpService先把新增或修改的配置dump到磁盘文件,然后根据文件内容算出一个MD5值,再拿到算出的MD5值与缓存中该配置文件对应的MD5值进行比较,如果两MD5值不一致,说明修改后的配置内容与修改前不一致,也就是发生了配置变更,需要更新MD5值并通知客户端。ConfigCacheService的dump方法在服务端启动的时候也会调用,这个我们在上一篇文章《服务端启动与获取配置源码分析》已经分析过,这里就不再分析了。 阅读详情

相关推荐

十四、Nacos源码系列:Nacos配置发布原理

一般情况下,我们是通过Nacos提供的web控制台登录,然后通过界面新增配置信息。后续客户端只要配置了对应的NameSpace,group,dataId就可以在客户端获取到对应的配置信息。既然这样,服务端肯定会存储我们在web控制台配置的配置信息。web控制台发布配置的入口肯定也是一个controller接口:com.alibaba.nacos.config.server.controller.ConfigController#publishConfig。// 内容加密} else {

weixiaohuai的博客 2272

nacos配置发布流程代码示例

注意:spring-cloud-starter-alibaba-nacos-config 是 Spring Cloud Alibaba 的依赖,它包含了 Nacos 客户端的依赖。如果不是使用 Spring Cloud Alibaba,可以直接添加 Nacos 客户端的依赖。在 Nacos 中发布配置通常不需要直接编写代码,而是通过 Nacos 的管理界面或者使用 Nacos 提供的客户端 SDK 来完成。不过,如果想要通过编程的方式来发布配置,可以使用 Nacos 的客户端 SDK。

DKPT的博客 723

保姆级教程:用SpringBoot 2.7+Nacos 2.0搭建多模块配置中心(含bootstrap依赖陷阱)

本文详细解析了在SpringBoot 2.7多模块项目中集成Nacos 2.0配置中心时遇到的典型陷阱。核心问题在于Spring Boot 2.4+版本默认禁用bootstrap上下文,导致配置不生效。文章提供了从项目结构搭建、依赖管理到问题排查的完整解决方案,重点剖析了`spring-cloud-starter-bootstrap`依赖在多模块项目中的传递缺失问题,并给出了两种修复方案。

weixin_29269441的博客 390

配置中心 -- Nacos 客户端配置获取及监听实现原理

这篇博客我们通过示例来了解学习一下 Nacos 的客户端获取配置以及服务端发送配置的相关流程。 服务端创建配置 在 Nacos 的管理页面我们可以创建如下配置信息 1、在默认命名空间下新建配置 2、编辑配置并发布 客户端获取配置 1、客户端主动获取配置 (1)客户端创建 ConfigService 服务根据 dataId 和 group 来获取配置信息 示例:根据data...

井底之蛙 2万+

SpringCloud Alibaba —— Nacos 配置中心

文章目录基础配置新建一个模块POMYMLbootstrap.ymlapplication.yml主启动类业务类在 Nacos 中添加配置信息Nacos 中的匹配规则测试自带刷新功能     前面使用 SpringCloud Config 实现配置中心 的时候是比较麻烦的,各种配置和依赖很复杂的     SpringCloud Alibaba 退出的 Nacos 除了可以实现注册中心以外,还可以实现配置中心,而且实现非常简单,下面就用 Nacos 实现配置中心 基础配置 新建一个模块 目录结构如下: PO

Woo_home的博客 4758

微服务配置中心高级:ballcat与Nacos配置加密完整指南

在微服务架构中,配置中心是保障系统安全与灵活部署的核心组件。ballcat作为企业级快速开发脚手架,提供了与Nacos配置中心的无缝集成方案,尤其在敏感配置加密方面展现出强大能力。本文将详细介绍如何利用ballcat的fieldcrypt模块实现Nacos配置的全链路加密保护,让你的微服务配置安全等级提升一个台阶。 ## 为什么需要配置加密? 微服务架构下,应用配置往往包含数据库密码、API密

gitblog_00312的博客 332

Nacos Spring与Spring Boot集成:构建现代化微服务配置中心的最佳实践

Nacos Spring项目是Nacos生态系统中针对Spring框架的重要组件,它为Spring Boot应用提供了便捷的配置管理和服务发现能力。通过Nacos Spring,开发者可以轻松实现配置的动态更新、服务注册与发现等核心微服务功能,构建高效、可靠的现代化微服务架构。 ## 一、Nacos Spring核心功能解析 ### 1.1 动态配置管理 Nacos Spring提供了强大的动

gitblog_00201的博客 870

告别混乱配置:用Nacos配置中心统一管理Spring Boot 3多模块项目(附完整代码)

本文详细介绍了如何使用Nacos配置中心统一管理Spring Boot 3多模块项目的配置,解决微服务架构中的配置管理痛点。通过版本选择、环境搭建、多模块配置管理实战及高级技巧,帮助开发者实现配置的优雅管理,提升项目维护效率。附完整代码示例,助力快速落地。

weixin_30363981的博客 420

告别混乱配置:用Nacos配置中心统一管理你的Spring Boot 3多模块项目

本文详细介绍了如何使用Nacos配置中心统一管理Spring Boot 3多模块项目的配置,解决微服务架构中配置分散的痛点。通过版本兼容性检查、项目骨架搭建、配置分层策略设计及实战案例,展示了如何实现公共配置集中管理、模块专属配置隔离和动态更新,提升开发效率和维护便捷性。

weixin_33716154的博客 442

Nacos配置中心

配置中心就是对这些配置项进行统一管理.通过配置中心,可以集中查看,修改和删除配置,无需再逐个修改配置文件,提高效率的同时,也降低了出错的风险 本文从多个方面对Nacos配置中心进行了介绍以及简单的操作示例,让初学者更好地能够对Nacos配置中心熟悉和掌握

2202_75555590的博客 1949

Nacos配置中心用法详细介绍

配置中心区别于传统的配置信息分散到系统各个角落的方式,对系统中的配置文件进行集中统一管理,而不需要逐一对单个的服务器进行管理。通过配置中心,可以使得配置标准化、格式统一化;当配置信息发生变动时,修改实时生效,无需要重新重启服务器,就能够自动感知相应的变化,并将新的变化统一发送到相应程序上,快速响应变化;通过审计功能还可以追溯问题

张维鹏的博客 9万+

Nacos配置中心

Nacos作为一个功能强大的服务发现和配置管理平台,不仅提供了注册中心和负载均衡的功能,还充当了配置中心的角色。

风止的博客 3676

Alibaba Nacos配置中心初体验

官方文档:https://nacos.io/en-us/docs/use-nacos-with-kubernetes.html 安装部署 依赖 64bit OS: Linux/Unix/Mac/Windows supported, Linux/Unix/Mac recommended. 64bit JDK 1.8+: downloads, JAVA_HOME settings. Maven 3.2.x+: downloads, settings. 下载软件包 下载地址 https...

cql252283126的博客 1423

Nacos2.x 配置中心

Nacos2.x 配置中心

Oven_的博客 2453

Alibaba微服务组件Nacos配置中心

01 Nacos配置中心实战 引入依赖 <!--nacos配置中心--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </depende..

soulweee的博客 1286

nacos配置发布和服务订阅

nacos总结

weixin_41987908的博客 2848

读取Nacos配置中心配置信息并修改上传或删除

读取Nacos配置中心配置信息并修改上传或删除读取Nacos功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 如何通过接口获取Nacos配置中心的配置信息?如何通过接口对Nacos配置中心的配置信息进行修改呢?如何通过接口上传到Na

qq_45116294的博客 8377

Nacos源码之配置管理 七】增删改配置数据之后如何通知集群中的其他机器

在后台管理界面可以直接增删改查所有的配置数据,那么问题来了增删改数据这个操作,除了落库,还做了哪些操作?新增配置数据打开后台新建一个配置如果是新增先访问Http请求Con...

Python专栏 2030
上一篇: 给dubbo贡献源码,做梦都在修bug
下一篇: dubbo 2.7应用级服务发现踩坑小记
捉虫大师
博客等级 码龄15年 59粉丝 152原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值