通過 3 個 RC 版本的社區體驗以後,Nacos 正式發佈 1.0.0 GA 版本,在架構、功能和 API 設計上進行了全方位的重構和升級。php
1.0.0 版本的發佈標誌着 Nacos 已經能夠大規模的在生產環境中使用,新版本不只針對社區的需求和集羣的穩定性相應地增長了一些新特性,並且還發布了服務發現模塊的性能測試報告,以及完整的 API 列表和架構設計文檔。html
Nacos 自 2018 年 7 月份開源以來,有賴於社區的大力關注和參與,在不到一年的時間裏,已經演進了 10+ 個版本。同時也有不少企業客戶一直都使用 Nacos 做爲生產環境的註冊中心和配置中心。git
Nacos 源於阿里巴巴內部近十年的生產環境打磨的核心中間件,在開源以前就支撐着雙十一等大型業務場景。Nacos 開源不只是爲了豐富整個微服務生態,也是爲了打造一款真正可以應對大規模、高併發和複雜環境下複雜需求的生產級服務註冊中心和配置管理平臺。在 1.0.0 GA 版本發佈之際,在此回顧一下 Nacos 的演進歷程:github
Nacos在1.0.0版本在instance級別增長了一個ephemeral字段,該字段表示註冊的實例是不是臨時實例仍是持久化實例,若是是臨時實例,則不會在Nacos服務端持久化存儲,須要經過上報心跳的方式進行保活,若是一段時間內沒有上報心跳,則會被Nacos服務端摘除。在被摘除後若是又開始上報心跳,則會從新將這個實例註冊。持久化實例則會持久化到Nacos服務端,此時即便註冊實例的客戶端進程不在,這個實例也不會從服務端刪除,只會將健康狀態設爲不健康。微信
同一個服務下能夠同時有臨時實例和持久化實例,這意味着當這服務的全部實例進程不在時,會有部分實例從服務上摘除,剩下的實例則會保留在服務下。架構
因爲老版本客戶端註冊實例時不會上傳ephemeral字段,須要在Nacos服務端設置一個默認的ephemeral值。Nacos 1.0.0裏ephemeral的默認值爲true,即老版本客戶端默認註冊的是臨時實例。若是須要讓老客戶端註冊的實例類型是持久化實例,能夠設置開關:併發
curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=defaultInstanceEphemeral&value=false'
注意事項運維
客戶端註冊實例時,能夠在方法級別指定要註冊的分組名,這個分組名和服務名是對服務的一個二維的標識,兩者共同定位一個服務。一個典型的使用分組的例子以下:curl
namingService.registerInstance("nacos.test.1", "group1", instance);
不指定分組的接口依然是支持的,此時會在服務端爲這個服務分配一個默認的分組:DEFAULT_GROUP。微服務
Nacos增長了對Server狀態的控制,全部的狀態都定義在com.alibaba.nacos.naming.cluster.ServerStatus類裏。
各個狀態的含義介紹以下:
用戶可使用以下接口來修改集羣全部機器的狀態,若是再加上debug=true參數,則只修改當前機器的狀態。
curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=overriddenServerStatus&value=READ_ONLY'
同時這個狀態是會自適應進行修改的,好比啓動時這個狀態爲STARTING,等到數據裝載完畢,則會自動將狀態置爲UP,在運行過程當中,若是檢測到系統異常如磁盤滿,則又會將狀態置爲DOWN。不過自適應的狀態值優先級要低於使用接口設置的狀態值,所以當你想恢復自適應的狀態調節的時候,記得將接口將overriddenServerStatus設置爲空。
支持了全局推送開關,能夠打開或者關閉服務變動的推送,調用接口以下:
curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=pushEnabled&value=false'
關閉推送後,客戶端依然會經過輪詢的方式來更新到數據,只是更新的速度沒有推送那麼快。
在老版本的Nacos中,只要Server啓動成功就會開始對外提供服務,此時服務的數據並不必定徹底加載完成,這樣可能會致使客戶端接收到的數據並不完整。1.0.0增長了數據預熱的邏輯,對於持久化數據,則會等待全部數據從磁盤加載完成,對於臨時實例這樣的非持久化數據,則會等待從其餘Server拉取到完整數據。全部數據都準備好後,纔會將Server狀態置爲UP。
對於臨時實例的預熱,實現機制是Server在啓動時會從其餘Server節點拉取數據,拉取成功則啓動成功,可是當從老版本Server升級到1.0.0時,因爲這個拉取全量數據的接口在老版本Server不存在,那麼第一個升級的機器將沒法拉到任何數據,從然後面升級的機器也沒法從第一個升級的機器拉取到數據。此時建議使用調用API將Server的運行狀態設置爲WRITE_ONLY,容許客戶端數據逐步匯聚補償上來,可是阻止任何查詢的流量,等集羣數據準備好之後,再將這個運行狀態清空,集羣本身調整運行狀態,而後就會提供完整服務。
此前的元數據編輯框須要用戶按照指定格式來編輯,容易出錯,以下圖所示:
1.0.0將會對服務頁面的元數據編輯框進行優化,在調整編輯框大小的同時,增長語法高亮,方便用戶進行編輯和識別格式問題,一個大概的編輯框預覽圖以下:
持MySQL 8.0
Nacos 1.0.0將支持MySQL 8.0驅動。
除了上面提到的變動,Nacos 1.0.0還進行了代碼的優化和一些bug的修復,完整的變動列表能夠參考:https://github.com/alibaba/nacos/issues?q=is%3Aissue+milestone%3A1.0.0
服務發現和配置管理的完整API列表會發布到官網,除了核心功能外,也包含部分運維接口,方便開發者進行集成:https://nacos.io/zh-cn/docs/open-API.html
同時對於Nacos的數據模型、集羣模型、架構設計及模塊設計文檔進行了更新:
https://nacos.io/zh-cn/docs/architecture.html
Nacos 1.0.0進行了性能測試,針對服務發現和配置管理的讀寫能力進行了大規模場景的壓力測試。目前獲得的測試數據是:
目前壓測報告已經更新到官網:
https://nacos.io/zh-cn/docs/nacos-naming-benchmark.html
https://nacos.io/zh-cn/docs/nacos-config-benchmark.html
目前Nacos做爲服務發現和配置中心已經有100多個用戶的生產環境中服役,其中包含阿里巴巴、虎牙等企業已經大規模應用在覈心業務場景中。
Nacos 1.0.0 服務端個別接口與 0.8.0 之前的版本不兼容,0.8.0以前版本須要先升級到0.8.0,再升級到1.0.0。對客戶端而言,Nacos 1.0.0兼容0.5.0及以上的版本的客戶端訪問。
爲了實現這一目標,你須要積極參與Nacos社區。若是您在文檔中發現拼寫錯誤,在代碼中發現錯誤,或想要新功能或想要提供建議,您能夠在GitHub上建立一個issues。
若是您想開始着手,能夠選擇github倉庫中有如下標籤的issues。
DISS is cheap, show me your hand
比吐槽更重要的是搭把手,參與社區一塊兒發展Nacos
Nacos 社區正在蓬勃發展,截止到發文爲止,Nacos 短短几個月已經有 9 個微信羣,其中 7 個已滿員,1個QQ羣,1個釘釘羣,關注 Nacos 的社區人數已經近5000人,在 Nacos 羣裏跟 「道(基)友」 切磋技術,交流經驗,招聘交友,搶搶紅包...不亦樂乎。
從Nacos用戶發展而成貢獻者瓜熟蒂落,而Nacos開發團隊也確實在日趨壯大,從開始的只有4個代碼contributor發展到目前的40多個,1.0.0版本中,參與Nacos倉庫貢獻的開發者有:yanlinly、xuechaos、hxy199一、jifengnan、nkorange、neatlife、loadchange、TsingLiang、jameslcj、duansheli、pbting、mingyixu、paderlol、nanamikon等。
除此以外,社區neatlife貢獻了多個語言的Nacos客戶端:PHP,C#。
而社區也正在計劃在合適的時機上,將在Nacos官網 nacos.io 中添加團隊介紹頁,將你們正式公佈於衆,歡迎你們加入Nacos社區,貢獻社區。用Apache的話說,「社區高於代碼」!
還不知道什麼是Nacos? 不要緊,在github上star一下跟程序猿兄弟打個招呼吧!!
Nacos 是阿里巴巴於2018年7月份新開源的項目,Nacos的主要願景是指望經過提供易用的 動態服務發現
、服務配置管理
、服務共享與管理
的基礎設施,幫助用戶在雲原生時代更好的構建、交付、管理本身的微服務平臺。
原文連接 本文爲雲棲社區原創內容,未經容許不得轉載。