Nacos - 配置管理中心(阿里開源)

配置中心相信大家都有聽過,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/nacos

PS:當前官方最新版本爲 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-docker

git 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語言給出配置中心最佳實踐,大家記得關注我哦。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章