前言
在今天快速变化的技术环境中,选择合适的框架来开发API非常重要,对于确保最佳性能和可扩展性至关重要。由于有众多选择,开发人员常常在为项目选择最佳框架时遇到困难。在这篇文章中,我们将对三个流行的框架进行性能测试:Go Fiber、Spring Boot 和 Express.js。
zh: 基准测试配置
为了公平比较,我们设置了一个标准化环境,使用具有以下规格的虚拟专用服务器(VPS):1核CPU和1GB内存。我使用Docker为每个框架创建容器化版本,以确保部署的一致。此外,我们使用Grafana和Prometheus来监控服务器指标,k6则用于负载测试。
咱们开始吧
搭建 Docker 镜像
为了测试的目的,我在Go Fiber、Java SpringBoot和Express.js中实现了“Hello World” APIs。有趣的是,我发现这些框架的大小存在显著差异。Java SpringBoot的大小最大,达到了459MB的大小,其次是Express.js,为138MB,而Go Fiber最轻量,仅有16.5MB的大小。
用k6做负载测试
为了模拟真实世界的流量并衡量我们API端点的性能表现,我们使用k6,一个强大的开源负载测试工具。下面提供的k6脚本是根据我们的基准测试场景定制的,旨在在不同并发用户流量级别下对每个API实现进行压力测试。
import http from 'k6/http';
import { check, sleep } from 'k6';
export let options = {
stages: [
{ duration: '1m', target: 200 }, // 在一分钟内逐步增加到200个用户
{ duration: '3m', target: 500 }, // 在接下来的三分钟内保持用户数为500
{ duration: '1m', target: 300 }, // 在一分钟内逐步减少到300个用户
],
thresholds: {
http_req_duration: ['p(95)<500'], // 95%的请求应在500毫秒之内
},
};
export default function () {
let res = http.get('http://--ip address--:8080/fiber');
check(res, {
'状态码应该是200': (r) => r.status === 200,
'事务时间应该正常': (r) => r.timings.duration < 500,
});
sleep(1); // 短暂休眠以控制请求速率
}
-
options
参数定义了负载测试的场景配置,包含指定阶段等等。在一分钟内将用户数量提升到200人。
2. 保持500用户活跃3分钟。
3., 将用户数量在1分钟内减少到300人。
- 设置一个阈值,确保95%的请求时长少于500毫秒,这说明性能是可接受的。
压力测试结果分析
Express
http 请求时延: 20.31 毫秒
HTTP请求从91259变为每秒303个请求
Java SpringBoot
http_req_duration: 24.16毫秒
http_reqs:90893 - > 每秒301个请求
快用光纤吧!(kuài yòng guāngqián ba!)
http_req_duration: 20.59毫秒
http_reqs: 91207 -> 每秒303个请求 (měisèo 303 gè qǐngqiú)
在负载测试中,我们注意到Go Fiber有5个请求超出了500毫秒的阈值,而Express.js和Java SpringBoot则没有遇到类似的情况。这表明Go Fiber的性能与其它框架相比稍微有些不一致。
Express.js- 平均请求时长:20.31 毫秒
- 每秒请求量:303 次/秒
资源利用率:CPU:28%, RAM: 61%**
Express.js 表现出出色的表现,平均请求耗时为 20.31 毫秒,并每秒能处理 303 个请求。资源使用率在可接受范围内,CPU 使用 28%,内存使用 61%。
Java SpringBoot(Java 框架)- 平均请求持续时间:24.16 ms
- 每秒请求量:301/s
CPU使用率最高23%,内存使用率72%
Java SpringBoot 的请求时间比 Express.js 稍微长一些,平均为 24.16 毫秒。它每秒处理 301 个请求,在中等资源消耗下,CPU 使用率为 23%,内存使用率为 72%。
加速光纤- 平均请求耗时:20.59毫秒
- 每秒处理请求数:303 次/秒
资源使用情况:CPU:最大28% RAM:57%
Go Fiber的性能与Express.js类似,平均请求时长为20.59毫秒,每秒能处理303个请求。资源使用效率很高,CPU使用率最高达到28%,内存使用率为57%。
结论- Express.js:提供出色的性能,低请求时延,以及高效资源利用。
- Java SpringBoot:虽然请求持续时间稍长且资源消耗略高,仍提供稳定的性能。
- Go Fiber:因与Express.js相当的性能和高效资源利用而突出,是轻量级和高性能API开发的理想选择。
这些研究结果强调了在选择API开发框架时,不仅要考虑性能指标,还要考虑资源利用效率。最终的选择取决于特定项目的需求和偏好,每个框架都有其独特的优点和权衡。
共同学习,写下你的评论
评论加载中...
作者其他优质文章