開發與維運

重磅發佈:微服務引擎 MSE 專業版

微服務引擎 MSE 專業版發佈,支持 Nacos 2.0 ,相比基礎版,專業版具有更高的 SLA 保障,性能提升十倍,99.95%可用性,配置能力進一步增強,新用戶首購8折,點擊查看詳情,瞭解更多相關信息。

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

Nacos 簡介

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

Introduction.jpg

Nacos 2.0 架構

全新2.0 架構不僅將性能大幅提升10倍,而且內核進行了分層抽象,並且實現插件擴展機制。

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

  • 通信層統一到gRPC協議,同時完善了客戶端和服務端的流量控制和負載均衡能力,提升的整體吞吐。
  • 將存儲和一致性模型做了充分抽象分層,架構更簡單清晰,代碼更加健壯,性能更加強悍。
  • 設計了可拓展的接口,提升了集成能力,如讓用戶擴展實現各自的安全機制。

architecture.jpg

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

Nacos2架構下的服務發現,客戶端通過Grpc,發起註冊服務或訂閱服務的請求。服務端使用Client對象來記錄該客戶端使用Grpc連接發佈了哪些服務,又訂閱了哪些服務,並將該Client進行服務間同步。由於實際的使用習慣是服務到客戶端的映射,即服務下有哪些客戶端實例;因此2.0的服務端會通過構建索引和元數據,快速生成類似1.X中的Service信息,並將Service的數據通過Grpc Stream進行推送。

naming.jpg

Nacos2.0 配置管理升級通信機制

配置管理之前用Http1.1的Keep Alive模式30s發一個心跳模擬長鏈接,協議難以理解,內存消耗大,推送性能弱,因此2.0通過gRPC徹底解決這些問題,內存消耗大量降低。

config.jpg

Nacos2.0 架構優勢

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

advantages.jpg

Nacos2.0 性能提升

由於Nacos由服務發現和配置管理兩大模塊構成,業務模型略有差異,因此我們下面分別介紹一下具體壓測指標。

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

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

naming-performance-case.jpg

容量及穩定狀態測試

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

naming-performance-result1.jpg

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

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

頻繁變更測試

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

naming-performance-result2.jpg

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

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

由於配置是少寫多讀場景,所以瓶頸主要在單臺監聽的客戶端數量以及配置的推送獲取上,因此配置管理的壓測性能主要集中於單臺服務端的連接數量以及大量推送的比較。

config-performance-case.jpg

Nacos2.0 連接容量測試

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

config-performance-result1.jpg

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

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

Nacos2.0 頻繁推送測試

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

config-performance-result2.jpg

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

performance-result.jpg

Nacos生態及2.X後續規劃

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

ecology.jpg

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服務,並且將阿里和雲原生的技術棧無縫整合。 下面我們以釘釘為例簡單做一下介紹。

ecology-ali.jpg

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能夠更方便,更易於拓展。

plan.jpg

總結

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


Leave a Reply

Your email address will not be published. Required fields are marked *