經過 3 個經過 3 個 RC 版本的社區體驗之後,Nacos 正式發佈 1.0.0 GA 版本,在架構、功能和 API 設計上進行了全方位的重構和升級。

1.0.0 版本的發佈標誌着 Nacos 已經可以大規模的在生產環境中使用,新版本不僅針對社區的需求和集羣的穩定性相應地增加了一些新特性,而且還發布了服務發現模塊的性能測試報告,以及完整的 API 列表和架構設計文檔。

Nacos 自 2018 年 7 月份開源以來,有賴於社區的大力關注和參與,在不到一年的時間裏,已經演進了 10+ 個版本。同時也有很多企業客戶一直都使用 Nacos 作爲生產環境的註冊中心和配置中心。

Nacos 源於阿里巴巴內部近十年的生產環境打磨的核心中間件,在開源之前就支撐着雙十一等大型業務場景。Nacos 開源不僅是爲了豐富整個微服務生態,也是爲了打造一款真正能夠應對大規模、高併發和複雜環境下複雜需求的生產級服務註冊中心和配置管理平臺。在 1.0.0 GA 版本發佈之際,在此回顧一下 Nacos 的演進歷程:

註冊實例支持ephemeral字段

Nacos在1.0.0版本在instance級別增加了一個ephemeral字段,該字段表示註冊的實例是否是臨時實例還是持久化實例,如果是臨時實例,則不會在Nacos服務端持久化存儲,需要通過上報心跳的方式進行保活,如果一段時間內沒有上報心跳,則會被Nacos服務端摘除。在被摘除後如果又開始上報心跳,則會重新將這個實例註冊。持久化實例則會持久化到Nacos服務端,此時即使註冊實例的客戶端進程不在,這個實例也不會從服務端刪除,只會將健康狀態設爲不健康。

同一個服務下可以同時有臨時實例和持久化實例,這意味着當這服務的所有實例進程不在時,會有部分實例從服務上摘除,剩下的實例則會保留在服務下。

由於老版本客戶端註冊實例時不會上傳ephemeral字段,需要在Nacos服務端設置一個默認的ephemeral值。Nacos 1.0.0裏ephemeral的默認值爲true,即老版本客戶端默認註冊的是臨時實例。如果需要讓老客戶端註冊的實例類型是持久化實例,可以設置開關:

注意事項

註冊實例支持groupName字段

客戶端註冊實例時,可以在方法級別指定要註冊的分組名,這個分組名和服務名是對服務的一個二維的標識,二者共同定位一個服務。一個典型的使用分組的例子如下:

不指定分組的接口依然是支持的,此時會在服務端爲這個服務分配一個默認的分組:DEFAULT_GROUP。

增加了Server狀態的設置

Nacos增加了對Server狀態的控制,所有的狀態都定義在com.alibaba.nacos.naming.cluster.ServerStatus類裏。

各個狀態的含義介紹如下:

用戶可以使用如下接口來修改集羣所有機器的狀態,如果再加上debug=true參數,則只修改當前機器的狀態。

同時這個狀態是會自適應進行修改的,比如啓動時這個狀態爲STARTING,等到數據裝載完畢,則會自動將狀態置爲UP,在運行過程中,如果檢測到系統異常如磁盤滿,則又會將狀態置爲DOWN。不過自適應的狀態值優先級要低於使用接口設置的狀態值,因此當你想恢復自適應的狀態調節的時候,記得將接口將overriddenServerStatus設置爲空。

增加全局推送開關

支持了全局推送開關,可以打開或者關閉服務變更的推送,調用接口如下:

關閉推送後後,客戶端依然會通過輪詢的方式來更新到數據,只是更新的速度沒有推送那麼快。

支持啓動時數據預熱

在老版本的Nacos中,只要Server啓動成功就會開始對外提供服務,此時服務的數據並不一定完全加載完成,這樣可能會導致客戶端接收到的數據並不完整。1.0.0增加了數據預熱的邏輯,對於持久化數據,則會等待所有數據從磁盤加載完成,對於臨時實例這樣的非持久化數據,則會等待從其他Server拉取到完整數據。所有數據都準備好後,纔會將Server狀態置爲UP。

注意事項

對於臨時實例的預熱,實現機制是Server在啓動時會從其他Server節點拉取數據,拉取成功則啓動成功,但是當從老版本Server升級到1.0.0時,由於這個拉取全量數據的接口在老版本Server不存在,那麼第一個升級的機器將無法拉到任何數據,從而後面升級的機器也無法從第一個升級的機器拉取到數據。此時建議使用調用API將Server的運行狀態設置爲WRITE_ONLY,允許客戶端數據逐步匯聚補償上來,但是阻止任何查詢的流量,等集羣數據準備好以後,再將這個運行狀態清空,集羣自己調整運行狀態,然後就會提供完整服務。

元數據編輯框優化

此前的元數據編輯框需要用戶按照指定格式來編輯,容易出錯,如下圖所示:

1.0.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完整列表開放,模型設計和架構設計文檔發佈

服務發現和配置管理的完整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

100+企業用戶已經上生產

目前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。

蓬勃發展的 Nacos 社區

Nacos 社區正在蓬勃發展,截止到發文爲止,Nacos 短短幾個月已經有 9 個微信羣,其中 7 個已滿員,1個QQ羣,1個釘釘羣,關注 Nacos 的社區人數已經近5000人,在 Nacos 羣裏跟 “道(基)友” 切磋技術,交流經驗,招聘交友,搶搶紅包...不亦樂乎。

從Nacos用戶發展而成貢獻者順理成章,而Nacos開發團隊也確實在日趨壯大,從開始的只有4個代碼contributor發展到目前的40多個,1.0.0版本中,參與Nacos倉庫貢獻的開發者有:yanlinly、xuechaos、hxy1991、jifengnan、nkorange、neatlife、loadchange、TsingLiang、jameslcj、duansheli、pbting、mingyixu、paderlol、nanamikon等。

除此之外,社區neatlife貢獻了多個語言的Nacos客戶端:PHP,C#。

而社區也正在計劃在合適的時機上,將在Nacos官網 nacos.io 中添加團隊介紹頁,將大家正式公佈於衆,歡迎大家加入Nacos社區,貢獻社區。用Apache的話說,“社區高於代碼”!

新人時刻 - "什麼是Nacos?"

Nacos 是阿里巴巴於2018年7月份新開源的項目,Nacos的主要願景是期望通過提供易用的 動態服務發現、服務配置管理、服務共享與管理 的基礎設施,幫助用戶在雲原生時代更好的構建、交付、管理自己的微服務平臺。

github項目地址在 這裏

更多與 Nacos 相關的開源項目信息

-----------------------------------------

本文作者:中間件小哥

原文鏈接:https://yq.aliyun.com/articles/697892?utm_content=g_1000052793

本文爲雲棲社區原創內容,未經允許不得轉載。

聲明:該文觀點僅代表作者本人,搜狐號系信息發佈平臺,搜狐僅提供信息存儲空間服務。
相關文章