测试目的
通过控制变量法,使用压力测试工具直接对后端服务、网关代理请求到后端服务的场景进行压测,对比分析各网关性能差异。
测试方案
1)软件信息
2)被测接口
基本信息
👉请求地址:172.18.65.54:8980/ping
👉响应数据:静态HTML,减少可能造成压测性能影响的因素。
响应头部
响应体
3)网络拓扑结构
压测程序、网关程序、后端服务程序应部署在不同的服务器,避免同一服务器多个程序发生资源争抢。服务器均部署在同一个局域网中,服务器间使用内网IP进行通信,避免外部网络波动影响压测结果,具体拓扑结构图如下。
网关代理压测
4)硬件资源
5)性能调优
修改三台服务机器最大 TCP 连接数,提高服务器最高支持的并发数
1. 编辑 /etc/sysctl.conf
2. 修改net.ipv4.tcp_max_syn_backlog
配置为65535
3. 让配置生效
开始测试
在测试过程中,应遵循控制变量原则,避免程序资源争抢,当压测任一网关时,其余网关程序应当停止运行。
另外,我们需要关闭网关多余的 I/O
操作,比如请求日志打印,否则会造成数据的误差。为了尽可能模拟多个用户同时并发,避免触发连接 keep-alive
,保证每次请求的连接都是新创建的,因此,在进行发送请求时,需要携带请求头 Connection:Close
。
本文仅记录 100 并发、200 并发下,连续请求 5 分钟时各网关产品的表现情况。
Apinto
请求路径:http://172.18.65.76:8099/ping
100 并发下执行 1 分钟
👉执行命令
💡结果展示
200 并发下执行 1 分钟
👉执行命令
💡结果展示
Nginx
100并发下执行1分钟
请求路径:http://172.18.65.76:8999/ping
👉执行命令
💡结果展示
200并发下执行1分钟
👉执行命令
💡结果展示
Kong
请求路径:http://172.18.65.72:8000/ping
100并发下执行1分钟
👉执行命令
💡结果展示
200并发下执行1分钟
👉执行命令
💡结果展示
测试图表展示
QPS
横轴为并发数,纵轴为当前并发量时,各网关每秒能够处理的请求数。
错误数
横轴为并发数,纵轴为当前并发量时,各网关返回的非200、300状态码的错误响应数量。
请求耗时
横轴为并发数,纵轴为当前并发量时的请求耗时情况,单位:ms。
总结
Apinto 网关性能表现优异。相同环境下,Apinto 拥有比 Nginx 高 65% 左右的吞吐量表现,拥有极强的性能表现和优异的稳定性,99% 的请求都可以在 100ms 内转发完成,代理损耗极低。
Nginx 和 Kong 在 1000 并发时,开始出现了错误请求,相比之下,Apinto 即使在 1000 并发时,依然表现良好,稳定工作。