Nacos 2.0 通過更新通信協定和架構、資料模型的方式将性能提升了約 10 倍,解決繼 Nacos 1.0 釋出逐漸暴露的性能問題。本文通過壓測 Nacos 1.0,Nacos 1.0 更新 Nacos 2.0 過程中,Nacos 2.0 進行全面性能對比,直覺的展示 Nacos 2.0 所帶來的性能提升。
壓測準備
環境準備
為了友善 Nacos 部署更新和展示核心性能名額,我們是從阿裡雲微服務引擎 MSE(https://cn.aliyun.com/product/aliware/mse)中購買的一個 2 核 CPU+4G 記憶體的三節點 Nacos 叢集。
壓測模型
為了展示不同規模下的系統表現,我們采用逐漸增壓的方式進行壓測,将壓力分為 3個批次進行逐漸啟動,并觀察每個批次下叢集的運作表現。同時會在壓力叢集之外,再增加一個 Dubbo 服務的 Demo ,并使用 Jmeter 以 100 TPS 的壓力不停的調用,以模拟不同壓力下,對實際業務調用存在的可能影響。
壓測過程中,會在适當的時候對服務端和用戶端進行更新;服務端的更新将直接使用 MSE 提供的一鍵更新功能,用戶端的更新會使用分批次輪流重新開機的方式進行。
壓測過程
Nacos1.X Server + Nacos1.X Client
首先啟動第一批施壓叢集,對 MSE Nacos1.2.1 進行施壓,在 6000 個 Providers 的壓力下,叢集穩定時 CPU 大約 25% ,能夠穩定保持 6000 執行個體。
随後啟動第二批施壓叢集,增加 4000 個 Provider ,合集 10000 個 Provider 。此時叢集峰值 CPU 已經達到 60% ,穩定運作時大約在 45% 左右,叢集能夠穩定運作。
在前兩批的壓力下,叢集沒有出現穩定性問題,是以 Dubbo 的調用保持正常,沒有錯誤發生。
當第三批施壓叢集啟動之後,壓力總計 14000 個 Provider 。此時叢集先是短暫的注冊到 13000 個執行個體,之後很快出現執行個體數下跌,CPU 跑滿的問題。并且縮小時間範圍可以看到,下跌後的執行個體仍然在小範圍抖動。
同時 Dubbo 的調用出現錯誤,從 Consumer 的日志可以看出,是由于服務端無法支撐這個級别的壓力,導緻 Dubbo Provider 被摘除,是以調用的時候出現了 No provider 的錯誤。
Nacos2.X Server + Nacos1.X Client
由于服務端更新期間,會進行執行個體的雙寫操作,是以在更新過程中服務端存儲的執行個體數會是實際執行個體值的兩倍。根據上述測試結果,需要先将執行個體數復原回第一批 6000 執行個體之後,或是更新配置擴容機器之後再嘗試更新。本文使用復原壓力的方式,先停止後啟動的施壓叢集。讓叢集恢複正常後再執行更新。
從監控圖中可以看出,在停止後兩批壓力後,叢集很快就恢複到了正常,運作穩定,Dubbo 調用也恢複正常。之後使用 MSE 的更新功能,進行更新。更新過程中由于雙寫的性能損耗,導緻 CPU 有較大的抖動;而且因為雙寫導緻的執行個體數翻倍,實際上相當于 12000 執行個體的極限壓力,服務端仍然有一定的抖動,是以導緻了些許 Dubbo 的錯誤。若是在非極限壓力下更新,将不會有此影響。
随着服務端更新完成停止雙寫,消除了雙寫帶來的性能損耗,CPU 使用降低并趨于穩定,同時執行個體數也不再抖動,Dubbo 調用完全恢複;如同 1.X 服務端一樣,分兩個批次啟動施壓叢集,對比兩個版本間在相同壓力下的性能表現。
由于用戶端依舊使用的是 1.X 的用戶端,服務端的使用水位依然非常高,在全部壓力啟動後,CPU 幾乎達到 100% ;雖然沒有像 1.X 服務端一樣,出現大規模執行個體下跌,但是運作一段時間後依舊有少量的執行個體抖動,說明僅更新 Nacos 服務端到 2.0 版本能有一定的改善,但是沒有徹底解決性能問題。
Nacos2.X Server + Nacos2.X Client
為了完全釋放 Nacos 2.0 的性能,還需要将施壓叢集的用戶端也更新到 2.0 以上版本。同樣将分 3 個批次進行替換,期間由于 Provider 進行了重新開機,服務端有出現執行個體的下跌再恢複屬于正常現象。随着施壓叢集的更新,可以發現 CPU 有了非常明顯的下降,最終達到穩定時,CPU 由最初的接近 100% ,降低到 20%,叢集穩定運作 14000 個執行個體。
壓測結果
如上所述,我們能夠得到 2 核 CPU+4G 記憶體的三節點叢集在不同版本下的性能差異:
服務端版本 | 用戶端版本 | 壓力規模 | 叢集穩定性 | CPU使用 |
Nacos1.X | Nacos1.X | 14000 | 完全不穩定 | 100% |
Nacos2.X(更新中) | Nacos1.X | 6000 | 有一定抖動 | 100% |
Nacos2.X | Nacos1.X | 14000 | 有一定抖動 | 100% |
Nacos2.X | Nacos2.X | 14000 | 穩定 | 20% |
由此可見,Nacos 2.0 确實對性能有較大的提升,新使用者建議直接全部采用 Nacos 2.0,老使用者建議先更新 Server 端,然後在逐漸更新用戶端釋放紅利。最後從整個壓測視角的監控,來直覺的感受一下不同版本在不同階段的性能表現: