1 简要概述

最近看起go lang,真的被go的goroutine(协程)惊艳到了,一句 go function(){#todo},即可完成一个并发的工作。
看到gin这个web框架时,突然就特别想拿它和springboot来做个性能对比,马上撸一遍。
请求:/ping
返回:{"message":"pong"}
先透露下对比报告:
  qps  CPU  内存  包大小
gin 14900  150% 0.4% 9M 
springboot 11536 143% 12% 24M 
 
 2 环境准备
  • 2台2C4G的云主机(172.16.60.211,172.16.60.210),这个自己到阿里云上购买即可。一小时0.8元左右。
  • gin的helloworld代码:https://github.com/qinxiongzhou/gin-vs-springboot/tree/main/springboot
  • springboot的helloworld代码:https://github.com/qinxiongzhou/gin-vs-springboot/tree/main/gin/src/http_gin
  • 172.16.60.211机器上,上次gin和springboot编译好的包,并启动运行。gin运行在8080端口,springboot运行在8090端口
  • 172.16.60.210机器上,安装AB 工具包,做压测控制

3 代码工程及打包

3.1 gin

关键代码:
  1. 1 func main() {
  2. 2 gin.SetMode(gin.ReleaseMode)
  3. 3 gin.DefaultWriter = ioutil.Discard
  4. 4 r := gin.Default()
  5. 5 r.GET("/ping", func(c *gin.Context) {
  6. 6 c.JSON(200, gin.H{
  7. 7 "message": "pong",
  8. 8 })
  9. 9 })
  10. 10 r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
  11. 11 }

打包:

  1. 1 set GOOS=linux #windows环境需要设置GOOS,才能build成linux环境的可运行二进制文件
  2. 2 go build http_gin.go

上传linux环境:

  1. 1 修改成可执行文件 chmod +x http_gin
  2. 2 运行 ./http_gin &

3.2 springboot

关键代码:

  1. 1 @RestController
  2. 2 public class DemoController {
  3. 3 Result result = new Result("pong");
  4. 4
  5. 5 @RequestMapping("/ping")
  6. 6 public Result hello(){
  7. 7 return result;
  8. 8 }
  9. 9 }
  10. 10
  11. 11
  12. 12 class Result{
  13. 13 String Message;
  14. 14 public String getMessage() {
  15. 15 return Message;
  16. 16 }
  17. 17 public void setMessage(String message) {
  18. 18 Message = message;
  19. 19 }
  20. 20 public Result(String message) {
  21. 21 Message = message;
  22. 22 }
  23. 23 }

编译上传:

  1. 1 maven编译 mvn install

运行:

  1. 1 java -jar demo-0.0.1-SNAPSHOT.jar &

 4 benchmark
模拟20个用户,发出20万个请求
  1. 1 ab -c 20 -n 200000 http://172.16.60.211:8080/ping

 4.1 gin benchmark

1 ab -c 20 -n 200000 http://172.16.60.211:8080/ping

benchmark结果:

  1. 1 Concurrency Level: 20
  2. 2 Time taken for tests: 13.423 seconds
  3. 3 Complete requests: 200000
  4. 4 Failed requests: 0
  5. 5 Write errors: 0
  6. 6 Total transferred: 28200000 bytes
  7. 7 HTML transferred: 3600000 bytes
  8. 8 Requests per second: 14900.02 [#/sec] (mean)
  9. 9 Time per request: 1.342 [ms] (mean)
  10. 10 Time per request: 0.067 [ms] (mean, across all concurrent requests)
  11. 11 Transfer rate: 2051.66 [Kbytes/sec] received

benchmark过程中,服务器CPU、内存状态:

 4.2 springboot benchmark

1 ab -c 10 -n 200000 http://172.16.60.211:8090/ping

  1. 1 Concurrency Level: 20
  2. 2 Time taken for tests: 17.336 seconds
  3. 3 Complete requests: 200000
  4. 4 Failed requests: 0
  5. 5 Write errors: 0
  6. 6 Total transferred: 24600000 bytes
  7. 7 HTML transferred: 3600000 bytes
  8. 8 Requests per second: 11536.65 [#/sec] (mean)
  9. 9 Time per request: 1.734 [ms] (mean)
  10. 10 Time per request: 0.087 [ms] (mean, across all concurrent requests)
  11. 11 Transfer rate: 1385.75 [Kbytes/sec] received

benchmark过程中,服务器CPU、内存状态:

4.3 对比

  qps  CPU  内存  包大小
gin 14900  150% 0.4% 9M 
springboot 11536 143% 12% 24M 

结论:

  • qps上,gin 比 springboot 高出1.3倍。别看只有1.3倍,如果公司现在有10000台服务器呢?
  • CPU上,两者持平
  • 内存上,gin比springboot 小30倍。这个差距是真有点大。
  • 包大小上,gin比springboot 小2.6倍。别看磁盘只是小了2.6倍,流水线持续部署时,磁盘大小和每次传包的时间,也是相当可观的节省
从这些硬指标看,gin有具备比springboot更多的优势。但从社区看,springboot依然是个王者。springboot也做了webflow的支持,后续也可期待下这块的发展。

go gin框架和springboot框架WEB接口性能对比的更多相关文章

  1. JMeter基于http请求的web接口性能测试总结

    [本文出自天外归云的博客园] 基于http请求的web接口性能测试总结 压测的目的:对于Web接口压测的目的最终是要在对数据库造成压力的情况下观察压测服务器的cpu是否达到预警值.memory是否发生 ...

  2. SpringCloud基础组件总结,与Dubbo框架、SpringBoot框架对比分析

    本文源码:GitHub·点这里 || GitEE·点这里 一.基础组件总结 1.文章阅读目录 1).基础组件 Eureka组件,服务注册与发现 Ribbon和Feign组件,实现负载均衡 Hystri ...

  3. 自己写的轻量级PHP框架trig与laravel5.1,yii2性能对比

    看了下当前最热门的php开发框架,想对比一下自己写的框架与这些框架的性能对比.先看下当前流行框架的投票情况. 看结果对比,每个测试脚本做了一个数据库的联表查询并进行print_r输出,查询的sql语句 ...

  4. Python flask 与 GO WEB服务器性能对比

    测试环境: 系统: CentOS 7.1 Mem: 8G CPU: 虚拟机16核 Python版本: python3.6 Flask版本: 0.12.2 Golang版本: 1.6.3 1.首先写一个 ...

  5. JNPF.java前后端分离框架,SpringBoot+SpringCloud开发微服务平台

    JNPF.java版本采用全新的前后端分离架构模式.前后端分离已成为互联网项目开发的业界标准开发方式,通过 nginx+tomcat 等方式有效的进行解耦合,并且前后端分离会为以后的大型分布式架构.弹 ...

  6. python之web框架(2):了解WSGI接口

    python之web框架(2):了解WSGI接口 1.什么是wsgi接口: wsgi:Web Service Gateway Interface.它不是模块,而只是一种规范,方便web服务器和各种框架 ...

  7. 小程序后端项目【Springboot框架】部署到阿里云服务器【支持https访问】

    前言: 我的后端项目是Java写的,用的Springboot框架.在部署服务器并配置https访问过程中,因为做了一些令人窒息的操作(事后发现),所以老是不能成功. 不成功具体点说就是:域名地址可以正 ...

  8. 0001 - Spring 框架和 Tomcat 容器扩展接口揭秘

    前言 在 Spring 框架中,每个应用程序上下文(ApplicationContext)管理着一个 BeanFactory,BeanFactory 主要负责 Bean 定义的保存.Bean 的创建. ...

  9. SpringBoot框架的权限管理系统

    springBoot框架的权限管理系统,支持操作权限和数据权限,后端采用springBoot,MyBatis,Shiro,前端使用adminLTE,Vue.js,bootstrap-table.tre ...

随机推荐

  1. 适配三星Galaxy S8及S8+ 屏幕比例为 18.5:9

    开发者只需在App的AndroidManifest.xml文件<application> </application>中添加如下代码: <meta-data androi ...

  2. 使用pycallgraph分析python代码函数调用流程以及框架

    技术背景 在上一篇博客中,我们介绍了使用量子计算模拟器ProjectQ去生成一个随机数,也介绍了随机数的应用场景等.但是有些时候我们希望可以打开这里面实现的原理,去看看在产生随机数的过程中经历了哪些运 ...

  3. Power BI成功的背后

    Power BI成功的背后 魔力象限 又是一年Gartner数据分析与BI魔力象限报告的发布,Power BI毫无悬念的第一,并且拉开与其他产品的差距越来越大.在Power BI dataflows( ...

  4. Java垃圾回收机制详解

    前言 Java 相比 C/C++ 最显著的特点便是引入了自动垃圾回收 (下文统一用 GC 指代自动垃圾回收),它解决了 C/C++ 最令人头疼的内存管理问题,让程序员专注于程序本身,不用关心内存回收这 ...

  5. 剑指 Offer 65. 不用加减乘除做加法 + 位运算

    剑指 Offer 65. 不用加减乘除做加法 Offer_65 题目描述 题解分析 java代码 package com.walegarrett.offer; /** * @Author WaleGa ...

  6. PAT-1086(Tree Traversals Again)Java语言实现+根据中序和前序遍历构建树并且给出后序遍历序列

    Tree Traversals Again Tree Traversals Again 这里的第一个tip就是注意到非递归中序遍历的过程中,进栈的顺序恰好是前序遍历的顺序,而出栈的顺序恰好是中序遍历的 ...

  7. Fedora/Centos使用dnf/yum为Firefox安装Flash,两行命令超简单

    Fedora/Centos使用dnf/yum为Firefox安装Flash,两行命令超简单 Flash已死,我想这个方法应该已经失效了吧,毕竟是从adobe的官方下载的,应该是撤链接了,我也很久没安装 ...

  8. golang——net/rpc/jsonrpc包学习

    1.jsonrpc包 该实现了JSON-RPC的ClientCodec和ServerCodec接口,可用于rpc包. 可用于跨语言使用go rpc服务. 2.常用方法 (1)func Dial(net ...

  9. FreeBSD安装xorg + xfce 4

    FreeBSD安装xorg,以及xfce 安装xorg 可选包 -xorg 完整xorg环境包 -xorg-minimal xorg最小化包 ports安装 cd /usr/ports/x11/xor ...

  10. TIOBE 编程语言排行榜

    https://www.tiobe.com/tiobe-index/ TIOBE 编程语言排行榜是编程语言流行趋势的一个指标