配置中心Nacos

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

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单机搭建

1、首先安装jdk

1.1、上传jdk-8u111-linux-x64.tar.gz并解压缩到/home/soft/jdk1.8.0_111

//jdk文件上传到了/home/ftp目录下
#tar -zxvf /home/ftp/jdk-8u111-linux-x64.tar.gz -C /home/soft

1.2、配置环境变量

//打开/etc/profile文件
# vim /etc/profile

在文件末尾插入如下内容

export JAVA_HOME=/home/soft/jdk1.8.0_111 
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

执行profile

#source /etc/profile

2、安装Nacos

Step 1: Download the binary package

You can download the package from the latest stable release.

Take release nacos-server-0.9.0.zip for example.

unzip nacos-server-0.9.0.zip
cd nacos/bin 

Step 2: Start Server

On the Linux/Unix/Mac platform, run the following command to start server with standalone mode:

sh startup.sh -m standalone

On the Windows platform, run the following command to start server with standalone mode. Alternatively, you can also double-click the startup.cmd to run NacosServer.

cmd startup.cmd -m standalone

原文链接:https://www.cnblogs.com/duanxz/p/3777416.html

相关文章

  • 微服务配置中心-Nacos

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

    皮皮熊
  • SpringBoot项目使用配置中心Nacos

    从实体类可以知道表格很简单就只有id、username、password三个字段。

    java乐园
  • 分布式配置中心nacos是什么?分布式配置中心nacos具有哪些功能?

    目前分布式应用数量非常多,因为分布式应用具有集中式应用所不具备的优点,在这种分布式环境下,应当如何处理配置文件呢?配置文件在网络环境中是必不可少的一个工具,能够...

    用户8715145
  • 分布式配置中心nacos是什么?分布式配置中心nacos具有哪些功能?

    目前分布式应用数量非常多,因为分布式应用具有集中式应用所不具备的优点,在这种分布式环境下,应当如何处理配置文件呢?配置文件在网络环境中是必不可少的一个工具,能够...

    用户8715145
  • 配置中心之Nacos简介,使用及Go简单应用

    我们现在有一个项目, 使用Gin进行开发的, 配置文件我们知道是一个config.yaml的文件, 也知道这个配置文件在项目启动时会被加载到内存中使用;

    常见_youmen
  • spring的整合分布式配置中心(ACM diamond nacos Apollo)-nacos

    继上文:spring的整合分布式配置中心(ACM diamond nacos Apollo)

    逍遥壮士
  • spring/springboot的整合分布式配置中心(ACM diamond nacos Apollo)

    代码下载:https://gitee.com/hong99/spring/issues/I1N1DF

    逍遥壮士
  • 推荐一款配置中心新贵:Nacos,阿里开源,是真的香!!

    本文探讨 Nacos 作为配置中心,如何实现不同环境(开发、测试、灰度、正式)的配置管理问题。

    Java技术栈
  • Nacos配置中心原理

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

    spilledyear
  • SpringBoot使用Nacos配置中心

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

    lyb-geek
  • Nacos 配置中心的调研

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

    haifeiWu
  • nacos做服务配置中心

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

    Java旅途
  • springboot整合nacos配置中心

    IT云清
  • 【nacos系列】nacos配置中心管理实战

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

    沁溪源
  • Nacos 配置中心源码分析

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

    没有故事的陈师傅
  • spring cloud 使用nacos配置中心

    路过君
  • nacos配置中心模块详解

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

    龟仙老人
  • springboot使用nacos做配置中心

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

    小尘哥
  • Nacos配置中心动态获取数组配置

    有的时候我们需要动态获取一系列的配置项,假设我们在nacos配置中心的配置如下,nacos配置中心的其他设置请参考Nacos搭建流程

    算法之名

扫码关注云+社区

领取腾讯云代金券