Nacos 釋出 1.0.0 GA 版本,可大規模投入到生產環境

芊寶寶發表於2019-04-17

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

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

Nacos演進歷程

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

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服務端,此時即使註冊例項的客戶端程式不在,這個例項也不會從服務端刪除,只會將健康狀態設為不健康。

Nacos 釋出 1.0.0 GA 版本,可大規模投入到生產環境


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

由於老版本客戶端註冊例項時不會上傳ephemeral欄位,需要在Nacos服務端設定一個預設的ephemeral值。Nacos 1.0.0裡ephemeral的預設值為true,即老版本客戶端預設註冊的是臨時例項。如果需要讓老客戶端註冊的例項型別是持久化例項,可以設定開關:

curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=defaultInstanceEphemeral&value=false'複製程式碼

注意事項

  1. 當從老版本Nacos升級到Nacos 1.0.0時,從磁碟載入的例項資料會被置為持久化例項。

註冊例項支援groupName欄位

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

namingService.registerInstance("nacos.test.1", "group1", instance);複製程式碼

不指定分組的介面依然是支援的,此時會在服務端為這個服務分配一個預設的分組:DEFAULT_GROUP。

增加了Server狀態的設定

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

Nacos 釋出 1.0.0 GA 版本,可大規模投入到生產環境


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

  • 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,允許客戶端資料逐步匯聚補償上來,但是阻止任何查詢的流量,等叢集資料準備好以後,再將這個執行狀態清空,叢集自己調整執行狀態,然後就會提供完整服務。

後設資料編輯框優化

此前的後設資料編輯框需要使用者按照指定格式來編輯,容易出錯,如下圖所示:

Nacos 釋出 1.0.0 GA 版本,可大規模投入到生產環境

1.0.0將會對服務頁面的後設資料編輯框進行優化,在調整編輯框大小的同時,增加語法高亮,方便使用者進行編輯和識別格式問題,一個大概的編輯框預覽圖如下:

Nacos 釋出 1.0.0 GA 版本,可大規模投入到生產環境

支援MySQL 8.0

Nacos 1.0.0將支援MySQL 8.0驅動。

除了上面提到的變更,Nacos 1.0.0還進行了程式碼的優化和一些bug的修復,完整的變更列表可以參考:github.com/alibaba/nac…

大規模生產可用

API完整列表開放,模型設計和架構設計文件釋出

服務發現和配置管理的完整API列表會發布到官網,除了核心功能外,也包含部分運維介面,方便開發者進行整合:nacos.io/zh-cn/docs/…
同時對於Nacos的資料模型、叢集模型、架構設計及模組設計文件進行了更新:
nacos.io/zh-cn/docs/…

效能測試報告發布

Nacos 1.0.0進行了效能測試,針對服務發現和配置管理的讀寫能力進行了大規模場景的壓力測試。目前得到的測試資料是:

  • 容量:服務例項數100萬+,配置數100萬+,支援客戶端連線100萬+;
  • 讀寫TPS:1萬+;
  • 節點擴充套件能力:100節點+;
  • 推送能力:1萬客戶端訂閱同一配置/服務,3秒內收到變更通知比例99.9%;

目前壓測報告已經更新到官網:
nacos.io/zh-cn/docs/…
nacos.io/zh-cn/docs/…

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:非常需要解決的問題和非常重要的模組,但目前缺少貢獻者,歡迎貢獻者來貢獻。

蓬勃發展的 Nacos 社群

DISS is cheap, show me your hand
比吐槽更重要的是搭把手,參與社群一起發展Nacos
  • 作為使用者關注和加入 Nacos 社群

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

qr.dingtalk.com/action/join… (二維碼自動識別)

作為程式碼貢獻者加入 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客戶端:PHPC#

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


Nacos 釋出 1.0.0 GA 版本,可大規模投入到生產環境

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

還不知道什麼是Nacos? 沒關係,在github上star一下跟程式猿兄弟打個招呼吧!!

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


Nacos 釋出 1.0.0 GA 版本,可大規模投入到生產環境


原文連結

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


相關文章