重磅官宣:Nacos2.0釋出,效能提升10倍

繼 Nacos 1。0 釋出以來,Nacos 迅速被成千上萬家企業採用,並構建起強大的生態。 但是隨著使用者深入使用,逐漸暴露一些效能問題,因此我們啟動了 Nacos 2。0 的隔代產品設計,時隔半年我們終於將其全部實現,實測效能提升10倍,相信能滿足所有使用者的效能需求。下面由我代表社群為大家介紹一下這款跨代產品。

Nacos 簡介

Nacos 是一個更易於構建雲原生應用的動態服務發現、配置管理和服務管理平臺。它 孵化於 阿里巴巴,成長於十年雙十一的洪峰考驗,沉澱了簡單易用、穩定可靠、效能卓越的核心競爭力。

Nacos 2。0 架構

全新2。0 架構不僅將效能大幅提升10倍,而且核心進行了分層抽象,並且實現外掛擴充套件機制。

Nacos 2。0 架構層次如下圖,它相比Nacos1。X的最主要變化是:

通訊層統一到gRPC協議,同時完善了客戶端和服務端的流量控制和負載均衡能力,提升的整體吞吐。

將儲存和一致性模型做了充分抽象分層,架構更簡單清晰,程式碼更加健壯,效能更加強悍。

設計了可拓展的介面,提升了整合能力,如讓使用者擴充套件實現各自的安全機制。

Nacos2。0 服務發現升級一致性模型

Nacos2架構下的服務發現,客戶端透過Grpc,發起註冊服務或訂閱服務的請求。服務端使用Client物件來記錄該客戶端使用Grpc連線釋出了哪些服務,又訂閱了哪些服務,並將該Client進行服務間同步。由於實際的使用習慣是服務到客戶端的對映,即服務下有哪些客戶端例項;因此2。0的服務端會透過構建索引和元資料,快速生成類似1。X中的Service資訊,並將Service的資料透過Grpc Stream進行推送。

Nacos2。0 配置管理升級通訊機制

配置管理之前用Http1。1的Keep Alive模式30s發一個心跳模擬長連結,協議難以理解,記憶體消耗大,推送效能弱,因此2。0透過gRPC徹底解決這些問題,記憶體消耗大量降低。

Nacos2。0 架構優勢

Nacos2。0大幅降低了資源消耗,提升吞吐效能,最佳化客戶端和服務端互動,對使用者更加友好;雖然可觀測性略微下降,但是整體價效比非常高。

Nacos2。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 連線容量測試

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

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

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

Nacos2。0 頻繁推送測試

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

在頻繁變更的場景,兩個版本都處於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。

Nacos生態及2。X後續規劃

隨著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(全託管的Nacos叢集) 上,進行維護和多叢集管理;業務的各類Dubbo3或HSF服務在啟動時透過Dubbo3自身註冊到Nacos叢集中;然後Nacos透過MCP協議將服務資訊同步到Istio和Ingress-Envoy閘道器。

使用者流量從北向進入集團的VPC網路中,先透過一個統一接入Ingress-Tengine閘道器,他可以將域名解析並路由到不同的機房,單元等。本週我們也同步更新了 Tengine 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化進行更深入地探索。

相關文章