Nacos 发布 1.0.0 GA 版本,可大规模投入到生产环境
經(jīng)過 3 個 RC 版本的社區(qū)體驗之后,Nacos 正式發(fā)布 1.0.0 GA 版本,在架構(gòu)、功能和 API 設(shè)計上進行了全方位的重構(gòu)和升級。
1.0.0 版本的發(fā)布標志著 Nacos 已經(jīng)可以大規(guī)模的在生產(chǎn)環(huán)境中使用,新版本不僅針對社區(qū)的需求和集群的穩(wěn)定性相應(yīng)地增加了一些新特性,而且還發(fā)布了服務(wù)發(fā)現(xiàn)模塊的性能測試報告,以及完整的 API 列表和架構(gòu)設(shè)計文檔。
Nacos演進歷程
Nacos 自 2018 年 7 月份開源以來,有賴于社區(qū)的大力關(guān)注和參與,在不到一年的時間里,已經(jīng)演進了 10+ 個版本。同時也有很多企業(yè)客戶一直都使用 Nacos 作為生產(chǎn)環(huán)境的注冊中心和配置中心。
Nacos 源于阿里巴巴內(nèi)部近十年的生產(chǎn)環(huán)境打磨的核心中間件,在開源之前就支撐著雙十一等大型業(yè)務(wù)場景。Nacos 開源不僅是為了豐富整個微服務(wù)生態(tài),也是為了打造一款真正能夠應(yīng)對大規(guī)模、高并發(fā)和復(fù)雜環(huán)境下復(fù)雜需求的生產(chǎn)級服務(wù)注冊中心和配置管理平臺。在 1.0.0 GA 版本發(fā)布之際,在此回顧一下 Nacos 的演進歷程:
2018.07.20 - Nacos 0.1.0 支持基本的服務(wù)發(fā)現(xiàn)功能和配置管理功能。
2018.09.15 - Nacos 0.2.0 正式支持SpringCloud生態(tài)。
2018.10.26 - Nacos 0.3.0 提供控制臺界面。
2018.11.19 - Nacos 0.5.0 開源DNS-F,支持DNS協(xié)議服務(wù)發(fā)現(xiàn)。
2018.12.06 - Nacos 0.6.0 正式支持Dubbo客戶端注冊服務(wù),支持K8S部署。
2018.12.18 - Nacos 0.7.0 支持CMDB元數(shù)據(jù)管理,支持Node.js客戶端。
2019.01.22 - Nacos 0.8.0 PRE-GA 支持控制臺賬號登錄,支持命名空間,Nacos-Sync打通Eureka和Zookeeper。
2019.02.22 - Nacos 0.9.0 增加metrics數(shù)據(jù)暴露,增加測試用例,全面提升穩(wěn)定性。
2019.04.10 - Nacos 1.0.0 GA 同時支持AP和CP一致性,壓測報告發(fā)布,穩(wěn)定性加強和體驗優(yōu)化。
Nacos 1.0.0 新增的特性
注冊實例支持ephemeral字段
Nacos在1.0.0版本在instance級別增加了一個ephemeral字段,該字段表示注冊的實例是否是臨時實例還是持久化實例,如果是臨時實例,則不會在Nacos服務(wù)端持久化存儲,需要通過上報心跳的方式進行保活,如果一段時間內(nèi)沒有上報心跳,則會被Nacos服務(wù)端摘除。在被摘除后如果又開始上報心跳,則會重新將這個實例注冊。持久化實例則會持久化到Nacos服務(wù)端,此時即使注冊實例的客戶端進程不在,這個實例也不會從服務(wù)端刪除,只會將健康狀態(tài)設(shè)為不健康。
同一個服務(wù)下可以同時有臨時實例和持久化實例,這意味著當這服務(wù)的所有實例進程不在時,會有部分實例從服務(wù)上摘除,剩下的實例則會保留在服務(wù)下。
由于老版本客戶端注冊實例時不會上傳ephemeral字段,需要在Nacos服務(wù)端設(shè)置一個默認的ephemeral值。Nacos 1.0.0里ephemeral的默認值為true,即老版本客戶端默認注冊的是臨時實例。如果需要讓老客戶端注冊的實例類型是持久化實例,可以設(shè)置開關(guān):
curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=defaultInstanceEphemeral&value=false'
注意事項
當從老版本Nacos升級到Nacos 1.0.0時,從磁盤加載的實例數(shù)據(jù)會被置為持久化實例。
注冊實例支持groupName字段
客戶端注冊實例時,可以在方法級別指定要注冊的分組名,這個分組名和服務(wù)名是對服務(wù)的一個二維的標識,二者共同定位一個服務(wù)。一個典型的使用分組的例子如下:
namingService.registerInstance("nacos.test.1", "group1", instance);
不指定分組的接口依然是支持的,此時會在服務(wù)端為這個服務(wù)分配一個默認的分組:DEFAULT_GROUP。
增加了Server狀態(tài)的設(shè)置
Nacos增加了對Server狀態(tài)的控制,所有的狀態(tài)都定義在com.alibaba.nacos.naming.cluster.ServerStatus類里。
各個狀態(tài)的含義介紹如下:
UP:Server一切正常,讀寫請求都會被接受;
DOWN:Server異常,所有請求會返回HTTP 503錯誤;
STARTING:Server還在啟動中,所有請求返回HTTP 503錯誤;
PAUSED:Server被人工暫停,區(qū)別于DOWN可能是系統(tǒng)自己檢測到異常然后設(shè)置DOWN狀態(tài),PAUSED狀態(tài)表示當前Server可能是沒問題的,只是人工進行了干預(yù);
WRITE_ONLY:只有非GET請求會被接受;
READ_ONLY:只有GET請求會被接受;
用戶可以使用如下接口來修改集群所有機器的狀態(tài),如果再加上debug=true參數(shù),則只修改當前機器的狀態(tài)。
curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=overriddenServerStatus&value=READ_ONLY'
同時這個狀態(tài)是會自適應(yīng)進行修改的,比如啟動時這個狀態(tài)為STARTING,等到數(shù)據(jù)裝載完畢,則會自動將狀態(tài)置為UP,在運行過程中,如果檢測到系統(tǒng)異常如磁盤滿,則又會將狀態(tài)置為DOWN。不過自適應(yīng)的狀態(tài)值優(yōu)先級要低于使用接口設(shè)置的狀態(tài)值,因此當你想恢復(fù)自適應(yīng)的狀態(tài)調(diào)節(jié)的時候,記得將接口將overriddenServerStatus設(shè)置為空。
增加全局推送開關(guān)
支持了全局推送開關(guān),可以打開或者關(guān)閉服務(wù)變更的推送,調(diào)用接口如下:
curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=pushEnabled&value=false'
關(guān)閉推送后,客戶端依然會通過輪詢的方式來更新到數(shù)據(jù),只是更新的速度沒有推送那么快。
支持啟動時數(shù)據(jù)預(yù)熱
在老版本的Nacos中,只要Server啟動成功就會開始對外提供服務(wù),此時服務(wù)的數(shù)據(jù)并不一定完全加載完成,這樣可能會導(dǎo)致客戶端接收到的數(shù)據(jù)并不完整。1.0.0增加了數(shù)據(jù)預(yù)熱的邏輯,對于持久化數(shù)據(jù),則會等待所有數(shù)據(jù)從磁盤加載完成,對于臨時實例這樣的非持久化數(shù)據(jù),則會等待從其他Server拉取到完整數(shù)據(jù)。所有數(shù)據(jù)都準備好后,才會將Server狀態(tài)置為UP。
注意事項
對于臨時實例的預(yù)熱,實現(xiàn)機制是Server在啟動時會從其他Server節(jié)點拉取數(shù)據(jù),拉取成功則啟動成功,但是當從老版本Server升級到1.0.0時,由于這個拉取全量數(shù)據(jù)的接口在老版本Server不存在,那么第一個升級的機器將無法拉到任何數(shù)據(jù),從而后面升級的機器也無法從第一個升級的機器拉取到數(shù)據(jù)。此時建議使用調(diào)用API將Server的運行狀態(tài)設(shè)置為WRITE_ONLY,允許客戶端數(shù)據(jù)逐步匯聚補償上來,但是阻止任何查詢的流量,等集群數(shù)據(jù)準備好以后,再將這個運行狀態(tài)清空,集群自己調(diào)整運行狀態(tài),然后就會提供完整服務(wù)。
元數(shù)據(jù)編輯框優(yōu)化
此前的元數(shù)據(jù)編輯框需要用戶按照指定格式來編輯,容易出錯,如下圖所示:
1.0.0將會對服務(wù)頁面的元數(shù)據(jù)編輯框進行優(yōu)化,在調(diào)整編輯框大小的同時,增加語法高亮,方便用戶進行編輯和識別格式問題,一個大概的編輯框預(yù)覽圖如下:
支持MySQL 8.0
Nacos 1.0.0將支持MySQL 8.0驅(qū)動。
除了上面提到的變更,Nacos 1.0.0還進行了代碼的優(yōu)化和一些bug的修復(fù),完整的變更列表可以參考:https://github.com/alibaba/nacos/issues?q=is%3Aissue+milestone%3A1.0.0
大規(guī)模生產(chǎn)可用
API完整列表開放,模型設(shè)計和架構(gòu)設(shè)計文檔發(fā)布
服務(wù)發(fā)現(xiàn)和配置管理的完整API列表會發(fā)布到官網(wǎng),除了核心功能外,也包含部分運維接口,方便開發(fā)者進行集成:https://nacos.io/zh-cn/docs/open-API.html
同時對于Nacos的數(shù)據(jù)模型、集群模型、架構(gòu)設(shè)計及模塊設(shè)計文檔進行了更新:
https://nacos.io/zh-cn/docs/architecture.html
性能測試報告發(fā)布
Nacos 1.0.0進行了性能測試,針對服務(wù)發(fā)現(xiàn)和配置管理的讀寫能力進行了大規(guī)模場景的壓力測試。目前得到的測試數(shù)據(jù)是:
容量:服務(wù)實例數(shù)100萬+,配置數(shù)100萬+,支持客戶端連接100萬+;
讀寫TPS:1萬+;
節(jié)點擴展能力:100節(jié)點+;
推送能力:1萬客戶端訂閱同一配置/服務(wù),3秒內(nèi)收到變更通知比例99.9%;
目前壓測報告已經(jīng)更新到官網(wǎng):
https://nacos.io/zh-cn/docs/nacos-naming-benchmark.html
https://nacos.io/zh-cn/docs/nacos-config-benchmark.html
100+企業(yè)用戶已經(jīng)上生產(chǎn)
目前Nacos作為服務(wù)發(fā)現(xiàn)和配置中心已經(jīng)有100多個用戶的生產(chǎn)環(huán)境中服役,其中包含阿里巴巴、虎牙等企業(yè)已經(jīng)大規(guī)模應(yīng)用在核心業(yè)務(wù)場景中。
升級建議
Nacos 1.0.0 服務(wù)端個別接口與 0.8.0 以前的版本不兼容,0.8.0之前版本需要先升級到0.8.0,再升級到1.0.0。對客戶端而言,Nacos 1.0.0兼容0.5.0及以上的版本的客戶端訪問。
如何共建
為了實現(xiàn)這一目標,你需要積極參與Nacos社區(qū)。如果您在文檔中發(fā)現(xiàn)拼寫錯誤,在代碼中發(fā)現(xiàn)錯誤,或想要新功能或想要提供建議,您可以在GitHub上創(chuàng)建一個issues。
如果您想開始著手,可以選擇github倉庫中有以下標簽的issues。
good first issue:對于新手來說是非常好的入門issues。
contribution welcome:非常需要解決的問題和非常重要的模塊,但目前缺少貢獻者,歡迎貢獻者來貢獻。
轉(zhuǎn)載于:https://blog.51cto.com/14031893/2380315
新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎!定制產(chǎn)品紅包拿不停!總結(jié)
以上是生活随笔為你收集整理的Nacos 发布 1.0.0 GA 版本,可大规模投入到生产环境的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TypeError: CleanWebp
- 下一篇: eclipse安装maven插件