javascript
(基础)SpringCloud Alibaba Nacos作为多环境配置中心
配置 (Configuration)
配置的目錄
為未知留下退路
舉個簡單的例子
logLevel = INFO
系統(tǒng)正常飛行的時候,我們希望其只輸出INFO級別的日志信息,在生產(chǎn)環(huán)境中我們甚至希望只輸出WARNING/ERROR級別的日志,系統(tǒng)出毛病了,再將日志輸出動態(tài)的調(diào)整成包含診斷信息的DEBUG級別或者TRACE級別。
肯定不能所有應(yīng)用都修改日志級別,不然當(dāng)降低系統(tǒng)日志輸出級別時,會出現(xiàn)大部分系統(tǒng)資源用于打印日志了。
這一般用于預(yù)發(fā)布環(huán)境出現(xiàn)BUG時,這時一般只有灰度發(fā)布的幾臺機器調(diào)低日志級別。之前京東某系統(tǒng)就因不小心調(diào)低了日志級別導(dǎo)致整個系統(tǒng)所有鏈路監(jiān)控報警。
配置文件
在那個單機即系統(tǒng)的時代,我們基本都是在用配置文件來存儲配置項,一個配置項,就是如上面的logLevel那樣的一個含有 = 表達(dá)式。
而一個配置文件一般是一組配置項的集合或者叫配置集,一個系統(tǒng)根據(jù)邏輯模塊劃分,可以有1到多個配置文件。如下圖 :
分布式系統(tǒng)給系統(tǒng)配置管理帶來的挑戰(zhàn)
毫無疑問今天阿里的系統(tǒng)就是一個大型的、服務(wù)化的、復(fù)雜的、分布式系統(tǒng)實現(xiàn)之一。在這個領(lǐng)域有3本書值得反復(fù)閱讀<<分布式系統(tǒng)概念與設(shè)計>> <<分布式系統(tǒng)原理與泛型>> 以及 Distributed Systems For System Architects,有意思的是這三本書只有最后一本在21.3小節(jié)簡單的提了一下 Configuration Of Distributed Systems,里面簡單的說了一下靜態(tài)配置和動態(tài)配置的概念和區(qū)別 “…System configuration may be static or dynamic…”. 這說明什么? 這說明我們阿里技術(shù)人包括我們中間件今天面臨的很多問題和領(lǐng)域已經(jīng)進(jìn)入深水區(qū),已經(jīng)沒有人會直接給你提供這個領(lǐng)域清晰的解決方案,我們自己正站在前沿,而我們的成功的或者失敗的探索,其經(jīng)驗和成果都應(yīng)該總結(jié)并分享給整個業(yè)界。
配置與環(huán)境
“在開發(fā)環(huán)境中將logLevel設(shè)置為DEBUG,在預(yù)發(fā)環(huán)境logLevel設(shè)置為INFO,生產(chǎn)環(huán)境里logLevel設(shè)置為WARNING”
“在日常環(huán)境執(zhí)行線程池的最大線程數(shù)應(yīng)該設(shè)置為15,而生產(chǎn)環(huán)境上這個值應(yīng)該大一點,默認(rèn)設(shè)為150”
“在線上環(huán)境中,中心機房,應(yīng)用數(shù)據(jù)源需要連接A庫,而S機房,應(yīng)用應(yīng)該就近連接使用B庫”
“只有在T環(huán)境,雙向同步開關(guān)才應(yīng)該關(guān)閉”
“這次的改動有點大,新的特性僅在線上的H單元把該特性開放出來,其它的單元環(huán)境先不要開放出來”
Nacos環(huán)境搭建
先通過鏈接可以下載Nacos的最新發(fā)行版,這里我們選擇1.1.4版本的Nacos
https://github.com/alibaba/nacos/releases
下載后解壓:
我是直接用的1.3的當(dāng)時在家下載github上的東西太慢了就懶得下直接用1.3的也是沒問題滴。
接著雙擊下面的鍵就可以運行了。
但是我們還是配成自己的數(shù)據(jù)庫安全方便一點他也給出了sql文件在conf文件夾下面。
然后我們配置下連接數(shù)據(jù)的配置打開application.properties。
填上自己的數(shù)據(jù)庫配置信息就行。
接著啟動nacos啟動好的狀態(tài)如下圖。
使用springcloud整合nacos
項目結(jié)構(gòu)
boostrap.yml的配置:記住一定要是bootstrap.yml而不是application.yml
注意:這里必須使用bootstrap.properties。同時,spring.application.name值必須與上一階段Nacos中創(chuàng)建的配置Data Id匹配(除了.properties或者.yaml后綴)。
spring:application:name: nacos-configcloud:nacos:config:server-addr: 127.0.0.1:8848prefix: nacos-configfile-extension: yamlprofiles:active: dev server:port: 8081集成
package lyj;import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;@SpringBootApplication public class NacosConfigApplication {public static void main(String[] args) {SpringApplication.run(NacosConfigApplication.class, args);}@Slf4j@RestController@RefreshScopestatic class TestController{@Value("${didispace.title:}")private String title;@GetMapping("/test")public String hello() {log.info("title:" + title);return title;}}}@SpringBootApplication定義是個Spring Boot應(yīng)用;還定義了一個Controller,其中通過@Value注解,注入了key為didispace.title的配置(默認(rèn)為空字符串),這個配置會通過/test接口返回,后續(xù)我們會通過這個接口來驗證Nacos中配置的加載。另外,這里還有一個比較重要的注解@RefreshScope,主要用來讓這個類下的配置內(nèi)容支持動態(tài)刷新,也就是當(dāng)我們的應(yīng)用啟動之后,修改了Nacos中的配置內(nèi)容之后,這里也會馬上生效。
啟動項目,接著進(jìn)入Nacos的控制頁面,在配置列表功能頁面中,點擊右上角的“+”按鈕,進(jìn)入“新建配置”頁面,如下圖填寫內(nèi)容:
照著圖中填寫完發(fā)布即可。
訪問接口:
可以看到已經(jīng)讀取到nacos配置信息中的title數(shù)據(jù),接著我們不重啟項目改動nacos中配置中的didispace: title: 數(shù)據(jù)為 “l(fā)yj” 點擊發(fā)布 然后 再訪問接口:
可以看到信心已經(jīng)動態(tài)的更新了。到此nacos搭建和基本的使用就已經(jīng)完成了。整合項目已經(jīng)上傳到github歡迎大家給個star謝謝各位大佬。
git@github.com:CXLYJ/nacos-config.git
集成2
package org.spring.springboot;import com.alibaba.nacos.api.config.annotation.NacosValue; import com.alibaba.nacos.spring.context.annotation.config.NacosPropertySource; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController;import static org.springframework.web.bind.annotation.RequestMethod.GET;/*** Spring Boot 應(yīng)用啟動類** Created by bambo on 19/2/7.*/ // Spring Boot 應(yīng)用的標(biāo)識 @SpringBootApplication @RestController @NacosPropertySource(dataId = "bamboo.test", autoRefreshed = true) public class Application {public static void main(String[] args) {SpringApplication.run(Application.class,args);}@NacosValue(value = "${service.name:1}", autoRefreshed = true)private String serverName;@RequestMapping(value = "/test", method = GET)@ResponseBodypublic String get() {return serverName;}}配置文件:application.properties
nacos.config.server-addr=127.0.0.1:8848
配置中心配置
這里直接配置管理新增,注意默認(rèn)group不變哦
保存發(fā)布,然后啟動springboot服務(wù),訪問http://localhost:8080/test可以看到結(jié)果如下,說明成功了,如果修改這個值再發(fā)布,刷新url值也會更接著變化。自動刷新的基本功能就實現(xiàn)了。
bamboo
Nacos功能
nacos server的集群部署
集群部署架構(gòu)圖
官方的推薦部署架構(gòu)圖:
[外鏈圖片轉(zhuǎn)存失敗(img-x4go827X-1568616387514)(https://nacos.io/img/deployDnsVipMode.jpg)]
推薦用戶把所有服務(wù)列表放到一個vip(虛擬IP,主機宕機后可以自動漂移到備用機器上)下面,然后掛到一個域名下面
http://ip1:port/openAPI 直連ip模式,機器掛則需要修改ip才可以使用。
http://VIP:port/openAPI 掛載VIP模式,直連vip即可,下面掛server真實ip,可讀性不好。
http://nacos.com:port/openAPI 域名+VIP模式,可讀性好,而且換ip方便,推薦模式
具體操作實踐
注:目前器群模式下不采用mysql作為配置文件的存儲方式,所以需要先配置為采用mysql數(shù)據(jù)源模式,我在上一篇博客中已經(jīng)說明了,這里不再介紹,直接配置集群。
步驟如下:
1.conf文件夾下的文件如下圖所示,其中下載的壓縮包解壓出來是沒有cluster.conf的,通過復(fù)制cluster.conf-example并修改文件名得來。
修改cluster.conf,將部署nacos server的三臺服務(wù)器ip地址寫上即可
三臺服務(wù)器cluster.conf文件相同,都是協(xié)商這三個IP地址即可
#it is ip
#example
114.116.137.***
132.232.159.***
47.107.122.***
2.分別啟動三臺nacos server
修改客戶端,在客戶端的bootstrap.properties文件中修改server的IP地址
注:修改成自己的三臺服務(wù)器ip地址,用逗號分隔
spring.cloud.nacos.config.server-addr=114.116.137.***:8848,132.232.159.***:8848,47.107.122.***:8848
參考
https://www.sohu.com/a/116745628_466839
https://spring.io/blog/2011/02/15/spring-3-1-m1-unified-property-management/
https://www.jianshu.com/p/d78fa8412cbf
https://blog.csdn.net/zjcjava/article/details/88316190
https://www.mayi888.com/archives/57402(重點)
https://www.cnblogs.com/joker-dj/p/12768975.html
https://www.cnblogs.com/nijunyang/p/12313572.html(nacos相關(guān)概念及數(shù)據(jù)模型)
https://edu.csdn.net/course/detail/25600/310603(nacos視頻學(xué)習(xí),墻裂推薦)
總結(jié)
以上是生活随笔為你收集整理的(基础)SpringCloud Alibaba Nacos作为多环境配置中心的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: swift野梦抄袭 taylor_断眉质
- 下一篇: IMDB评出来的100部最难看的电影排行