配置中心相信大家都有聽過,zookeeper、apollo等等都是配置中心的代表,但大部分都是JAVA系為主的,筆者主要開發語言使用的是Golang當然也有類似于ETCD這樣的元件,但是并不友善管理也無法可視化,在無意之間發現了阿裡爸爸開源了nacos這個服務發現+配置中心元件,也經過了一段時間的時候在這裡分享給大家
附上:
喵了個咪的部落格:
w-blog.cn Nacos官方Git位址: https://github.com/alibaba/nacos Nacos官方文檔位址: https://nacos.io/zh-cn/docs/ Go語言SDK位址: https://github.com/sunmi-OS/gocore/tree/master/nacosPS:目前官方最新版本為 V1.1.3,阿裡雲有提供配置中心服務ACM使用方式和Nacos相同,使用阿裡雲的前提下免運維是個不錯的選擇
一、Nacos介紹
Nacos是阿裡雲中間件團隊開源的一個項目,基于阿裡雲内部提供的ACM配置管理服務進行獨立,截止到現在github已經有8K以上的star了,雖然成熟度還不能和攜程開源的apollo相提并論,比較也是在阿裡雲上提供服務的元件穩定性還是值得相信的,當然要使用介紹Nacos必須要介紹介紹配置中心這樣一個思想了。
配置中心是個老生常談的話題,從有軟體程式設計開始配置管理都是工程中重要的一步,當然對與一個單體應用隻需要單個配置檔案或環境變量的方式來管理配置就好了是以不再本文的讨論範圍内,配置中心主要解決服務化或微服務化下的配置管理中的如下問題:
- 有效的密碼管理,開發不碰觸密碼配置,運維人員和架構團隊統一管理避免洩露;
- 多項目下的配置絕對統一性,不會出現配置寫錯導緻的BUG
- 對于配置的編輯、存儲、分發、變更管理、曆史版本管理、變更審計有完善的能力
- 配置分組和灰階釋出
有好處當然也有壞處,相對于使用配置檔案我們還需要解決如下問題:
- 配置中心異常情況下服務怎麼保障可用(SDK提供Cache功能當中心服務不可用會使用上一次加載的緩存配置)
- 配置變更後的程式生效邏輯(SDK提供配置變動訂閱邏輯可以訂閱配置變動編寫處理邏輯)
- 開發過程中的配置檔案調試(需要架構進行設計)
- 對于部分語言來說(PHP)配置中心性能的問題(Nacos的吞吐量8C16G 15K并發)
對比下來還是可以總結出配置中心利大于弊的結論
二、Nacos部署
Nacos不止支援二進制部署也支援支援Docker和K8S部署,因為Nacos是有狀态服務存儲的資料需要依賴于Mysql而且叢集的方式需要指定slave的IP是以使用K8S并不是很好的選擇(K8S使用StatefulSet來運作有狀态服務),筆者這裡用Docker-Composer的方式來運作Nacos
Nacos官方Docker部署方式Git位址:
https://github.com/nacos-group/nacos-dockergit clone https://github.com/nacos-group/nacos-docker.git
單機部署(記憶體模式):
docker-compose -f example/standalone-derby.yaml up
單機部署(Mysql模式):
docker-compose -f example/standalone-mysql.yaml up
叢集部署:
docker-compose -f example/cluster-hostname.yaml up
通路:
http://localhost:8848/nacos/就可以看到登入界面了
PS:預設使用者名和密碼都是 nacos
阿裡雲ACM服務
當然自己部署Nacos還會面臨很多挑戰,比如:
- 叢集搭建
- 穩定性
- Mysql資料庫維護
- 配置安全保護(Nacos沒有密碼一說,但是ACM需要使用阿裡雲的密鑰可以提高安全程度)
PS:秉着能用服務就不自己搭建的原則筆者最終使用的是阿裡雲的ACM服務(目前ACM服務免費)
PS:需要注意阿裡雲ACM和Nacos在SDK中的連結方式有不同
三、基礎使用
Nacos有幾個基礎概念,我們隻有先了解清楚之後才能更好的結合到業務場景:
- namespace 命名空間
- Group 配置分組
- DataID 具體的配置名稱
一般我們使用namespace來區分不同的項目或環境,Group區配置設定置的差異系比如A業務擷取的配置和B團隊的有一些細微的差别可以通過Group來區分,最後使用DataId來區分具體的配置項
增加一個namespace
新增一個配置
支援很多種配置格式,也可以使用自定義的格式甚至直接存放代碼都行
也有對應的JAVA系的示例代碼
四、SDK和OpenApi使用配置
Nacos支援一下語言的SDK:
- Java
- go
- cpp
- python
- nodejs
大家可以在官方文檔中檢視具體的使用方式
上面已經配置好的配置我們可以使用OpenApi來通路它
curl "http://172.16.0.13:8848/nacos/v1/cs/configs?dataId=test_config&group=DEFAULT_GROUP&tenant=b58ea912-e564-4958-b21f-3098ad15daf9"
{
"name":"sunmi"
}
特别注意tenant就是需要輸入namespace的名稱,但是不是原名是如下的名稱
差不多基本的使用就到這裡了,Nacos的開源版本還能姐姐服務發現相關的問題這些就留給大家探索了,在配置方面已經能夠解決大部分問題了,下期筆者會基于Go語言給出配置中心最佳實踐,大家記得關注我哦。