热门标签 | 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上只部署网关的话,相信性能应该会比较客观。


推荐阅读
  • 本文详细解析了如何使用Python的urllib模块发起POST请求,并通过实例展示如何爬取百度翻译的翻译结果。 ... [详细]
  • 深入解析 Spring Security 用户认证机制
    本文将详细介绍 Spring Security 中用户登录认证的核心流程,重点分析 AbstractAuthenticationProcessingFilter 和 AuthenticationManager 的工作原理。通过理解这些组件的实现,读者可以更好地掌握 Spring Security 的认证机制。 ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 本次考试于2016年10月25日上午7:50至11:15举行,主要涉及数学专题,特别是斐波那契数列的性质及其在编程中的应用。本文将详细解析考试中的题目,并提供解题思路和代码实现。 ... [详细]
  • 尽管使用TensorFlow和PyTorch等成熟框架可以显著降低实现递归神经网络(RNN)的门槛,但对于初学者来说,理解其底层原理至关重要。本文将引导您使用NumPy从头构建一个用于自然语言处理(NLP)的RNN模型。 ... [详细]
  • 深入理解Java泛型:JDK 5的新特性
    本文详细介绍了Java泛型的概念及其在JDK 5中的应用,通过具体代码示例解释了泛型的引入、作用和优势。同时,探讨了泛型类、泛型方法和泛型接口的实现,并深入讲解了通配符的使用。 ... [详细]
  • 本文介绍如何使用Python进行文本处理,包括分词和生成词云图。通过整合多个文本文件、去除停用词并生成词云图,展示文本数据的可视化分析方法。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 本文介绍了一种解决二元可满足性(2-SAT)问题的方法。通过具体实例,详细解释了如何构建模型、应用算法,并提供了编程实现的细节和优化建议。 ... [详细]
  • 百度搜索结果链接提取工具 UrlGetter V1.43
    该工具专为获取百度搜索引擎的结果页面中的网址链接而设计,能够解析并转换为原始URL。通过正则表达式匹配技术,精准提取网页链接,并提供详细的使用说明和下载资源。 ... [详细]
  • CentOS系统安装与配置常见问题及解决方案
    本文详细介绍了在CentOS系统安装过程中遇到的常见问题及其解决方案,包括Vi编辑器的操作、图形界面的安装、网络连接故障排除等。通过本文,读者可以更好地理解和解决这些常见问题。 ... [详细]
  • 本文由杨勇和思远于2012年12月27日撰写,主要探讨了如何使用PHP进行网页内容抓取,特别是针对字符较多的网站。文章详细介绍了正则表达式失效的原因,并提供了优化方法,同时展示了如何抓取淘宝服饰栏、天气信息以及IP地址对应的地理位置。 ... [详细]
  • 在尝试更新Microsoft Edge浏览器时遇到“检查更新时出错:无法连接到Internet”的问题。本文将详细介绍可能的原因及解决方案,包括防火墙设置和证书缺失的处理方法。 ... [详细]
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社区 版权所有