专栏首页捉虫大师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注册中心进行分析介绍。


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

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 配置中心Nacos

    Nacos 是阿里巴巴2018年7月份开源的项目,如其名, Naming Configuration Service ,专注于服务发现和配置管理领域。

    1850810
  • Nacos配置中心原理

    这是Nacos给客户端提供的API,可以通过该API:增、删、盖、查配置信息,还可以通过该API给配置添加Listener

    spilledyear
  • 你应该了解的Nacos配置中心

    上回我们说到Nacos的注册中心,我们讲了注册中心的一致性协议,订阅和注册的原理,有兴趣的可以看一下上一篇文章:你应该了解的Nacos注册中心。在Nacos中还...

    用户5397975
  • SpringBoot使用Nacos配置中心

    Nacos是阿里巴巴集团开源的一个易于使用的平台,专为动态服务发现,配置和服务管理而设计。它可以帮助您轻松构建云本机应用程序和微服务平台。

    lyb-geek
  • 微服务配置中心-Nacos

    目前是github的一个明星项目,高达6k+的star。有大量组织在现网使用Nacos,详见官方issue:https://github.com/alibaba...

    皮皮熊
  • nacos做服务配置中心

    在TestController上加个@RefreshScope注解,然后我们去nacos客户端手动修改config.info的信息,然后重新调用这个/test接...

    Java旅途
  • Nacos 配置中心的调研

    进一步减少不必要的重复工作,最近打算在把之前的项目重构成 SpringBoot 项目之后,源于 N 台机器配置的管理甚是麻烦,所以便有了进一步将项目的配置进行统...

    haifeiWu
  • 基于nacos+ConfigParser实现Python近原生的云配置管理

    其实本文是一篇水文,使用一个小的方法快速实现了所谓Python近原生的云配置管理,不会太高深。

    皮皮熊
  • 微服务网关:Nacos 源码实践

    微服务架构:网关概念与 zuul微服务网关:Spring Cloud Gateway —— Zuul

    程序员架构进阶
  • 【nacos系列】nacos配置中心管理实战

    学习nacos注册中心之前,表示本地环境或者服务器上已经搭建完成nacos服务; 今天趁空余时间总结一下nacos注册中心实战相关的东西; 中文官方文档:h...

    沁溪源
  • Apollo 配置中心详解

    Apollo 配置中心产生背景 大多情况下程序随着功能的复杂,程序的配置也会增多:包括各种功能的开关、参数的配置、服务器的地址配置等等,同时开发人员对程序配置的...

    CSDN技术头条
  • Dubbo使用Nacos实现注册中心

    目标:Dubbo使用Nacos实现注册中心 工具:IDEA--2020.1、Nacos 学习目标:学习如何使用Nacos作为Dubbo服务的注册中心 本次学习的...

    背雷管的小青年
  • Nacos注册中心之概要设计

    注册中心的核心比配置中心多一个服务探活模块,他俩的相似度非常高,甚至阿里内部的注册中心就叫ConfigServer。

    龟仙老人
  • Nacos搭建流程 顶

    要使用nacos,我们首先得下载它的服务端,下载地址https://github.com/alibaba/nacos/releases

    算法之名
  • 【Nacos配置管理】一文带你搞懂Nacos配置管理模块

    石臻臻的杂货铺[同名公众号]
  • springboot使用nacos做配置中心

    分布式配置中心有多个,包括Apollo、Disconf等等,已经有大神做了各种对比,技术没有好坏,选择适合自己的最好,我们选择nacos是结合了它的服务发现和服...

    小尘哥
  • spring cloud 使用nacos配置中心

    路过君
  • Nacos 配置中心源码分析

    本文主要和大家一起以源码的角度来分析 Nacos 配置中心的配置信息获取,以及配置信息动态同步的过程和原理。环境介绍和使用 环境介绍:

    没有故事的陈师傅
  • 微服务网关方案:Kong & Nacos

    前面我们介绍了 Spring Cloud 体系下的网关 Gateway(Zuul)。事实上,还有很多开源且广泛应用的网关方案,例如 Kong 和 Nacos。本...

    程序员架构进阶

扫码关注云+社区

领取腾讯云代金券