为了账号安全,请及时绑定邮箱和手机立即绑定

性能基准测试:Go Fiber 对比 Java Spring Boot 对比 Express.js

标签:
Java Node.js Go

前言

在今天快速变化的技术环境中,选择合适的框架来开发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开发框架时,不仅要考虑性能指标,还要考虑资源利用效率。最终的选择取决于特定项目的需求和偏好,每个框架都有其独特的优点和权衡。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消