`
kfcman
  • 浏览: 387092 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Nacos 帮我们解决什么问题?(配置管理篇)

 
阅读更多

Nacos 是阿里巴巴今年7月份开源的项目,如其名, Naming Configuration Service ,专注于服务发现和配置管理领域。本系列文章,将从 5W1H(What、Where、When、Who、Why、How)全面剖析 Nacos,给大家安利一下 Nacos。本文作为 Nacos 系列文章的开篇,也就从 “What” 开始。我们开始关注一个开源项目的时候,通常最先冒出的 2 个问题是:

 

它是什么?

它帮我们解决什么问题?

Nacos 是什么?上面已经大概介绍了,更多详细内容可以从 官网 或 Github 了解。

 

Nacos 能帮我们解决什么问题?本文围绕其“配置管理”功能来解答。

 

配置,作为代码如影随形的小伙伴,伴随着应用的整个生命周期,我们当然对它也非常的熟悉,想想配置一般都通过哪几种形式存在?

 

硬编码

配置文件

DB 配置表

硬编码

配置项作为类字段的形式存在,如:

 

public class AppConfig {

 

    private int connectTimeoutInMills = 5000;

 

    public int getConnectTimeoutInMills() {

        return connectTimeoutInMills;

    }

 

    public void setConnectTimeoutInMills(int connectTimeoutInMills) {

        this.connectTimeoutInMills = connectTimeoutInMills;

    }

}

 

这种形式主要有三个问题:

 

如果配置是需要动态修改的话,需要当前应用去暴露管理该配置项的接口,至于是 Controller 的 API 接口,还是 JMX ,都是可以做到。

 

另外,配置变更都是发生在内存中,并没有持久化。因此,在修改配置之后重启应用,配置又会变回代码中的默认值了,这是一个坑啊,笔者就曾经掉进去过,爬了好一会才上岸。

 

最后一个问题,就是当你有多台机器的时候,要修改一个配置,每一台都得去操作一遍,运维成本可想而知,极其蛋疼。

 

配置文件

Spring 中常见的 properties、yml 文件,或其他自定义的,如,“conf”后缀等:

 

# application.properties

connectTimeoutInMills=5000

 

相比“硬编码”的形式,它解决了第二个问题,持久化了配置。但是,另外两个问题并没有解决,运维成本依旧还是很高的。

 

配置动态变更,可以是通过类似“硬编码”暴露管理接口的方式,这时,代码中会多一步持久化新配置到文件的逻辑。或者,简单粗暴点,直接登录机器上去修改配置文件,再重启应用,让配置生效。当然,你也可以在代码中增加一个定时任务,如每隔 10s 读取配置文件内容,让最新的配置能够及时在应用中生效,这样也就免去了重启应用这个“较重”的运维操作。

 

通过增加“持久化逻辑”、“定时任务”让“配置文件”的形式比“硬编码”前进了一小步。

 

DB 配置表

这里的 DB 可以是 MySQL 等的关系型数据库,也可以是 Redis 等的非关系型数据库。数据表如:

 

CREATE TABLE `config` (

  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,

  `key` varchar(50) NOT NULL DEFAULT '' COMMENT '配置项',

  `value` varchar(50) NOT NULL DEFAULT '' COMMENT '配置内容',

  `updated_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

  `created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,

  PRIMARY KEY (`id`),

  UNIQUE KEY `idx_key` (`key`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='配置信息';

 

INSERT INTO `config` (`key`, `value`, `updated_time`, `created_time`) VALUES ('connectTimeoutInMills', '5000', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);

 

它相对于前两者,更进一步,将配置从应用中抽离出来,集中管理,能较大的降低运维成本。

 

那么,它能怎么解决动态更新配置的问题呢?据我所知,有两种方式。

 

其一,如同之前一样,通过暴露管理接口去解决,当然,也一样得增加持久化的逻辑,只不过,之前是写文件,现在是将最新配置写入数据库。不过,程序中还需要有定时从数据库读取最新配置的任务,这样,才能做到只需调用其中一台机器的管理配置接口,就能把最新的配置下发到整个应用集群所有的机器上,真正达到降低运维成本的目的。

 

其二,直接修改数据库,程序中通过定时任务从数据库读取最新的配置内容。

 

“DB 配置表”的形式解决了主要的问题,但是它不够优雅,带来了一些“累赘”。

 

Nacos 配置管理

Nacos 真正将配置从应用中剥离出来,统一管理,优雅的解决了配置的动态变更、持久化、运维成本等问题。

 

应用自身既不需要去添加管理配置接口,也不需要自己去实现配置的持久化,更不需要引入“定时任务”以便降低运维成本。Nacos 提供的配置管理功能,将配置相关的所有逻辑都收拢,并且提供简单易用的 SDK,让应用的配置可以非常方便被 Nacos 管理起来。

 

如果是在 Spring 中使用 Nacos,只需三个步骤即可:

 

添加依赖

<dependency>

    <groupId>com.alibaba.nacos</groupId>

    <artifactId>nacos-spring-context</artifactId>

    <version>${latest.version}</version>

</dependency>

 

添加 @EnableNacosConfig 注解启用 Nacos Spring 的配置管理服务。以下示例中,我们使用 @NacosPropertySource 加载了 dataId 为 example 的配置源,并开启自动更新:

@Configuration

@EnableNacosConfig(globalProperties = @NacosProperties(serverAddr = "127.0.0.1:8848"))

@NacosPropertySource(dataId = "example", autoRefreshed = true)

public class NacosConfiguration {

 

}

 

通过 Spring 的 @Value 注解设置属性值。

注意:需要同时有 Setter方法才能在配置变更的时候自动更新。

 

public class AppConfig {

 

    @Value("${connectTimeoutInMills:5000}")

    private int connectTimeoutInMills;

 

    public int getConnectTimeoutInMills() {

        return connectTimeoutInMills;

    }

 

    public void setConnectTimeoutInMills(int connectTimeoutInMills) {

        this.connectTimeoutInMills = connectTimeoutInMills;

    }

}

 

以上的三个步骤,对应用本身几乎没有任何的侵入,1 个依赖 2 注解,寥寥数行,就把配置通过 Nacos 管理起来了。

 

关于配置的动态更新,对 Nacos Spring 的用户来说,在自身应用中就只是设置 “autoRefreshed” 的一个布尔值。然后在需要修改配置的时候,调用 Nacos 修改配置的接口,或使用 Nacos 的控制台去修改,配置发生变更后, Nacos 就会把最新的配置推送到该应用的所有机器上,简单而高效。

 

想想之前,为了实现此功能,写了多少冤枉代码,做了多少冤枉的运维工作。要是早一点认识 Nacos,该有多好呀!

 

总结

本文作为 Nacos 5W1H 系列文章的开篇,从“What” 讲述了 Nacos 配置管理能帮我们解决的问题:以简单、优雅、高效的方式管理配置,实现配置的动态变更,大大降低运维成本,让开发同学早点下班。

 

当然,Nacos 的配置管理,不单单只有上述的那些功能,还有诸如“灰度发布”、“版本管理”、“快速回滚”、“监听查询”、“推送轨迹”、“权限控制”、“敏感配置(如,数据库连接配置)的加密存储”等等,这些有的已经在 Nacos 中开源实现了,有的在 Nacos 配置管理的阿里云免费产品 ACM 中提供了,当然,后续也会慢慢开源到 Nacos 中,敬请期待。

 

本系列文章,会持续为大家讲述 Nacos 的点点滴滴,不单单讲述 “Nacos 能帮我们解决什么问题?”,还会深入源码分析“Nacos 是如何做到简单而强大的?”。同时,如果小伙们有兴趣的话,我们还会给大家八卦一下 Nacos 的 稗官野史,关于 Nacos 在阿里内部的历史,关于 Nacos 服务端口的寓意等等。总之,一句话:我有故事,也有美酒,君还何求?

————————————————

原文链接:https://blog.csdn.net/weixin_39860915/article/details/83242028

 

分享到:
评论

相关推荐

    nacos的开启鉴权配置与mysql配置

    Nacos 是一个开源的服务发现、配置管理和服务管理平台,通过在 application.properties 中配置 Nacos 的相关属性,可以实现将应用程序注册到 Nacos 服务器、从 Nacos 服务器获取配置信息等功能。 以下是 application...

    Nacos配置中心原理分析

    动态配置管理是Nacos的三大功能之一,通过动态配置服务,我们可以在所有环境中以集中和动态的方式管理所有应用程序或服务的配置信息。动态配置中心可以实现配置更新时无需重新部署应用程序和服务即可使相应的配置...

    Nacos2.2.2增加鉴权配置,防止NACOS身份登陆绕过漏洞

    Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组...

    SpringCloud集成Nacos实现配置管理.pdf

    为了解决这个问题,我们可以引入 Nacos 来实现配置管理。 Nacos 是一个开源的配置中心,它提供了统一的配置管理机制,帮助开发者更好地管理微服务架构中的配置文件。通过 Nacos,我们可以实现配置文件的集中管理、...

    Nacos部署精讲+服务发现、配置管理和服务管理平台

    Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组...

    nacos2.0.3+confd动态更新自定义配置文件

    nacos2.0.3+confd动态更新自定义配置文件 nacos是一款开源的配置中心,confd是一个基于模板的配置生成工具。通过将nacos和confd集成,可以实现动态更新自定义配置文件。本文将介绍如何使用nacos2.0.3和confd实现...

    nacos-server-1.3.2.tar.gz

    Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

    nacos2.2.3配置oracle源码

    nacos2.2.3配置oracle源码

    Nacos动态配置原理分析

    客户端是通过一个定时任务来检查自己监听的配置项的数据的,一旦服务端的数据发生变化时,客户端 将会获取到最新的数据,并将最新的数据保存在一个 CacheData 对象中,然后会重新计算 CacheData 的 md5 属性的值,...

    nacos配置中心配置.docx

    Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。把java项目的配置信息抽离出来

    nacos配置管理和服务发现

    Nacos 配置管理和服务发现 Nacos 是一个开源的配置管理和服务发现平台,旨在帮助开发者更好地管理微服务架构中的配置和服务发现。以下是 Nacos 的主要特性和知识点: 服务发现 * 服务发现是 Nacos 的核心功能之一...

    nacos作为配置中心.docx

    nacos作为配置中心 nacos作为配置中心 nacos作为配置中心

    nacos2.3.1改造适配postgresql配置文件

    nacos2.3.1改造适配postgresql配置文件,无需自己再去做数据库适配,导入数据库即可;

    Nacos 配置手册.pdf

    Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

    nacos配置中心初始化案例

    nacos配置中心初始化案例

    nacos-server-1.4.1(附加Nacos安装指南)

    Nacos(阿里巴巴开源项目之一)是一个用于发现、配置和管理微服务的动态服务发现框架和服务管理平台。Nacos Server 1.4.1是Nacos的一个版本,提供了许多强大的功能来帮助开发者构建和管理微服务架构。 这份资源包括...

    nacos适配oracle数据库

    1.nacos服务,适配oracle数据库11g。 2.提供nacos,oracle的创建nacos数据库脚本。 3.nacos-dm/conf/nacos-oracle-11g.sql文件。 4.nacos版本1.4.2

    nacos 2.2.3 稳定版

    nacos2.2.3,解决github下载慢问题。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 Nacos 帮助您更敏捷和容易地...

    nacos适配postgresql数据库

    1.nacos服务,适配postgresql数据库。 2.提供nacos,postgresql的创建nacos数据库脚本。 3.nacos/conf/nacos-pg.sql数据库脚本文件。 4.nacos版本1.4.2。

    Nacos-SpringCloudAlibaba组件

    Nacos 提供了一组简单易用的特性集,帮助您实现动态服务发现、服务配置管理、服务及流量管理。 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构(例如微服务...

Global site tag (gtag.js) - Google Analytics