通過 3 個 RC 版本的社區體驗以後,Nacos 正式發佈 1.0.0 GA 版本,在架構、功能和 API 設計上進行了全方位的重構和升級。html
1.0.0 版本的發佈標誌着 Nacos 已經能夠大規模的在生產環境中使用,新版本不只針對社區的需求和集羣的穩定性相應地增長了一些新特性,並且還發布了服務發現模塊的性能測試報告,以及完整的 API 列表和架構設計文檔。git
Nacos演進歷程
Nacos 自 2018 年 7 月份開源以來,有賴於社區的大力關注和參與,在不到一年的時間裏,已經演進了 10+ 個版本。同時也有不少企業客戶一直都使用 Nacos 做爲生產環境的註冊中心和配置中心。github
Nacos 源於阿里巴巴內部近十年的生產環境打磨的核心中間件,在開源以前就支撐着雙十一等大型業務場景。Nacos 開源不只是爲了豐富整個微服務生態,也是爲了打造一款真正可以應對大規模、高併發和複雜環境下複雜需求的生產級服務註冊中心和配置管理平臺。在 1.0.0 GA 版本發佈之際,在此回顧一下 Nacos 的演進歷程:架構
2018.07.20 - Nacos 0.1.0 支持基本的服務發現功能和配置管理功能。
2018.09.15 - Nacos 0.2.0 正式支持SpringCloud生態。
2018.10.26 - Nacos 0.3.0 提供控制檯界面。
2018.11.19 - Nacos 0.5.0 開源DNS-F,支持DNS協議服務發現。
2018.12.06 - Nacos 0.6.0 正式支持Dubbo客戶端註冊服務,支持K8S部署。
2018.12.18 - Nacos 0.7.0 支持CMDB元數據管理,支持Node.js客戶端。
2019.01.22 - Nacos 0.8.0 PRE-GA 支持控制檯帳號登陸,支持命名空間,Nacos-Sync打通Eureka和Zookeeper。
2019.02.22 - Nacos 0.9.0 增長metrics數據暴露,增長測試用例,全面提高穩定性。
2019.04.10 - Nacos 1.0.0 GA 同時支持AP和CP一致性,壓測報告發布,穩定性增強和體驗優化。併發
Nacos 1.0.0 新增的特性運維
註冊實例支持ephemeral字段
Nacos在1.0.0版本在instance級別增長了一個ephemeral字段,該字段表示註冊的實例是不是臨時實例仍是持久化實例,若是是臨時實例,則不會在Nacos服務端持久化存儲,須要經過上報心跳的方式進行保活,若是一段時間內沒有上報心跳,則會被Nacos服務端摘除。在被摘除後若是又開始上報心跳,則會從新將這個實例註冊。持久化實例則會持久化到Nacos服務端,此時即便註冊實例的客戶端進程不在,這個實例也不會從服務端刪除,只會將健康狀態設爲不健康。curl
同一個服務下能夠同時有臨時實例和持久化實例,這意味着當這服務的全部實例進程不在時,會有部分實例從服務上摘除,剩下的實例則會保留在服務下。微服務
因爲老版本客戶端註冊實例時不會上傳ephemeral字段,須要在Nacos服務端設置一個默認的ephemeral值。Nacos 1.0.0裏ephemeral的默認值爲true,即老版本客戶端默認註冊的是臨時實例。若是須要讓老客戶端註冊的實例類型是持久化實例,能夠設置開關:高併發
curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=defaultInstanceEphemeral&value=false'性能
注意事項
當從老版本Nacos升級到Nacos 1.0.0時,從磁盤加載的實例數據會被置爲持久化實例。
註冊實例支持groupName字段
客戶端註冊實例時,能夠在方法級別指定要註冊的分組名,這個分組名和服務名是對服務的一個二維的標識,兩者共同定位一個服務。一個典型的使用分組的例子以下:
namingService.registerInstance("nacos.test.1", "group1", instance);
不指定分組的接口依然是支持的,此時會在服務端爲這個服務分配一個默認的分組:DEFAULT_GROUP。
增長了Server狀態的設置
Nacos增長了對Server狀態的控制,全部的狀態都定義在com.alibaba.nacos.naming.cluster.ServerStatus類裏。
各個狀態的含義介紹以下:
UP:Server一切正常,讀寫請求都會被接受;
DOWN:Server異常,全部請求會返回HTTP 503錯誤;
STARTING:Server還在啓動中,全部請求返回HTTP 503錯誤;
PAUSED:Server被人工暫停,區別於DOWN多是系統本身檢測到異常而後設置DOWN狀態,PAUSED狀態表示當前Server多是沒問題的,只是人工進行了干預;
WRITE_ONLY:只有非GET請求會被接受;
READ_ONLY:只有GET請求會被接受;
用戶可使用以下接口來修改集羣全部機器的狀態,若是再加上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/na...
大規模生產可用
API完整列表開放,模型設計和架構設計文檔發佈
服務發現和配置管理的完整API列表會發布到官網,除了核心功能外,也包含部分運維接口,方便開發者進行集成:https://nacos.io/zh-cn/docs/o...
同時對於Nacos的數據模型、集羣模型、架構設計及模塊設計文檔進行了更新:
https://nacos.io/zh-cn/docs/a...
性能測試報告發布
Nacos 1.0.0進行了性能測試,針對服務發現和配置管理的讀寫能力進行了大規模場景的壓力測試。目前獲得的測試數據是:
容量:服務實例數100萬+,配置數100萬+,支持客戶端鏈接100萬+;
讀寫TPS:1萬+;
節點擴展能力:100節點+;
推送能力:1萬客戶端訂閱同一配置/服務,3秒內收到變動通知比例99.9%;
目前壓測報告已經更新到官網:
https://nacos.io/zh-cn/docs/n...
https://nacos.io/zh-cn/docs/n...
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。
good first issue:對於新手來講是很是好的入門issues。contribution welcome:很是須要解決的問題和很是重要的模塊,但目前缺乏貢獻者,歡迎貢獻者來貢獻。