配置中心Nacos

Nacos 是阿里巴巴2018年7月份開源的項目,如其名, Naming Configuration Service ,專一於服務發現和配置管理領域。linux

Nacos 是什麼?上面已經大概介紹了,更多詳細內容能夠從 官網 或 Github 瞭解。
Nacos 能幫咱們解決什麼問題?本文圍繞其「配置管理」功能來解答。
配置,做爲代碼如影隨形的小夥伴,伴隨着應用的整個生命週期,咱們固然對它也很是的熟悉,想一想配置通常都經過哪幾種形式存在?git

  • 硬編碼
  • 配置文件
  • DB 配置表

硬編碼
配置項做爲類字段的形式存在,如:github

public class AppConfig {

    private int connectTimeoutInMills = 5000;

    public int getConnectTimeoutInMills() {
        return connectTimeoutInMills;
    }

    public void setConnectTimeoutInMills(int connectTimeoutInMills) {
        this.connectTimeoutInMills = connectTimeoutInMills;
    }
}

這種形式主要有三個問題:spring

  • 若是配置是須要動態修改的話,須要當前應用去暴露管理該配置項的接口,至因而 Controller 的 API 接口,仍是 JMX ,都是能夠作到。
  • 另外,配置變動都是發生在內存中,並無持久化。所以,在修改配置以後重啓應用,配置又會變回代碼中的默認值了,這是一個坑啊,筆者就曾經掉進去過,爬了好一會才上岸。
  • 最後一個問題,就是當你有多臺機器的時候,要修改一個配置,每一臺都得去操做一遍,運維成本可想而知,極其蛋疼。

配置文件
Spring 中常見的 properties、yml 文件,或其餘自定義的,如,「conf」後綴等:數據庫

# application.properties
connectTimeoutInMills=5000

相比「硬編碼」的形式,它解決了第二個問題,持久化了配置。可是,另外兩個問題並無解決,運維成本依舊仍是很高的。

配置動態變動,能夠是經過相似「硬編碼」暴露管理接口的方式,這時,代碼中會多一步持久化新配置到文件的邏輯。或者,簡單粗暴點,直接登陸機器上去修改配置文件,再重啓應用,讓配置生效。固然,你也能夠在代碼中增長一個定時任務,如每隔 10s 讀取配置文件內容,讓最新的配置可以及時在應用中生效,這樣也就免去了重啓應用這個「較重」的運維操做。

經過增長「持久化邏輯」、「定時任務」讓「配置文件」的形式比「硬編碼」前進了一小步。

DB 配置表
這裏的 DB 能夠是 MySQL 等的關係型數據庫,也能夠是 Redis 等的非關係型數據庫。數據表如:vim

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);

它相對於前二者,更進一步,將配置從應用中抽離出來,集中管理,能較大的下降運維成本。app


那麼,它能怎麼解決動態更新配置的問題呢?據我所知,有兩種方式。
其一,如同以前同樣,經過暴露管理接口去解決,固然,也同樣得增長持久化的邏輯,只不過,以前是寫文件,如今是將最新配置寫入數據庫。不過,程序中還須要有定時從數據庫讀取最新配置的任務,這樣,才能作到只需調用其中一臺機器的管理配置接口,就能把最新的配置下發到整個應用集羣全部的機器上,真正達到下降運維成本的目的。
其二,直接修改數據庫,程序中經過定時任務從數據庫讀取最新的配置內容。
「DB 配置表」的形式解決了主要的問題,可是它不夠優雅,帶來了一些「累贅」。運維

Nacos 配置管理

Nacos 真正將配置從應用中剝離出來,統一管理,優雅的解決了配置的動態變動、持久化、運維成本等問題。
應用自身既不須要去添加管理配置接口,也不須要本身去實現配置的持久化,更不須要引入「定時任務」以便下降運維成本。Nacos 提供的配置管理功能,將配置相關的全部邏輯都收攏,而且提供簡單易用的 SDK,讓應用的配置能夠很是方便被 Nacos 管理起來。
若是是在 Spring 中使用 Nacos,只需三個步驟便可:
第一步:添加依賴this

<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單機搭建

一、首先安裝jdk

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.二、配置環境變量

//打開/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

二、安裝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

相關文章
相關標籤/搜索