Nacos 是阿里巴巴2018年7月份開源的項目,如其名, Naming Configuration Service ,專一於服務發現和配置管理領域。linux
Nacos 是什麼?上面已經大概介紹了,更多詳細內容能夠從 官網 或 Github 瞭解。
Nacos 能幫咱們解決什麼問題?本文圍繞其「配置管理」功能來解答。
配置,做爲代碼如影隨形的小夥伴,伴隨着應用的整個生命週期,咱們固然對它也很是的熟悉,想一想配置通常都經過哪幾種形式存在?git
硬編碼
配置項做爲類字段的形式存在,如:github
public class AppConfig { private int connectTimeoutInMills = 5000; public int getConnectTimeoutInMills() { return connectTimeoutInMills; } public void setConnectTimeoutInMills(int connectTimeoutInMills) { this.connectTimeoutInMills = connectTimeoutInMills; } }
這種形式主要有三個問題:spring
配置文件
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 提供的配置管理功能,將配置相關的全部邏輯都收攏,而且提供簡單易用的 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 就會把最新的配置推送到該應用的全部機器上,簡單而高效。
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
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
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