热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

实测SpringCloudGateway网关性能(Wrk和Jmeter)

 SpringCloud的Gateway网关性能到底如何,网上各种传言太多。我用Wrk和Jmeter

  SpringCloud 的Gateway网关性能到底如何,网上各种传言太多。我用WrkJmeter两种测试工具,在相同环境和代码下进行压测。这里分享一下Wrk压测过程的数据和结果,希望对你的技术选型等有所助益。

    已把网关项目上传到csdn,可免费下载使用 https://download.csdn.net/download/u012246511/12651700

  (不知道为啥csdn上传的资源,所需积分/C币 老是自己变,而且还需要审核...所以提供个百度云的)

    百度云盘 链接:https://pan.baidu.com/s/1EtEnOI7ATs3v--l4X9GJzw
                   提取码:plfe
 


  • Wrk压测时可能出现超时甚至报错,很大可能是工具问题。用比较专业的Jmeter就几乎没有出现超时和报错。

     不想看过程的可直接跳到第四章节,我会贴出wrk和jmeter两种压测结果,几乎一致。

目录

 

1、测试环境

2、测试所用命令及参数

3、测试过程

3.1做简单路由  只是匹配所有/test/** 请求路由到下游SpringBoot项目,把我提供网关项目yml中的spring提供的默认过滤器、5个自定义过滤器及aop代理全注掉。如图​Get测试结果:

3.2 简单路由+Gateway提供的两个默认过滤器增加AddRequestParameterGatewayFilterFactory和SetRequestHeaderGatewayFilterFactory两个默认的过滤器。 配置如图:​ Get请求测试结果:

 

3.3 路由+默认过滤器+1个自定义全局过滤器自定义全局过滤器用来修改Post请求时request body的

 

3.4 路由+默认过滤器+3个自定义全局过滤器+1个aop代理

3.5  路由+默认过滤器+5个自定义全局过滤器+1个aop代理

4、 结论 (重点.....)

    Wrk压测结果:

   Jmeter压测结果:

 


1、测试环境
  •  网关  

    SpringCloud版本:Hoxton.SR6  

    Gateway 版本:2.2.3.RELEASE

  • 下游服务

    SpringBoot版本: 2.2.8.RELEASE
     
  • 服务主机(本地Windows10)

    内存:8G

    Cpu:  Intel(R) Core(TM) i5-9400F @ 2.90GHz   

    核数:6核

  • 测试客户端(Centos7)

    内存:8G

    Cpu : Intel(R) Xeon(R) CPU E5-2630 v2 @ 2.60GHz

    核数:4核

  • 安装Wrk
    我是在Centos7上通过 yum 安装的,过程简单,无非就是先装个git ,然后clone代码,再ln个快捷引用就完事了;可参照如下命令:

    cd /usr/local/src
    yum install git -y
    git clone https://github.com/wg/wrk.git
    cd wrk
    yum -y install gcc
     make
    ln -s /usr/local/src/wrk/wrk /usr/local/bin
    wrk -t 2 -c 50 -d 20 --latency http://localhost:8081

2、测试所用命令及参数

    以下命令皆使用15个线程500个连接,进行10秒的压测,并要求在压测结果中输出响应延迟信息。

  •  get请求 :./wrkbin  -t 15 -c500 -d 10 --latency  http://localhost:8081/test/mt
  • post请求: ./wrkbin  -t 15 -c500 -d 10 --latency -s post.lua  http://192.168.2.252:8081/test/mt
    post请求需要使用lua脚本,这里也贴下:


    wrk.method = "POST"
    wrk.headers["Content-Type"] = "application/json"
    wrk.body = "{}"



    3、测试过程

  • 3.1做简单路由

      只是匹配所有/test/** 请求路由到下游SpringBoot项目,把我提供网关项目yml中的spring提供的默认过滤器、5个自定义过滤器及aop代理全注掉。如图

    Get测试结果:

    第一次---->

     

    第二次---->

     

    第三次->

     

    结论: 三次压测平均QPS:4719,出现超时。

  • Post测试结果

    第一次---->

     

    第二次---->

     

    第三次----->

     

    第四次----->

     

    第五次----->

     

    结论: 五次压测平均QPS:3545,出现超时。

3.2 简单路由+Gateway提供的两个默认过滤器
增加AddRequestParameterGatewayFilterFactory和SetRequestHeaderGatewayFilterFactory两个默认的过滤器。 配置如图:


 Get请求测试结果:
 

第一次---->

 

第二次---->

 

第三次->

 

第四次-->

 

结论: 三次压测平均QPS:5193,出现超时及错误。

Post测试结果

第一次---->

第二次---->

第三次----->

第四次----->

第五次----->

结论: 五次压测平均QPS:3357,出现超时。

 

  • 3.3 路由+默认过滤器+1个自定义全局过滤器
    自定义全局过滤器用来修改Post请求时request body的

Post测试结果

第一次---->

第二次---->

第三次----->

第四次----->

第五次----->

  结论: 五次压测平均QPS:979,出现超时及错误。

 

  • 3.4 路由+默认过滤器+3个自定义全局过滤器+1个aop代理

       Post测试结果:

第一次---->

 

第二次---->

 

第三次----->

 

第四次----->

 

第五次----->

 

 

  结论: 五次压测平均QPS:724,出现超时及错误。

  •           3.5  路由+默认过滤器+5个自定义全局过滤器+1个aop代理


           post测试结果:

第一次---->

 

第二次---->

 

第三次----->

 

 

结论: 三次压测平均QPS:431,出现超时及错误。

 

4、 结论 (重点.....)
  •        Wrk压测结果:

用途

QPS

备注

只做简单路由

4131

当请求方式为get时直接放行,并没有修改request body,所以其QPS看起来较高。

路由+默认过滤器

4275

竟然比第一个要高点?其实不尽然....跟我收集的数据和计算有点关系,但不影响整体测试结果。

路由+默认过滤器+1个自定义全局过滤器

979

 

路由+默认过滤器+3个自定义全局过滤器+1个aop代理

724

 

路由+默认过滤器+5个自定义全局过滤器+1个aop代理

431

 

   注1:当有get和post两种QPS时,下表中的QPS=(get+post)%2

    注2:由于2.x  gateway 使用的是netty,可通过设置netty下的reactor.netty.ioWorkerCount参数来优化并发,适当增加一倍后与以上测试结果基本一致,不合理的设置反而会降低QPS。
   
        

 

  •    Jmeter压测结果:
     

    用途

    QPS

    测试次数

    备注

    只做简单路由

    5170

    10

     

    路由+默认过滤器

    4257

    5

     

    路由+默认过滤器+1个自定义全局过滤器

    1469

    5

     

    路由+默认过滤器+3个自定义全局过滤器+1个aop代理

    792

    5

     

    路由+默认过滤器+5个自定义全局过滤器+1个aop代理

    579

    5

     

 Jmeter测试环境和过程跟wrk完全一样,这里我只测的最常用的Post请求。

 Jmeter在linux测post请求时可能需要*.jmx文件,可以在你的windows客户端装个jmeter,在界面上配置好保存后找到本地的*.jmx文件,上传到liunx就可以直接用。

  • 高并发两大杀手锏:1、单机 。 2、复杂操作。
  • 自定义过滤器里不过是从网上找了一段修改request body的代码,个人觉得并不能算是复杂操作,而是常用操作。
    至于为什么qps下降如此之大还没有在代码层面做调研,欢迎指正、解惑。
  • spencergibb 在GIt上也有一个gateway和其他网关的性能测试,,参见
    https://github.com/spencergibb/spring-cloud-gateway-bench   (将所有请求路由到一个go搭建的取静态文件的服务中)

               

注意:其实当我们使用了默认提供的过滤器、自定义过滤器和aop代理这些技术导致性能降低时,其实瓶颈可能并不在网关本身了。

比如你的网关层还有访问数据库、redis缓存之类的操作,那QPS会进一步降低这是显而易见的。

 延迟和吞吐量是衡量性能的重要标准,我网关环境的机器并不是只有网关服务,其Cpu和内存并不是只为网关服务,所以如果一台Liunx上只部署网关的话,相信性能应该会比较客观。


推荐阅读
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 【MicroServices】【Arduino】装修甲醛检测,ArduinoDart甲醛、PM2.5、温湿度、光照传感器等,数据记录于SD卡,Python数据显示,UI5前台,微服务后台……
    这篇文章介绍了一个基于Arduino的装修甲醛检测项目,使用了ArduinoDart甲醛、PM2.5、温湿度、光照传感器等硬件,并将数据记录于SD卡,使用Python进行数据显示,使用UI5进行前台设计,使用微服务进行后台开发。该项目还在不断更新中,有兴趣的可以关注作者的博客和GitHub。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • CentOS7.8下编译muduo库找不到Boost库报错的解决方法
    本文介绍了在CentOS7.8下编译muduo库时出现找不到Boost库报错的问题,并提供了解决方法。文章详细介绍了从Github上下载muduo和muduo-tutorial源代码的步骤,并指导如何编译muduo库。最后,作者提供了陈硕老师的Github链接和muduo库的简介。 ... [详细]
  • 本文详细介绍了在Centos7上部署安装zabbix5.0的步骤和注意事项,包括准备工作、获取所需的yum源、关闭防火墙和SELINUX等。提供了一步一步的操作指南,帮助读者顺利完成安装过程。 ... [详细]
  • Java如何导入和导出Excel文件的方法和步骤详解
    本文详细介绍了在SpringBoot中使用Java导入和导出Excel文件的方法和步骤,包括添加操作Excel的依赖、自定义注解等。文章还提供了示例代码,并将代码上传至GitHub供访问。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 学习笔记(34):第三阶段4.2.6:SpringCloud Config配置中心的应用与原理第三阶段4.2.6SpringCloud Config配置中心的应用与原理
    立即学习:https:edu.csdn.netcourseplay29983432482?utm_sourceblogtoedu配置中心得核心逻辑springcloudconfi ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • express工程中的json调用方法
    本文介绍了在express工程中如何调用json数据,包括建立app.js文件、创建数据接口以及获取全部数据和typeid为1的数据的方法。 ... [详细]
author-avatar
6易0k醉人也s易
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有