点赞
评论
收藏
分享
举报
比较裸机和虚拟环境中的 NGINX 性能
发表于2022-04-14 12:43

浏览 1.3k

原文作者:Amir Rawdat of F5
原文链接:比较裸机和虚拟环境中的 NGINX 性能 - NGINX
转载来源:NGINX 官方网站

由于新冠疫情爆发,公有云的采用呈爆炸式增长的同时,企业也正积极拥抱混合云,即在公有云和本地(比如私有数据中心)同时运行工作负载。  

这一混合方案使企业能够在最能满足其需求的环境中部署工作负载。例如,企业可以在本地环境中部署具有高度敏感数据的任务关键型工作负载,同时利用公有云运行仅需对核心网络基础架构进行有限访问的 Web 托管和边缘服务(如物联网)等工作负载。

当在本地运行工作负载时,您可以进一步选择是在裸机环境还是在虚拟(管理程序)环境中运行。为了帮助您确定最出色、最经济的本地解决方案来满足您对性能和扩展性的需求,我们提供了一份选型指南,比较了 NGINX 在这两种环境中的性能。

本文介绍了如何测试 NGINX 以得出选型指南中发布的数值。由于许多客户也将应用部署至 Kubernetes,因此我们还在 Rancher Kubernetes Engine (RKE) 平台上分步测试了 NGINX Ingress Controller,并阐述了(在我们“解决方案简介”中所述的)测试结果与在传统本地架构中运行的 NGINX 相比有何不同。


测试方法

我们使用两种架构来测量和比较 NGINX 在不同环境中的性能。我们在每种架构中运行一系列不同的测试,以测量两个关键指标:每秒请求数 (RPS) 和每秒 SSL/TLS 事务数 (TPS) — 有关详细信息,请参阅下方“收集的指标”一节。

传统本地架构

NGINX 作为被测系统 (SUT) 在以下两种条件下进行了测试:运行于裸机和虚拟管理程序环境下。在这两种条件下,四个 Ixia 客户端都生成了请求,并通过 NGINX 负载均衡到四台 Ixia Web 服务器。这些 Web 服务器在响应每个请求时各返回了一个 128 字节文件。

我们使用以下软硬件进行了测试:

  • 使用 Axia Xcellon-Ultra™ XT80v2 应用刀片机上的 IxLoad 软件对 Ixia 客户端和 Web 服务器进行了部署。
  • 对于这两种条件下的 SUT,PowerEdge 服务器上运行的操作系统是采用英特尔网卡的 CentOS 7。
  • 虚拟管理程序为 VMWare ESXi 7.0.0 版。
下载用于在测试环境中部署 NGINX 的 NGINX 配置文件

Kubernetes 架构

SUT 是运行于 Rancher Kubernetes Engine (RKE) 裸机平台之上的 NGINX Ingress Controller(基于 NGINX 开源版)。四个 Ixia 客户端生成请求后,NGINX Ingress Controller 将其定向到后端 Kubernetes 部署 — 这台 Web 服务器在响应每个请求时各返回了一个 1-KB 文件。

我们使用以下软硬件进行了测试:  

  • 部署在装有 IxLoad 软件的 Axia Xcellon-Ultra XT80v2 应用刀片机上的 Ixia 客户端生成了请求。因为我们在 Kubernetes 环境中测试工作负载,所以无需使用 Ixia Web 服务器。
  • 对于 SUT 和托管后端应用的节点,二者操作系统均为 CentOS 7。SUT 和后端应用在采用英特尔网卡的两个不同的 PowerEdge 服务器节点上运行。
  • NGINX Ingress Controller 版本为 1.11.0。
下载用于在裸机 RKE 上部署 NGINX Ingress Controller 的YAML 文件


收集的指标

我们运行了测试来收集两项性能指标:
  • 每秒请求数 (RPS) — NGINX 每秒可处理的请求数(取固定时间段内平均值)。在这种情况下,来自 Ixia 客户端的请求使用的是 https 协议。
  • 每秒 SSL/TLS 事务数 (TPS) — NGINX 每秒可建立和支持的新 HTTPS 连接数。在这种情况下,来自 Ixia 客户端的请求使用的是 https 协议。我们使用了 2048 位 RSA 密钥加密和完全向前保密(PFS)。
Ixia 客户端通过新连接发送一系列 HTTPS 请求。Ixia 客户端和 NGINX 执行 TLS 握手以建立安全连接,然后 NGINX 将请求代理到后端。请求得到满足后连接关闭。


性能分析

下一部分中的表格提供了在传统架构和 Kubernetes 架构中搭载不同数量 CPU 的 NGINX 所实现的 RPS 和 SSL TPS 数量。

传统本地架构

NGINX 在裸机上的性能呈线性增长,直到可用 CPU 数量达到八个。我们无法测试更多数量的内核,因为当配备 8 个或更多内核时,Ixia 客户端无法生成足够的请求来让 SUT 达到饱和(CPU 利用率达到 100%)。

硬件成本
CPU 内核数
RPS –
裸机
RPS –
管理程序
SSL TPS –
裸机
SSL TPS –
管理程序
750 美元
1
48,000
40,000
800
750
750 美元
2
94,000
75,000
1,600
1,450
1,300 美元
4
192,000
132,000
3,200
2,900
2,200 美元
8
300,000
280,000
5,200
5,100
我们发现,与裸机相比,虚拟环境使性能稍有下降,但仍是可以明显看到的。较之裸机,在虚拟管理程序中运行 CPU 指令需要更多的时钟周期,这将产生额外的开销。

Kubernetes 架构

当我们将内核数量扩展到八个时,Kubernetes 中 NGINX Ingress Controller 的性能呈线性增长。

通过将下表中的结果与传统架构的结果进行比较,我们发现,在 Kubernetes 中运行 NGINX(相当于 NGINX Ingress Controller)会大大降低服务请求等网络限制型操作(以 RPS 衡量)的性能。这是由于用于连接其他服务的底层容器网络堆栈所致。

另一方面,我们发现,对于 SSL/TLS 握手等 CPU 密集型操作(以 TPS 衡量),NGINX 在传统环境和 Kubernetes 环境中的性能无甚差异(实际上,Kubernetes 中的 TPS 略胜一筹)。

此外,当我们启用超线程 (HT) 时,TPS 大约增加了 10%。
内核数RPSSSL TPS (RSA)SSL TPS RSA (采用超线程)硬件成本
124,0009001,000$750
248,0001,7501,950$750
495,0003,5003,870$1,300
8190,0007,0007,800$2,200


结语

以下关键要点可帮助您了解工作负载的最佳运行环境,以及所选环境的性能影响。
  • 如果您的应用基础架构正执行网络密集型操作(在我们的测试中以 RPS 衡量),则在传统裸机环境中运行 NGINX 可实现最佳性能。由于 Kubernetes 环境中使用的底层容器网络堆栈,因此在 Kubernetes 中运行 NGINX Ingress Controller 会导致这种网络密集型操作的性能大幅下降。
  • 虚拟管理程序会使网络密集型和CPU密集型操作的性能稍有下降,但仍是可以明显看到的(RPS 约为裸机值的 80%)。
  • 如果您的应用基础架构正执行 CPU 密集型操作(在我们的测试中以 TPS 衡量),则 NGINX 在传统环境和 Kubernetes 环境中的性能几乎无甚差异。
  • 在我们的测试中,对于加密等可并行化的 CPU 密集型操作,超线程将性能提高了大约 10%。
希望复制我们的测试过程或者在您的环境中试用 NGINX 和 NGINX Ingress Controller 吗?

下载 NGINX 开源版


更多资源

想要更及时全面地获取NGINX相关的技术干货、互动问答、系列课程、活动资源?

请前往NGINX开源社区:


已修改于2023-03-08 02:15
本作品系原创
创作不易,留下一份鼓励
NGINX官方账号

暂无个人介绍

关注



写下您的评论
发表评论
全部评论(0)

按点赞数排序

按时间排序

关于作者
NGINX官方账号
这家伙很懒还未留下介绍~
239
文章
21
问答
198
粉丝
相关文章
介绍nginx网页配置工具QQ技术交流群1:1106758598QQ技术交流群2:560797506邮箱: cym1102@qq.com官网地址: http://www.nginxwebui.cn码云: https://gitee.com/cym1102/nginxWebUIgithub: https://github.com/cym1102/nginxWebUI功能特点nginxWebUI也可管理多个nginx服务器集群,随时一键切换到对应服务器上进行nginx配置,也可以一键将某台服务器配置同步到其他服务器,方便集群管理.部署此项目后,配置nginx再也不用上网各种搜索配置代码,再也不用手动申请和配置ssl证书,只需要在本项目中进行增删改查就可方便的配置和启动nginx。技术说明本项目是基于springBoot的web系统,数据库使用sqlite,因此服务器上不需要安装任何数据库项目启动时会释放一个.sqlite.db到系统用户文件夹中,注意进行备份本系统通过Let'sencrypt申请证书,使用acme.sh脚本
点赞 6
浏览 6.4k
  前三周学习了陶辉老师的“NGINX基础培训系列课程”,感觉受益良多,在这里想把一些知识点记录一下,和大家分享一下知识点,也方便日后的随手查看,温故知新。  首先,我们了解到了Nginx的版本,Nginx发布版本分为主线版本和稳定版本,区分两个版本也非常简单,主线版本版本号为单数,比如1.19,稳定版本为双数,比如1.18,今天我要说的是稳定版本,这个版本会尽量少的减少Nginx的bug问题,适用于生产环境,这里我不建议使用Nginx和其他软件一样在生产环境中落后一个或多个大版本使用,之前生产环境做过漏扫,发现我们编译自带的Nginx版本为:nginx/1.13.3(查询命令为nginx-V),结果出现了多个漏洞,四个高危和一个中危漏洞:        通过升级Nginx到稳定版最新版本后修复!  其次,是Nginx发行版本的选择,目前比较流行的有:nginx、nginxplus、Tengine、openresty、ope
点赞 1
浏览 3.4k
感谢您参加“NGINX从入门到精通进阶系列培训”!以下为培训的问答、课件和录像,希望您能通过此培训学有所得,祝学习进步!>问与答:- 基础篇+高级篇 - 应用篇+实战篇(New)>课件(PPT):基础篇:-NGINX概要、安装、配置:https://interact.f5.com/rs/653-SMC-783/images/CNFEB22-NginxCoreCourse-Setup.pdf-NGINX日志、运维:https://interact.f5.com/rs/653-SMC-783/images/cnfeb22-nginxcorecourse-maintenance.pdf高级篇:-NGINX变量、API:https://interact.f5.com/rs/653-SMC-783/images/CNFEB22-NginxCoreCourse-API.pdf-NGINXSSL、NJS:https://interact.f5.com/rs/653-SMC-783/images/CNFEB22-NginxCoreCourse-SSL.pdf
点赞 10
浏览 4.9k