据 W3Techs 统计,截至 2022 年 6 月,NGINX 是全球使用最广泛的 Web 服务器,占据了全球网站 33.6% 的份额。它在全球范围内被广泛采用,许多用户对 NGINX 的性能表现深表信赖,常将其用作性能对比的基准。
实测结果
在实际测试中,我们对 APISIX 和 NGINX 在一个简单场景下的性能进行了比较,结果如下:
APISIX 单 CPU 核心的 QPS(每秒查询次数)达到了 58,080;相比之下,NGINX 单 CPU 核心 QPS 仅为 37,154。
APISIX 的性能相较于 NGINX 提高了 56%。
测试配置 & 压测结果
APISIX | NGINX | |
---|---|---|
单核心 QPS | 58080 | 37151 |
压测 | ||
主要配置 | routes: - uri: /hello upstream: nodes: "127.0.0.1:1980": 1 #END | http { access_log off; server { listen 1990; location / { proxy_pass http://127.0.0.1:1980; } } } |
硬件资源 | CPU 1 CORE,内存 4G | CPU 1 CORE,内存 4G |
CPU 使用率 | 100% | 100% |
测试环境:
主机 M1 Macbook Pro
操作系统 Debian
感兴趣的朋友不妨亲自动手实践下,该测试结果是比较容易复现的。
技术思考
APISIX 和 NGINX 性能对比
APISIX 的性能不应该超过 NGINX。从 APISIX 官方公布的软件架构图可以得知,合理的预期是 APISIX 的性能应该低于 NGINX。然而,“事出反常必有妖”,让我们一起探讨在进行 NGINX 压力测试时可能会遇到的一些异常情况。
结论是:APISIX 的性能结果符合预期,NGINX 的性能结果也符合预期。然而,需要注意的是,APISIX 的测试场景是在长连接下进行的,而 NGINX 的测试场景则是在短连接下进行的,因此在 QPS 表现上的差异是合理的。长连接通常用于需要持续通信的场景,例如实时聊天或持续数据传输。短连接则适用于临时性通信需求,例如HTTP请求响应模式中的普通网页访问。
以下是 NGINX 的合理配置示例。使用此配置,您将发现 NGINX 在单核性能上有显著的改善,通常至少会提升一倍。
为什么 NGINX 默认使用短连接
NGINX,作为一款于 2004 年诞生的开源项目,如今已经走过了将近 20 年的历程,堪称开源软件领域的一位老前辈。为了确保用户能够持续获得一致的体验并实现不断迭代,NGINX 一直致力于向前兼容的功能迭代。因此,它是少数几个默认采用 HTTP 1.0 协议的 Web 代理服务之一。这一决策已经延续了十多年,预计未来 NGINX 可能会永远保持这一默认设置。
在微服务、云原生和人工智能信息蓬勃发展的时代,工程师更加期望选择一款可靠、省心的软件,能够立即投入使用。他们更希望默认配置就是生产环境中的最佳实践。因此,如今的开源软件更倾向于抛弃历史包袱,专注于高效解决问题。