`
kfcman
  • 浏览: 399519 次
  • 性别: 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_server.7z

    Nacos 是一个由阿里巴巴开源的,...总的来说,Nacos是一个强大的工具,能够有效地解决微服务架构中的服务发现和配置管理问题。无论是Windows还是Linux环境,都能轻松部署和使用,是现代企业级应用不可或缺的一部分。

    Sentinel整合Nacos实现动态规则配置持久化,代码修改

    Nacos作为一款分布式服务管理平台,能够很好地解决这个问题。本篇将详细介绍如何整合Sentinel和Nacos,实现动态规则配置的持久化,以及如何对sentinel-dashboard源码进行修改。 首先,我们要了解Sentinel和Nacos的...

    nacos-1.4.1.rar

    在本篇中,我们将深入探讨Nacos的核心特性和使用方法,以及在实际项目中的应用。 一、Nacos简介 Nacos 是构建以“服务”为中心的现代应用架构的关键组件,其主要功能包括服务注册与发现、动态配置管理、健康检查、...

    nacos-server-1.3(windows-linux).zip

    Nacos(Naming and Configuration Administration)是阿里巴巴开源的一款分布式服务治理框架,主要功能包括服务发现、配置管理、健康检查等。这个“nacos-server-1.3(windows-linux).zip”压缩包包含了Nacos 1.3.0...

    16Spring Cloud Alibaba:Nacos 作为注册中心和配置中心使用1

    ### Spring Cloud Alibaba:Nacos 作为注册中心和配置中心...无论是服务发现、健康监测还是动态配置管理,Nacos都提供了一整套完整的解决方案。对于正在构建分布式系统的企业而言,掌握Nacos的使用方法是十分必要的。

    spring-cloud-alibaba+dubbo+nacos内部服务调用

    2. **配置管理**:通过Nacos,我们可以实现服务的动态配置,当配置发生变更时,所有订阅了该配置的服务都会实时接收到更新,简化了配置管理流程。 3. **服务调用**:Dubbo提供了多种调用方式,如RPC、HTTP等。结合...

    Nacos源码下载与安装.docx

    为了解决这个问题,需要在启动参数中加入`-Dnacos.standalone=true`,以指示Nacos以单机模式运行。在IDE的运行配置中,添加此参数到VM选项: ``` -Dnacos.standalone=true ``` 重新启动Nacos后,服务应当能成功...

    SpringBoot+Dubbo+Nacos实现远程服务调用

    Nacos是阿里巴巴推出的又一款开源产品,它是一个更现代的服务发现和配置管理平台。Nacos不仅提供了服务注册与发现的功能,还集成了配置管理和健康检查,为微服务架构提供了强大的支撑。相比传统的服务注册中心如...

    nacos-seata-sql.rar

    Nacos 和 Seata 作为两个优秀的开源项目,分别在服务发现与配置管理以及分布式事务处理领域有着卓越的表现。本篇文章将围绕“nacos-seata-sql.rar”这个压缩包,详细解析如何利用Nacos和Seata搭建一个分布式事务环境...

    Nacos通过MCP协议与Istio对接实战.pdf

    Nacos 是一个由阿里巴巴开源的动态服务发现、配置管理和服务管理平台。它的核心功能包括: 1. **动态DNS服务**:Nacos 提供了服务注册与发现的能力,支持Java、Go、Node.js等多种语言的客户端,兼容Dubbo和Spring ...

    dubbo+zookeeper实现服务注册发现 dubbo+nacos实现服务注册发现

    - **Nacos**:Nacos是阿里巴巴开源的一款云原生应用的动态服务发现、配置管理和服务管理平台,它集成了服务注册与发现、配置管理、健康检查等功能,具有高性能、高可用和易用性等特点。 - **Dubbo与Nacos的整合**...

    SpringCloud实用篇02.pdf

    ### Spring Cloud实用篇02:Nacos配置管理详解 #### 学习目标 - 掌握Nacos在Spring Cloud架构中的角色与功能。 - 学习如何利用Nacos进行集中式配置管理。 - 实现配置的热更新机制,提高系统的灵活性。 #### 1. ...

    springcloud项目,解决unknown问题

    本篇文章将详细探讨这个问题,并提供解决方案。 首先,让我们了解Spring Cloud和Spring Boot的核心概念。Spring Boot是一个用于简化Spring应用初始搭建以及开发过程的框架,它通过默认设置,让开发者可以快速启动...

    SpringCloudAlibaba (大集合组件解析)PDF版

    Nacos-Config 是 Nacos 的配置管理组件,提供了集中式的配置管理功能。 **3.2 特点** - **动态配置更新:** 支持动态更新应用的配置,无需重启应用即可生效。 - **版本控制:** 配置文件支持版本控制,方便回滚和...

    基于SpringCloudAlibaba的后台管理系统源码.zip

    Nacos作为SpringCloud Alibaba的核心组件,集成了服务注册与发现、配置管理和元数据中心的功能。在后台管理系统中,Nacos帮助各个微服务实例互相找到对方,并动态管理配置,实现配置的集中化和热更新。 3. **...

    微服务常见面试题学习 方便查找

    - **Nacos**:阿里巴巴开源的服务发现和配置管理平台,提供了更丰富的特性如动态配置和服务管理。 - **负载均衡组件**:Ribbon - **Ribbon**:提供客户端负载均衡,与Eureka配合使用,实现服务间调用时的负载均衡...

    SpringCloud实用篇01

    在微服务领域,SpringCloud是一个广泛应用的开源框架,它为开发者提供了构建分布式系统中的服务发现、配置管理、服务网关、断路器等基础设施。本篇文章将深入探讨SpringCloud在微服务架构中的应用及其核心组件。 ...

    面试问题介绍篇.pdf

    - **Nacos**:阿里巴巴提供的注册中心和配置中心,支持服务发现和服务配置管理。 3. **业务模块**:项目中的主要业务模块包括课程管理服务、资源管理服务、订单支付服务、系统管理服务和学习中心服务。面试者主要...

    cloud-alibaba.zip

    一、SpringCloud Alibaba Nacos:一站式服务发现与配置管理 Nacos是SpringCloud Alibaba中的重要组成部分,它作为一个集成了服务发现和服务配置功能的平台,为企业级应用提供了高效、稳定的运行环境。Nacos的核心...

    springcloudalibaba

    总结来说,SpringCloud Alibaba提供了包括Sentinel、Nacos、Zipkin等在内的丰富组件,覆盖了微服务架构中的服务治理、流量控制、配置管理、分布式追踪等多个方面。通过这些组件的集成和使用,开发者能够构建出稳定、...

Global site tag (gtag.js) - Google Analytics