javascript
(基础)SpringCloud Alibaba Nacos作为多环境配置中心
配置 (Configuration)
配置的目錄
為未知留下退路
舉個簡單的例子
logLevel = INFO
系統正常飛行的時候,我們希望其只輸出INFO級別的日志信息,在生產環境中我們甚至希望只輸出WARNING/ERROR級別的日志,系統出毛病了,再將日志輸出動態的調整成包含診斷信息的DEBUG級別或者TRACE級別。
肯定不能所有應用都修改日志級別,不然當降低系統日志輸出級別時,會出現大部分系統資源用于打印日志了。
這一般用于預發布環境出現BUG時,這時一般只有灰度發布的幾臺機器調低日志級別。之前京東某系統就因不小心調低了日志級別導致整個系統所有鏈路監控報警。
配置文件
在那個單機即系統的時代,我們基本都是在用配置文件來存儲配置項,一個配置項,就是如上面的logLevel那樣的一個含有 = 表達式。
而一個配置文件一般是一組配置項的集合或者叫配置集,一個系統根據邏輯模塊劃分,可以有1到多個配置文件。如下圖 :
分布式系統給系統配置管理帶來的挑戰
毫無疑問今天阿里的系統就是一個大型的、服務化的、復雜的、分布式系統實現之一。在這個領域有3本書值得反復閱讀<<分布式系統概念與設計>> <<分布式系統原理與泛型>> 以及 Distributed Systems For System Architects,有意思的是這三本書只有最后一本在21.3小節簡單的提了一下 Configuration Of Distributed Systems,里面簡單的說了一下靜態配置和動態配置的概念和區別 “…System configuration may be static or dynamic…”. 這說明什么? 這說明我們阿里技術人包括我們中間件今天面臨的很多問題和領域已經進入深水區,已經沒有人會直接給你提供這個領域清晰的解決方案,我們自己正站在前沿,而我們的成功的或者失敗的探索,其經驗和成果都應該總結并分享給整個業界。
配置與環境
“在開發環境中將logLevel設置為DEBUG,在預發環境logLevel設置為INFO,生產環境里logLevel設置為WARNING”
“在日常環境執行線程池的最大線程數應該設置為15,而生產環境上這個值應該大一點,默認設為150”
“在線上環境中,中心機房,應用數據源需要連接A庫,而S機房,應用應該就近連接使用B庫”
“只有在T環境,雙向同步開關才應該關閉”
“這次的改動有點大,新的特性僅在線上的H單元把該特性開放出來,其它的單元環境先不要開放出來”
Nacos環境搭建
先通過鏈接可以下載Nacos的最新發行版,這里我們選擇1.1.4版本的Nacos
https://github.com/alibaba/nacos/releases
下載后解壓:
我是直接用的1.3的當時在家下載github上的東西太慢了就懶得下直接用1.3的也是沒問題滴。
接著雙擊下面的鍵就可以運行了。
但是我們還是配成自己的數據庫安全方便一點他也給出了sql文件在conf文件夾下面。
然后我們配置下連接數據的配置打開application.properties。
填上自己的數據庫配置信息就行。
接著啟動nacos啟動好的狀態如下圖。
使用springcloud整合nacos
項目結構
boostrap.yml的配置:記住一定要是bootstrap.yml而不是application.yml
注意:這里必須使用bootstrap.properties。同時,spring.application.name值必須與上一階段Nacos中創建的配置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應用;還定義了一個Controller,其中通過@Value注解,注入了key為didispace.title的配置(默認為空字符串),這個配置會通過/test接口返回,后續我們會通過這個接口來驗證Nacos中配置的加載。另外,這里還有一個比較重要的注解@RefreshScope,主要用來讓這個類下的配置內容支持動態刷新,也就是當我們的應用啟動之后,修改了Nacos中的配置內容之后,這里也會馬上生效。
啟動項目,接著進入Nacos的控制頁面,在配置列表功能頁面中,點擊右上角的“+”按鈕,進入“新建配置”頁面,如下圖填寫內容:
照著圖中填寫完發布即可。
訪問接口:
可以看到已經讀取到nacos配置信息中的title數據,接著我們不重啟項目改動nacos中配置中的didispace: title: 數據為 “lyj” 點擊發布 然后 再訪問接口:
可以看到信心已經動態的更新了。到此nacos搭建和基本的使用就已經完成了。整合項目已經上傳到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 應用啟動類** Created by bambo on 19/2/7.*/ // Spring Boot 應用的標識 @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
配置中心配置
這里直接配置管理新增,注意默認group不變哦
保存發布,然后啟動springboot服務,訪問http://localhost:8080/test可以看到結果如下,說明成功了,如果修改這個值再發布,刷新url值也會更接著變化。自動刷新的基本功能就實現了。
bamboo
Nacos功能
nacos server的集群部署
集群部署架構圖
官方的推薦部署架構圖:
[外鏈圖片轉存失敗(img-x4go827X-1568616387514)(https://nacos.io/img/deployDnsVipMode.jpg)]
推薦用戶把所有服務列表放到一個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數據源模式,我在上一篇博客中已經說明了,這里不再介紹,直接配置集群。
步驟如下:
1.conf文件夾下的文件如下圖所示,其中下載的壓縮包解壓出來是沒有cluster.conf的,通過復制cluster.conf-example并修改文件名得來。
修改cluster.conf,將部署nacos server的三臺服務器ip地址寫上即可
三臺服務器cluster.conf文件相同,都是協商這三個IP地址即可
#it is ip
#example
114.116.137.***
132.232.159.***
47.107.122.***
2.分別啟動三臺nacos server
修改客戶端,在客戶端的bootstrap.properties文件中修改server的IP地址
注:修改成自己的三臺服務器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相關概念及數據模型)
https://edu.csdn.net/course/detail/25600/310603(nacos視頻學習,墻裂推薦)
總結
以上是生活随笔為你收集整理的(基础)SpringCloud Alibaba Nacos作为多环境配置中心的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: swift野梦抄袭 taylor_断眉质
- 下一篇: IMDB评出来的100部最难看的电影排行