Nacos 是阿里巴巴開源的配置中心和服務發現產品,開源距今已經超過一年的時間。本次1.1.0的發佈,帶來了許多重量級的特性更新,包括灰度配置等社區呼聲很高的特性,下面會介紹1.1.0版本發佈的新特性和每一個特性的使用方式。html
0.8.0及以上版本:node
0.8.0如下版本,先升級到1.0.0版本。git
請使用最新的1.1.1版本,修復了1.1.0版本的一個客戶端版本顯示問題。github
灰度配置指的是指定部分客戶端IP進行新配置的下發,其他客戶端配置保持不變,用以驗證新配置對客戶端的影響,保證配置的平穩發佈。灰度配置是生產環境中一個比較重要的功能,對於保證生產環境的穩定性很是重要。在1.1.0中,Nacos 支持了以IP爲粒度的灰度配置,具體使用步驟以下:微信
一、 在配置列表頁面,點擊某個配置的「編輯配置」按鈕:網絡
二、勾選「Beta發佈」,在文本框裏填入要下發配置的IP,多個IP用逗號分隔:dom
三、 修改配置內容,點擊「發佈Beta」按鈕,便可完成灰度配置的發佈:curl
四、 點擊「發佈Beta」後,「發佈Beta」按鈕變灰,此時能夠選擇「中止Beta」或者「發佈」。「中止Beta」表示取消中止灰度發佈,當前灰度發佈配置的IP列表和配置內容都會刪除,頁面回到正常發佈的樣式。「發佈」表示將灰度配置在全部客戶端生效,以前的配置也會被覆蓋,同時頁面回到正常發佈的樣式:maven
@KeRan213539
配置管理的另外一個常見需求是可以將一個集羣的配置同步到另一個集羣,或者從一個命名空間同步到另一個命名空間。來自社區的貢獻者KeRan213539貢獻這個很是實用的功能,具體使用步驟以下:
一、 導出查詢結果。能夠根據查詢條件,將當期查詢出的全部結果打包爲一個文件:
二、 導出選中的配置:
三、 導入配置,能夠選擇相同配置的處理策略。
當發現有相同的配置時,會有相應的提示:
同時若是導入的配置文件格式不符合要求,也會有相應的提示:
四、 配置同步,選取想要同步的配置,點擊「克隆」,而後再選擇要同步的目標命名空間,就能夠將配置同步到對應的命名空間:
五、 導入導出文件格式說明。均爲zip壓縮包,壓縮包內有多個目錄,目錄名爲配置的 group,目錄下有具體的文件,文件名爲配置的 dataId ,每一個文件的內容爲配置具體的內容:
@pbting
1.1.0的安裝包列表裏多了一個nacos-address-server-1.1.0。這個安裝包的做用是做爲地址服務器模塊,單獨部署。關於地址服務器的介紹能夠參考Nacos官網地址服務器文章,這裏只作一個簡單的說明。
通常中間件產品,客戶端尋址服務端的方式都是在客戶端配置服務端的地址列表,這樣有一個缺點是當服務端的地址發生變更時,客戶端沒法實時的感知到,也沒法動態調整訪問的服務端集羣。而在阿里巴巴的一種比較常見的客戶端尋址服務端的方式是地址服務器。簡單的說就是部署單獨的地址服務器,地址服務器提供接口,獲取相關中間件產品服務端集羣的地址。因爲地址服務器功能比較單一,所以穩定性比較容易保證。客戶端只須要配置地址服務器的域名,經過地址服務器獲取想要訪問的中間件的集羣地址,這樣既保證可以感知中間件集羣的動態變化,也可以爲客戶端配置更靈活的集羣訪問策略。
下面介紹地址服務器模塊的使用。
部署地址服務器
# Add IP to nacos cluster: curl -X POST '$ADDRESS_SERVER:8080/nacos/v1/as/nodes?ips=1.1.1.1:8848,2.2.2.2:8848,3.3.3.3:8848' # Remove IP from nacos cluster: curl -X DELETE '$ADDRESS_SERVER:8080/nacos/v1/as/nodes?ips=1.1.1.1:8848,2.2.2.2:8848,3.3.3.3:8848'
mvn -Prelease-address clean install -Dmaven.test.skip=true
安裝包會生成在distribution/target目錄下。
@nicholas2015
服務訂閱者列表是1.1.0增長的另一個功能,就是能夠在控制檯上查看一個服務的消費者,執行步驟以下:
服務自定義心跳週期
@lanCao
以前的版本中,客戶端註冊服務時,不能自定義上報心跳的週期以及客戶端下線時自動刪除實例的間隔。在1.1.0中,咱們支持了這個特性,應用能夠在註冊時,經過設置實例的metadata,來指定心跳週期、健康檢查過時時間及刪除實例時間。具體舉例以下:
String serviceName = randomDomainName(); Instance instance = new Instance(); instance.setIp("1.1.1.1"); instance.setPort(9999); Map<String, String> metadata = new HashMap<String, String>(); // 設置心跳的週期,單位爲秒,這裏將心跳間隔設置爲3秒: metadata.put(PreservedMetadataKeys.HEART_BEAT_INTERVAL, "3"); // 設置心跳超時時間,單位爲秒,這裏將心跳超時時間設爲6秒, // 即服務端6秒收不到客戶端心跳,會將該客戶端註冊的實例設爲不健康: metadata.put(PreservedMetadataKeys.HEART_BEAT_TIMEOUT, "6"); // 設置實例刪除的超時時間,單位爲秒,這裏將實例刪除超時時間設爲9秒, // 即服務端9秒收不到客戶端心跳,會將該客戶端註冊的實例刪除: metadata.put(PreservedMetadataKeys.IP_DELETE_TIMEOUT, "9"); instance.setMetadata(metadata); naming.registerInstance(serviceName, instance);
@chuntaojun
當存在程序啓動之初,若是用戶經過ConfigService.getConfig
獲取配置的同時,又註冊了監聽器,那麼會存在監聽器再次通知用戶剛剛獲取的配置信息。所以在version 1.1.0
版本中,增長了新的接口以及一個系統參數(使用戶無需修改現有代碼)
String getConfigAndSignListener(String dataId, String group, long timeoutMs, Listener listener) throws NacosException;
該方法在獲取配置後,隨即註冊一個監聽器,避免監聽器通知用戶剛剛纔拉取的配置信息
nacos.enableRemoteSyncConfig=true | false
設置該系統參數,將在監聽器註冊時主動去向遠端拉取當前最新的配置信息,可是存在必定的網絡開銷,所以建議用戶採起接口的方式
@lzp0412 @peggypig @atlanssia
Nacos 上週還發布了Go語言的 SDK ,目前發佈了0.1.0-beta版本,倉庫地址是:https://github.com/nacos-group/nacos-sdk-go。Nacos Go SDK是單獨的倉庫,由Nacos Committer參與維護,在代碼上不屬於Nacos 1.1.0。在此也很是歡迎社區的Go語言高手,參與Nacos Go SDK的演進。
爲了實現這一目標,你須要積極參與 Nacos 社區。若是您在文檔中發現拼寫錯誤,在代碼中發現錯誤,或想要新功能或想要提供建議,您能夠在GitHub上建立一個issues。
若是您想開始着手,能夠選擇github倉庫中有如下標籤的issues。
DISS is cheap, show me your hand
比吐槽更重要的是搭把手,參與社區一塊兒發展 Nacos
Nacos 社區正在蓬勃發展,截止到發文爲止,Nacos 已經有 9 個微信羣,其中 7 個已滿員,1個QQ羣,1個釘釘羣,關注 Nacos 的社區人數已經近5000人,在 Nacos 羣裏跟 「道(基)友」 切磋技術,交流經驗,招聘交友,搶搶紅包...不亦樂乎。
爲了可以與代碼貢獻者更方便的交流,咱們組建了釘釘羣「Nacos社區核心貢獻小組(23335652)」,這個羣裏都是都是對Nacos貢獻很是感興趣的小夥伴,若是你也想成爲Nacos貢獻者,甚至成爲Committer,歡迎加入這個羣和羣裏的小夥伴一塊兒切磋!
在 Nacos 官網 nacos.io 中,已經添加團隊介紹頁,裏面包括Nacos的開發者角色定義及職責劃分,同時包含了Naocs的開發者們介紹和靚照哦,歡迎你們加入Nacos社區,貢獻社區。用Apache的話說,「社區高於代碼」!
還不知道什麼是 Nacos ? 不要緊,在github上star一下跟程序猿兄弟打個招呼吧!!
Nacos 是阿里巴巴於2018年7月份新開源的項目,Nacos的主要願景是指望經過提供易用的 動態服務發現
、服務配置管理
、服務共享與管理
的基礎設施,幫助用戶在雲原生時代更好的構建、交付、管理本身的微服務平臺。
原文連接 本文爲雲棲社區原創內容,未經容許不得轉載。