Nacos 2.0 正式發佈| 性能測試報告已出,請注意查收

Nacos 項目從 2008 年開始,開始在阿里巴巴內部孵化。近年來受 Eureka、Consul 等項目的影響,Nacos 越來越受歡迎。

目前 Nacos 支持主流微服務開發語言&主流服務框架和配置管理框架,比如支持 Duboo、SpringCloud、SCA,還對接了一些雲原生的組件如 coreDNS。

客戶端語言方面目前支持 Java/go/python 等主流語言,最近剛發佈的正式版本還支持 C# 和 C++。

最近 Nacos 大動作頻出,Nacos 2.X 版本迎來了首秀,在 1.X 的架構基礎上新增了對長連接模型的支持。通信層目前通過 grpc 實現了長連接 RPC 調用和推送能力,使用長鏈接大幅度減少了 1.x 輪詢心跳頻繁導致 JVM Full GC。

上一篇文章《支持 gRPC 長鏈接,深度解讀 Nacos 2.0 架構設計及新模型》,已經詳細介紹了長連接模型帶來的優勢,但並沒有詳細給出壓測數據,這一篇文章會詳細介紹各個場景下,Nacos 2.0 的性能優勢。

由於 Nacos 由服務發現和配置管理兩大模塊構成,業務模型略有差異,下面是一組具體壓測指標。

Nacos2.0 服務發現的性能提升

服務發現場景我們主要關注客戶端數,服務數實例數,及服務訂閱者數在大規模場景下,服務端在同步,推送及穩定狀態時的性能表現。同時還關注在有大量服務在進行上下線時,系統的性能表現。


容量及穩定性測試

該場景主要關注隨着服務規模和客戶端實例規模上漲,系統的性能表現情況。


可以看到 2.0.0 版本在 10W 級客戶端規模下,能夠穩定支撐,在達到穩定狀態後,CPU 的損耗非常低。雖然在最初的註冊階段,有瞬時的大量註冊和推送,存在一定的推送超時,但是由於重試機制的存在,可以保證最終的一致性。

反觀 1.X 版本,在 10W、5W 級客戶端下,服務端完全處於 Full GC 狀態,推送完全失敗,集羣不可用;在 2W 客戶端規模下,服務端運行狀態正常,但由於心跳處理不及時,大量服務反覆進行摘除和註冊,達不到穩定狀態,CPU 一直很高。1.2W 客戶端規模下,可以穩定運行,但穩態時 CPU 消耗是更大規模下 2.0 的 3 倍以上。

頻繁變更測試

該場景主要關注業務大規模發佈,服務頻繁推送條件下,不同版本的吞吐和失敗率。


頻繁變更時,2.0 和 1.X 在達到穩定狀態後,均能穩定支撐,其中 2.0 由於不再有瞬時的推送風暴,因此推送失敗率歸 0,而 1.X 的 UDP 推送的不穩定性導致了有極小部分推送出現了超時,需要重試推送。

Nacos2.0 配置管理的性能提升

配置是讀多寫少的場景,瓶頸主要在單臺監聽的客戶端數量以及配置的推送獲取上,因此配置管理的壓測,主要針對在單臺服務端的連接容量以及大量推送場景。


連接容量測試

該場景主要關注不同客戶端規模下的系統壓力。


Nacos2.0 最高單機能夠支撐 4.2w 個配置客戶端連接,在連接建立的階段,有大量訂閱請求需要處理,因此 CPU 消耗較高,但達到穩態後,CPU 的消耗會變得很低。幾乎沒有消耗。

反觀 Nacos1.X, 在客戶端 6000 時,穩定狀態的 CPU 一直很高,且 GC 頻繁,主要原因是長輪訓是通過 hold 請求來保持連接,每 30s 需要回一次 Response 並且重新發起連接和請求。需要做大量的上下文切換,同時還需要持有所有 Request 和 Response。當規模達到 1.2w 客戶端時,已經無法達到穩態,所以無法支撐這個量級的客戶端數。

頻繁推送測試

該場景關注不同推送規模下的系統表現。


在頻繁推送場景,兩個版本都存在 6000 個客戶端連接。明顯可以發現 2.0 版本的性能損耗要遠低於 1.X 版本。在 3000tps 的推送場景下,優化程度接近 3 倍。

Nacos2.0 性能結論

針對服務發現場景,Nacos2.0 能夠在 10W 級規模下,穩定運行;相比 Nacos1.X 版本的 1.2W 規模,提升約 10 倍。

針對配置管理場景,Nacos2.0 單機最高能夠支撐 4.2W 個客戶端連接;相比 Nacos1.X,提升了 7 倍。且推送時的性能明顯高於 1.X。


Nacos2.0 兼容性說明

服務發現

由於服務發現的數據模型發生了比較重大的改變,因此以下功能暫時未支持。

  • 查看當前集羣 leader(將廢棄)
  • 批量更新實例元數據(Beta,不支持)
  • 批量刪除實例元數據(Beta,不支持)

配置中心

  • 完全兼容 1.X 客戶端所有 API 接口方法
  • 完全實現 2.X 客戶端所有 API 接口方法
  • 完全兼容所有配置中心相關 openAPI

控制檯

  • 完全兼容配置中心相關頁面及功能
  • 完全兼容權限控制相關頁面及功能
  • 完全兼容命名空間相關頁面及功能
  • 完全兼容集羣管理相關頁面及功能
  • 完全兼容服務發現相關頁面及功能

Nacos 生態

隨着 Nacos 三年的發展,幾乎支持了所有的 RPC 框架和微服務生態,並且引領雲原生微服務生態發展。


Nacos 是整個微服務生態中非常核心的組件,它可以無縫和 K8s 服務發現體系互通,通過 MCP/XDS 協議與 Istio 通信,將 Nacos 服務下發 Sidecar;同樣也可以和 CoreDNS 聯合,將 Nacos 服務通過域名模式暴露給下游調用。

Nacos 目前已經和各類微服務 RPC 框架融合進行服務發現;另外可以協助高可用框架 Sentinel 進行各類管理規則的控制和下發。

如果只使用 RPC 框架,有時候並不足夠簡單,因爲部分 RPC 框架比如 gRPC 和 Thrift,還需要自行啓動 Server 並告知 client 該調用哪個 IP。這時候就需要和應用框架進行融合,比如 SCA、Dapr 等;當然也可以通過 Envoy Sidecar 來進行流量控制,應用層的RPC就不需要知道服務 的 IP 列表了。

最後,Nacos 還可以和各類微服務網關打通,實現接入層的分發和微服務調用。

Nacos 在阿里的實踐

目前 Nacos 已經完成了自研、開源、商業化三位一體的建設,阿里內部的釘釘、考拉、餓了麼、優酷等業務域已經全部採用雲產品 MSE 中的 Nacos 服務,並且與阿里和雲原生的技術棧無縫整合。下面我們以釘釘爲例簡單做一下介紹。


Nacos 運行在微服務引擎 MSE https://cn.aliyun.com/product/aliware/mse 上,MSE 提供了全託管的 Nacos 集羣,可以進行日常運維和多集羣管理等操作;業務的各類 Dubbo3 或 HSF 服務在啓動時,通過 Dubbo3 自身註冊到 Nacos 集羣中;然後 Nacos 通過 MCP 協議將服務信息同步到 Istio 和 Ingress-Envoy 網關。

用戶流量從北向進入集團的 VPC 網絡中,先通過一個統一接入 Ingress-Tengine 網關,他可以將域名解析並路由到不同的機房、單元等。本週我們也同步更新了 Tengine 2.3.3(https://github.com/alibaba/tengine/releases/tag/2.3.3)版本,內核升級到 Nginx Core 1.18.0 ,支持 Dubbo 協議 ,支持 DTLSv1 和 DTLSv1.2,支持 Prometheus 格式,從而提升阿里雲微服務生態完整性、安全性、可觀測性。

通過統一接入層網關後,用戶請求會通過 Ingress-Envoy 微服務網關,轉發到對應的微服務中,並進行調用。如果需要調用到其他網絡域的服務,會通過 Ingress-Envoy 微服務網關將流量導入到對應的 VPC 網絡中,從而打通不同安全域、網絡域和業務域的服務。微服務之間的相互調用,會通過 Envoy Sidecar 或傳統的微服務自訂閱的方式進行。最終,用戶請求在各個微服務的互相調用中,完成並返回給用戶。

Nacos 2.X 的規劃

Nacos2.X 將在 2.0 解決性能問題的基礎上,通過插件化實現新的功能並改造大量舊功能,使得 Nacos 能夠更方便,更易於拓展。


總結

Nacos2.0 作爲一個跨代版本,徹底解決了 Nacos1.X 的性能問題,將性能提升了 10 倍。並且通過抽象和分層讓架構更加簡單,通過插件化更好的擴展,讓 Nacos 能夠支持更多場景,融合更廣生態。相信 Nacos2.X 在後續版本迭代後,會更加易用,解決更多微服務問題,並向着 Mesh 化進行更深入地探索。

加入我們

Kirito 邀請你加入我們團隊,阿里雲招聘政策優化,放低了工作年限的要求,除原先的 P7 外,現在也開始大量招聘 P6 崗位,加入我們共建雲原生中間件。

阿里云云原生中間件團隊負責分佈式軟件基礎設施。在這裏,你會參與到全球最頂級的開源項目(如 Apache Dubbo、RocketMQ、Nacos、Arthas、Tengine、Istio、Envoy)和阿里雲核心商業化產品(微服務引擎 MSE、消息隊列 MQ、服務網格 ASM)的研發工作中,爲阿里雲上萬家企業提供如微服務引擎、服務網格、消息服務等分佈式基礎服務,加速企業上雲的進程和創新速度。同時,雲原生中間件團隊也服務着阿里集團衆多核心業務和場景,是支撐雙十一狂歡節的最核心團隊之一。

社招簡歷投遞:[email protected]

招聘諮詢微信:xiayimiaoshenghua

END -

「技術分享」某種程度上,是讓作者和讀者,不那麼孤獨的東西。歡迎關注我的微信公衆號:Kirito的技術分享」


本文分享自微信公衆號 - Kirito的技術分享(cnkirito)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章