首页 > 其他分享 >Nacos 配置中心

Nacos 配置中心

时间:2022-11-08 18:40:32浏览次数:43  
标签:中心 轮询 配置 Nacos nacos cloud 服务端 客户端

动态配置管理是 Nacos 的三大功能之一,通过动态配置服务,我们可以在所有环境中以集中和动态的方式管理所有应用程序或服务的配置信息。

动态配置中心可以实现配置更新时无需重新部署应用程序和服务即可使相应的配置信息生效,这极大了增加了系统的运维能力。


配置中心的架构

配置中心本身并不复杂,前提是你先将 ​​CAP​​​ 的取舍问题晾在一边的话。配置中心最基础的功能就是存储一个键值对,用户发布一个配置(​​configKey​​​),然后客户端获取这个配置项(​​configValue​​);进阶的功能就是当某个配置项发生变更时,将变更告知客户端刷新旧值。

下方的架构图,简要描述了一个配置中心的大致架构,用户可以通过管理平台发布配置,通过 ​​HTTP​​​ 调用将配置注册到服务端,服务端将之保存在 ​​MySQL​​​ 等持久化存储引擎中;用户通过客户端 ​​SDK​​​ 访问服务端的配置,同时建立 ​​HTTP​​ 的长轮询监听配置项变更,同时为了减轻服务端压力和保证容灾特性,配置项拉取到客户端之后会保存一份快照在本地文件中,SDK 优先读取文件里的内容。

这里省略了许多细节问题,例如配置分层设计,权限校验,客户端长轮询的间隔设置,服务端每次查询都需要访问 ​​MySQL​​ 么,配置变更是主动推送还是等定时轮询触发等,还有就是运维高可用方面的工作(私以为这个是配置中心的精华),例如节点跨地域部署,网络分区时配置如何保证可写可推送变更等。真正实现一个高质量的配置中心,还是需要长时间打磨的。

Nacos 配置中心_配置项


使用

使用非常简单

try {
// 传递配置
String serverAddr = "{serverAddr}";
String dataId = "{dataId}";
String group = "{group}";
Properties properties = new Properties();
properties.put("serverAddr", serverAddr);


// 新建 configService
ConfigService configService = NacosFactory.createConfigService(properties);
String content = configService.getConfig(dataId, group, 5000);
System.out.println(content);


// 注册监听器
configService.addListener(dataId, group, new Listener() {
@Override
public void receiveConfigInfo(String configInfo) {
System.out.println("recieve1:" + configInfo);
}
@Override
public Executor getExecutor() {
return null;
}
});
} catch (NacosException e) {
// TODO
-generated catch block
e.printStackTrace();
}

​serverAddr​​​ 传递的是配置中心服务端的地址列表,被内部名为 ​​ServerListManager​​​ 的类解析成地址列表进行管理,进行 ​​HTTP​​​ 调用时会从中选择存活的机器拼接成 ​​URL​​​ 完成调用,一旦在调用时该地址抛异常,则客户端会有一些处理措施,例如转换下次选择的节点等。值得注意的是,通常在实践中不会采取这种硬编码的方式,可以将其配置在 ​​Zookeeper​​ 或者注册发现中心上,在启动时动态拉取。

Nacos 客户端解析

获取配置的主要方法是 ​​NacosConfigService​​​ 类的 ​​getConfigInner​​​ 方法,通常情况下该方法直接从本地文件中取得配置的值,如果本地文件不存在或者内容为空,则再通过 ​​HTTP GET​​ 方法从远端拉取配置,并保存到本地快照中。

Nacos 配置中心_spring_02

当通过 ​​HTTP​​​ 获取远端配置时,​​Nacos​​ 提供了两种熔断策略,一是超时时间,二是最大重试次数,默认重试三次。

配置长轮询

​ClientWorker​​​ 通过其下的两个线程池完成配置长轮询的工作,一个是单线程的 ​​executor​​​,每隔 ​​10ms​​​ 按照每 ​​3000​​​ 个配置项为一批次捞取待轮询的 ​​cacheData​​​ 实例,将其包装成为一个 ​​LongPollingTask​​​ 提交进入第二个线程池 ​​executorService​​ 处理。

该长轮询任务内部主要分为四步:

  1. 检查本地配置,忽略本地快照不存在的配置项,检查是否存在需要回调监听器的配置项
  2. 如果本地没有配置项的,从服务端拿,返回配置内容发生变更的键值列表
  3. 每个键值再到服务端获取最新配置,更新本地快照,补全之前缺失的配置
  4. 检查 ​​MD5​​ 标签是否一致,不一致需要回调监听器

Nacos 配置中心_服务端_03

值得注意的是:nacos config的配置必须配置在bootstrap.properties文件中,不然无法加载 

spring.profiles.active=prod
spring.application.name=order-service
spring.cloud.nacos.discovery.server-addr=localhost:8848
spring.cloud.nacos.config.server-addr=localhost:8848
#谁在越后面有优先级越高
spring.cloud.nacos.config.shared-configs[0]=common1.properties
spring.cloud.nacos.config.shared-configs[1]=common2.properties

引入配置

<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

nacos上配置如下:

Nacos 配置中心_配置项_04

与apollo对比

界面

在界面上对2个对比,个人感觉2者都差不多,nacos可能看起来比较简洁,直接把所有项目和配置都直接展示出来了,但是apollo再项目划分概念上就比较清晰,进入后首先需要选择项目,选择项目后跳转才可以看到里面的配置,在配置上与nacos不同,apollo将每个配置项都分开解析出来了,每个配置项都有单独的发布和未发布的提示,个人感觉比nacos会更加清晰,更加适合生产项目的配置和公共项上的配置。

功能

功能上对nacos以及apollo进行了对比,配置中心所需要的基本功能2者都有,总体说apoolo的功能会更加全面一些。


关注公众号 soft张三丰 

Nacos 配置中心_配置项_05

标签:中心,轮询,配置,Nacos,nacos,cloud,服务端,客户端
From: https://blog.51cto.com/u_15501087/5834148

相关文章

  • 配置sshd_使用CA签名证书登录_更新sshd服务端的通讯密钥
    配置sshd_使用CA签名证书登录_更新sshd服务端的通讯密钥转载注明来源:本文链接来自osnosn的博客,写于2022-11-06.用CA签名证书登录请参考【SSH证书登录教程】,这个......
  • xampp配置多域名泛域名虚拟主机For linux xampp wampp 多域名设置只有第一个生效的
     安装XAMPP下载xampp最新版FORLINUX#wget​​http://nchc.dl.sourceforge.net/sourceforge/xampp/xampp-linux-1.7.1.tar.gz​​安装:tarxvfzxampp-linux-1.7.1.tar.g......
  • Nginx SSL 双向认证,key 生成和配置
    一、安装Nginx和OpenSSLyuminstallnginxopenssl-y二、SSL服务器/客户端双向验证证书的生成创建一个新的CA根证书,在nginx安装目录下新建ca文件夹,进入ca,创......
  • 修改Outlook中IMAP配置邮箱数据文件保存位置
    Outlook中邮件的iMap数据文件通常默认为C盘某个文件夹,由于邮件会越来越多,所以要将数据文件的保存位置换到其他盘中。工具/原料Outlook软件(2010,2013,2016)方法/步骤在“......
  • 安科瑞能耗管理系统解决方案在数据中心上的应用
    安科瑞陈盼1、概述  随着碳达峰、碳中和成为政府工作主要任务,数据中心作为能耗密集,用能情况较为复杂的大型建筑,有效的降低能源消耗,减少能源成本,避免用能过程中的“跑冒滴......
  • deepin配置系统设置
    在控制中心可以配置系统设置,最常用的就是代理。这个配置是由gsettings来管理的。循环列出所给的schema的key和valuegsettingslist-recursivelycom.deepin.wrap.gnome.s......
  • Nginx的概述与配置
    一、Nginx概述1、Nginx的特点一款高性能、轻量级web服务•稳定性高•系统资源消耗低高•对HTTP并发连接的处理能力单台物理服务器可支持30000~50000个并发请求2......
  • Spring cloud Alibaba+Spring Boot+nacos
    SpringCloudAlibaba引用版本<dependencyManagement><dependencies><dependency><groupId>com.alibaba.cloud</groupId>......
  • kubernetes安装单机版并配置Dashboard
    一kubernetes安装1.主机配置虚拟机配置2GB/2CPU修改主机名hostnamectlset-hostnamek8s-masterhosts解析cat>>/etc/hosts<<EOF192.168.160.141k8s-maste......
  • AccessLog日志配置
    server.tomcat.accesslog.prefix=accessserver.tomcat.accesslog.suffix=.logserver.tomcat.accesslog.file-date-format=-yyyyMMddHH 有的时候我们要使用日志......