簡介:?Nacos2.0 作為一個跨代版本,徹底解決了 Nacos1.X 的性能問題,將性能提升了 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化進行更深入地探索,
加入我們
歡迎在 Nacos github 上提交 Issue 與 PR 進行討論和貢獻,或加入Nacos社區群參與社區討論,也趁此機會感謝參與 Nacos 貢獻的 200+小伙伴! 感謝你們對中國開源事業的推動 !
除了參與開源,我們也歡迎更多有能力及有意愿的同學加入阿里云共建云原生,詳情請點擊職位鏈接,
原文鏈接:https://developer.aliyun.com/article/783139?
著作權宣告:本文內容由阿里云實名注冊用戶自發貢獻,著作權歸原作者所有,阿里云開發者社區不擁有其著作權,亦不承擔相應法律責任,具體規則請查看《阿里云開發者社區用戶服務協議》和《阿里云開發者社區知識產權保護指引》,如果您發現本社區中有涉嫌抄襲的內容,填寫侵權投訴表單進行舉報,一經查實,本社區將立刻洗掉涉嫌侵權內容,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/275400.html
標籤:AI
上一篇:Go語言“十誡”[譯]
