Nginx 裸機、虛擬機、K8S Ingress Controller 不同部署方式性能對比
Nginx 是一款輕量級的 Web 服務器、反向代理服務器,由於它的內存佔用少,啓動極快,併發能力強,在互聯網項目中廣泛應用。
用途一樣,部署方式不盡相同,有的企業數據敏感,Nginx 會運行在本地環境,這個時候可以選擇裸機或者虛擬機部署。但隨着公共雲呈爆炸式增長,這時企業也在採用混合雲,在公有云和本地(例如在私有數據中心)中運行工作負載。
公有云一般採用 Kubernetes,它可以輕鬆部署基於容器的應用程序。但是,在 Kubernetes 上運行的生產應用程序需要經過驗證的生產級應用程序交付解決方案。NGINX Ingress Controller 將值得信賴的 NGINX 開源和 NGINX Plus 軟件負載均衡器與自動化配置相結合,以確保 Kubernetes 集羣中的應用程序可靠、安全且高速地交付。
爲了確定滿足您的性能和擴展需求的最佳且最實惠的本地解決方案,我們提供了一個性能測試指標,用於比較不同環境中的 NGINX 性能。
測試方法
我們使用了兩種架構來衡量和比較 NGINX 在不同環境下的性能。對於每個架構,我們運行了單獨的測試集來衡量兩個關鍵指標,每秒請求數 (RPS) 和每秒 SSL/TLS 事務數 (TPS) 。
傳統的本地架構
NGINX 是兩種條件下的被測系統 (SUT):在裸機和虛擬機環境中運行。在這兩種情況下,四個 Ixia 客戶端生成請求,NGINX 負載均衡到四個 Ixia Web 服務器。Web 服務器響應每個請求返回一個 128 字節的文件。
我們使用以下軟件和硬件進行測試:
-
Ixia 客戶端和 Web 服務器使用 Axia Xcellon-Ultra™ XT80v2 應用上的 IxLoad 軟件進行部署。
-
對於這兩種情況下的 SUT,CentOS 7 是配備英特爾 NIC 的 PowerEdge 服務器上的操作系統。
-
虛擬機程序是 VMWare ESXi 7.0.0 版。
這是 nginx.conf 配置:https://gist.github.com/nginx-gists/b52ea661c2f205fa0d519d66fd65a34c
Kubernetes 架構
SUT 是運行在 Rancher Kubernetes Engine (RKE) 裸機平臺上的 NGINX Ingress Controller(基於 NGINX Open Source)。四個 Ixia 客戶端生成請求,NGINX Ingress Controller 將這些請求定向到後端 Kubernetes 部署,這是一個 Web 服務器,它返回一個 1KB 的文件以響應每個請求。
我們使用以下軟件和硬件進行測試:
-
使用 IxLoad 軟件部署在 Axia Xcellon-Ultra XT80v2 應用上的 Ixia 客戶端生成請求。不需要 Ixia Web 服務器,因爲我們是在 Kubernetes 環境中測試工作負載。
-
SUT 和託管後端應用程序的節點的操作系統都是 CentOS 7。SUT 和後端應用程序運行在 - 兩個帶有 Intel NIC 的獨立 PowerEdge 服務器節點上。
-
NGINX Ingress 版本是 1.11.0。
這是裸機 RKE 上部署 NGINX Ingress Controller 配置文件:https://gist.github.com/nginx-gists/b52ea661c2f205fa0d519d66fd65a34c
收集的指標
我們運行測試來收集兩個性能指標:
-
每秒請求數 (RPS) – NGINX 每秒可以處理的請求數,在固定時間段內的平均值。在這種情況下,Ixia 客戶端的請求使用了 http 方案。
-
SSL/TLS 每秒事務數 (TPS) – NGINX 每秒可以建立和服務的新 HTTPS 連接數。在這種情況下,Ixia 客戶端的請求使用了 https 方案。我們使用具有 2048 位密鑰大小的 RSA 算法 。
Ixia 客戶端發送了一系列 HTTPS 請求,每個請求都在一個新連接上。Ixia 客戶端和 NGINX 執行 TLS 握手以建立安全連接,然後 NGINX 將請求代理到後端,請求完成後連接關閉。
性能分析
表格報告了在傳統架構和 Kubernetes 架構中 NGINX 可用不同數量的 CPU 實現的 RPS 和 SSL TPS 數量。
傳統的本地架構
NGINX 在裸機上的性能呈線性增長,直到可用 CPU 數量達到 8 個。我們無法測試更多的內核,因爲當有 8 個或更多內核時,Ixia 客戶端無法生成足夠的請求來使 SUT 飽和(達到 100% CPU 利用率)。
我們發現,與裸機相比,虛擬化使性能下降了很小但可以衡量的程度。虛擬機程序中的 CPU 指令比裸機上的相同指令需要更多的時鐘週期,這會導致額外的開銷。
裸機和虛擬機對比
Kubernetes 架構
當我們將內核數量擴展到 8 個時,Kubernetes 中 NGINX Ingress Controller 的性能會線性增加。
將下表中的結果與傳統架構的結果進行比較,我們發現在 Kubernetes 中運行 NGINX(作爲 NGINX Ingress Controller)會顯着降低網絡綁定操作(如服務請求)的性能(以 RPS 衡量)。這是由於用於連接到其他服務的底層容器網絡堆棧。
另一方面,我們發現傳統環境和 Kubernetes 環境對於 CPU 密集型操作(如 SSL/TLS 握手(以 TPS 衡量))之間沒有性能差異——實際上,Kubernetes 中的 TPS 稍好一些。
此外,當我們啓用超線程 (HT) 時,我們看到 TPS 大約增加了 10%。
Kubernetes Nginx
結論
以下是一些關鍵要點,可幫助您瞭解您的工作負載最適合運行的環境,以及對所選環境的性能影響。
-
如果您的應用程序基礎設施正在執行網絡綁定操作(在我們的測試中以 RPS 衡量),那麼在傳統的裸機環境中運行 NGINX 是性能的最佳選擇。由於環境中使用的底層容器網絡堆棧,在 Kubernetes 中運行 NGINX Ingress Controller 會導致網絡綁定操作的性能成本最高。
-
虛擬機管理程序爲網絡和 CPU 密集型操作引入了少量但可衡量的性能成本(RPS 約爲裸機價值的 80%)。
-
如果您的應用程序基礎架構正在執行 CPU 密集型操作(在我們的測試中以 TPS 衡量),則 NGINX 在傳統環境和 Kubernetes 環境中幾乎沒有性能差異。
-
在我們的測試中,超線程將可並行化 CPU 密集型操作(如加密)的性能提高了大約 10%。
原文鏈接
-
https://www.nginx.com/blog/comparing-nginx-performance-bare-metal-and-virtual-environments/?utm_source=thenewstack&utm_medium=website&utm_campaign=platform#Metrics-Collected
-
https://www.nginx.com/resources/datasheets/nginx-ingress-controller-kubernetes/
-
https://www.nginx.com/blog/comparing-nginx-performance-bare-metal-and-virtual-environments/?utm_source=thenewstack&utm_medium=website&utm_campaign=platform#Metrics-Collected
-
https://gist.github.com/nginx-gists/b52ea661c2f205fa0d519d66fd65a34c
-
https://www.vmware.com/products/esxi-and-esx.html
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/Bs6zvS0q5HDfKmWciFsnjw