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