NGINX 压测方案

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: NGINX 压测方案

一 拓扑和硬件

1.1 拓扑

所有测试均使用三个独立的机器完成,这几台机器通过双 40 GbE 链路连接在一个简单,平坦的 2 层网络中. (下图软件版本有更新)

用于 NGINX 性能测试的标准端到端拓扑结构

为了从客户端机器生成流量,我们使用了 wrk —— 类似于ab(ApacheBench)的性能测试工具。所有流量都被定向到 NGINX 反向代理服务器,后者将连接转发到 Web 服务器后端。

1.2 硬件

机器 CPU 网络 内存
客户端 16 real cores(非超线程) 16GB
反向代理服务器 16 real cores(非超线程) 16GB
应用服务器 16 real cores(非超线程) 16GB

二 使用的软件

  • wrk 在客户端计算机上运行 4.0.0 版生成了 NGINX 代理的流量。我们按照这些 说明 安装了它。

三 测试方法

测试了 NGINX 作为具有不同 CPU 数量的反向代理服务器的性能。一个 NGINX worker 进程消耗一个 CPU,因此为了测量不同数量的 CPU 的性能,我们改变了 NGINX worker 进程的数量,用两个, 四个,八个等等 worker 进程重复测试。

ℹ️注意

要手动设置 NGINX worker进程数,请使用 worker_processes 指令。默认值为 auto

四 性能指标

测量以下性能指标:

  • 每秒请求数(RPS) - 衡量处理 HTTP 请求的能力。在测试中,每个客户端通过 keepalive 连接发送 1 KB 大小文件的请求。反向代理服务器处理每个请求,并通过另一个 keepalive 连接将其转发到 Web 服务器。
  • 每秒 SSL/TLS 事务数(TPS) - 衡量处理新 SSL / TLS 连接的能力。在测试中,每个客户端都会发送一系列 HTTPS 请求,每个请求都在一个新连接上。反向代理服务器解析请求并通过已建立的 keepalive 连接将它们转发到 Web 服务器。Web 服务器为每个请求发回 0 字节的响应。
  • 吞吐量 - 测量 NGINX 在通过 HTTP 提供 1 MB 文件时可以承受的吞吐量。

📑引用

NGINX 关键性能指标

五 运行测试

要生成所有客户端流量,我们使用 wrk 工具的以下选项:

  • -c 选项指定要创建的 TCP 连接数。对于我们的测试,我们将其设置为 50 个连接。
  • -d 选项指定生成流量的时间。我们每次运行测试 3 分钟。
  • -t 选项指定要创建的线程数。我们指定了一个线程。

通过 taskset 指令, 充分使用每个 CPU ,可以将单个 wrk 进程固定到 CPU。与增加 wrk 线程数相比,此方法产生更一致的结果。

5.1 每秒请求数 (Requests Per Second)

为了测量每秒请求数(RPS),运行以下脚本:

for i in `seq 1 number-of-CPUs`; do
    taskset -c $i wrk -t 1 -c 50 -d 180s http://Reverse-Proxy-Server-IP-address/1kb.bin
done
BASH

该测试每个 CPU 产生了 wrk 的一个副本。每个副本创建 50 个 TCP 连接,并在其上连续请求 1 KB 文件 3 分钟(180 秒)。

5.2 每秒 SSL/TLS 事务数

为了测量每秒 SSL/TLS 事务(TLS),我们运行了以下脚本:

for i in `seq 1 number-of-CPUs`; do
    taskset -c $i wrk -t 1 -c 50 -d 180s -H 'Connection: close' https://Reverse-Proxy-Server-IP-address/0kb.bin
done
BASH

该测试使用和先前的测试相同的 -c-d-t值,但有两个显着的不同,因为本次焦点在于 SSL/TLS 连接的处理:

  • 客户端为每个请求打开和关闭连接(-H 选项设置 Connection: close HTTP 标头)。
  • 请求的文件是 0 字节而不是 1 KB 的大小。

5.3 吞吐量

为了测量吞吐量,我们运行了以下脚本:

for i in `seq 1 number-of-CPUs`; do
    taskset -c $i wrk -t 1 -c 50 -d 180s http://Reverse-Proxy-Server-IP-address/1mb.bin
done
BASH

与第一个测试的唯一区别是文件更大, 大小为 1 MB。我们发现使用 10 MB 的较大文件大小并未提高整体吞吐量。

在 Linux 上安装 wrk

wrk 需要 openssl dev 包和 gcc/dev 堆栈。

以下是关于如何在 Linux 上安装 wrk 的简要说明。

CentOS/RedHat/Fedora

sudo yum groupinstall 'Development Tools'
sudo yum install -y openssl-devel git 
git clone https://github.com/wg/wrk.git wrk
cd wrk
make
#将可执行文件移动到 PATH 中的某个位置
sudo cp wrk /somewhere/in/your/PATH
BASH

安装构建工具,openssl dev libs(包括头文件)和 git。然后使用 git 下载 wrk 并构建。

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
相关文章
|
6月前
|
监控 物联网 应用服务中间件
流媒体方案之Nginx——实现物联网视频监控项目
流媒体方案之Nginx——实现物联网视频监控项目
流媒体方案之Nginx——实现物联网视频监控项目
|
3月前
|
消息中间件 负载均衡 应用服务中间件
高并发环境下的Nginx整合方案
【8月更文挑战第20天】在高并发环境下,整合Nginx代理服务器、静态文件服务器、Tomcat集群、Mycat数据库读写分离和消息队列,可以构建一个强大、灵活且可扩展的Web服务架构。
47 1
|
6月前
|
前端开发 Java 应用服务中间件
Springboot解决跨域问题方案总结(包括Nginx,Gateway网关等)
Springboot解决跨域问题方案总结(包括Nginx,Gateway网关等)
|
运维 测试技术
千万级乘客排队系统重构&压测方案——总结篇
千万级乘客排队系统重构&压测方案——总结篇
176 1
|
应用服务中间件 测试技术 Linux
Nginx 实战系列之一:Nginx 压测方法论和性能指标
Nginx 实战系列之一:Nginx 压测方法论和性能指标
|
监控 安全 Java
全链路压测(2):方案调研和项目立项
一般来说,像生产全链路压测这种复杂的需要多个技术团队参与的复杂技术项目,在企业内部都会有一个项目申报和评估立项的过程。
全链路压测(2):方案调研和项目立项
|
存储 算法 中间件
nginx限流方案
nginx限流方案
368 0
全链路压测常态化方案
压测任务正式开始前,设定并检查压测的SLA阈值,确保压测流量不会导致生产服务负载过高出现异常;
全链路压测常态化方案
|
域名解析 缓存 监控
性能测试 性能测试方案设计思路总结
性能测试 性能测试方案设计思路总结
367 0
|
测试技术
《超大规模性能测试的云端方案及案例分享》电子版地址
超大规模性能测试的云端方案及案例分享
56 0
《超大规模性能测试的云端方案及案例分享》电子版地址