网关性能大PK,Spring Cloud Gateway让人大失所望

news2024/12/27 12:35:44

现在的架构基本都是使用微服务的,而网关作为微服务的统一门户在架构模式中用得越来越多,API网关是所有客户端的单一入口点。

API网关模式是微服务体系结构的一个很好的起点,因为它能够将特定的请求路由到我们从整体上分离的不同服务。事实上,API网关并不是我们的新概念。到目前为止,我们一直在使用。Nginx作为API网关在我们的整块应用程序前面,但是我们希望在微服务转换的背景下重新评估我们的决定。

 

我们关心的性能,易于扩展性和额外的能力,如速率限制。第一步是评估在重载下的备选方案的性能,以确保它们的规模足以满足我们的需要。

在这篇博客文章中,我们将解释如何设置测试环境并比较下面API网关的性能:

  1. Zuul
  2. Nginx
  3. SpringCloud Gateway
  4. Linkerd

事实上,我们还有其他选择,比如[Envoy和[UnderTow..我们将使用这些工具进行类似的测试,并在的博客文章中分享结果

Zuul视乎还是挺好的,因为它是用Java开发的,并且有Spring框架的强大支持。已经有一些博客文章比较ZUUL和NGIXX,但我们也想评估Spring cloud gateway和Linkerd的性能。此外,我们计划进行进一步的负载测试,所以我们决定设置自己的测试任务。

我们首先安装NGIX到AWS EC2 T2微实例,根据官方的NGNX文档。这个环境是我们的初始测试环境,并且我们将ZUUL和Spring cloud Gateway安装添加到这个环境中。NGNIX Web服务器托管静态资源,并为NGIX、ZUUL和cloud Gateway定义了反向代理。我们还启动了另一个T2微服务EC2来执行请求(客户端EC2)。

 

图中的虚线箭头是我们的测试路径。其中有五个:

  1. 直接存取
  2. 通过NGIX反向代理访问
  3. 通过ZUL访问
  4. 通过Spring云网关访问
  5. 通过Linkerd访问

我们知道你不耐烦地看到结果,所以让我们先给出结果,然后再详细说明。

1.1. 性能基准总结

1.1.1. 测试策略

我们使用Apache HTTP服务器基准工具。在每次测试运行中,我们用200个并发线程完成了10000个总请求。

ab -n 10000 -c 200 HTTP://<server-address>/<path to resource>

我们在三个不同的AWS EC2服务器配置上进行了测试。我们在每一步缩小测试用例以获得最终的结果

1、我们在第一步中执行了额外的直接访问测试来查看代理的开销,但是由于直接访问不是我们的选择,所以我们没有在下面的步骤中执行这个测试。

2、由于Spring Cloud Gateway 使用部是特别多,再最后一步再进行测试。

3、ZUUL的性能在第一次调用后的后续调用更好。我们认为这可能是由于JIT(准时)优化在第一次调用上进行的,所以我们称ZUUL运行的第一个为“热身”所以下面的汇总表中显示的值是在预热性能之后。

4、我们知道Linkerd是一个资源密集型的代理,所以我们在最后一个步骤与最高的资源配置进行了比较。

1.2. 测试配置

T2、Micro 单核CPU、1GB内存:我们运行直接访问、NGNIX反向代理和ZUUL(热身后)的测试。

M4.Large  双核CPU,8GB的内存:我们比较了NGIX反向代理和ZUUL(热身后)的性能。

M4.2xLarge 8内核CPU,32GB内存:我们比较了NGIX反向代理、ZUUL(热身后)、Spring cloud gateway和Linkerd的性能。

1.3. 测试结果

性能测试的结果如下

 

第一张图显示每一秒不同的网关处理的请求数,可见在硬件都很糟糕的情况下nginx是不错的选择,如果硬件性能都提升的情况下,Zuul和Linkerd性能能反超nginx

但是SpringCloud Gateway的性能有点让人失望

 

这个图也是同样,测试的是每次请求的平均时间,单位是毫秒,在单核cpu的情况下zuul表现确实差强人意,但一旦到了服务器的硬件条件下,zuul的性能确是4个中最好的

但是不管从哪个层面来看geteway的性能都不能让人满意

1.4. 测试详细

1.4.1. 直接访问

首先,我们在没有任何代理的情况下直接访问静态资源。结果如下。平均每次请求时间为30毫秒。

 

1.4.2. 通过nginx反向代理访问的情况

在第二个测试中,我们通过NGNX反向代理访问资源。每次请求的平均时间是40毫秒。我们可以说,与上一部分中所解释的直接访问相比,nginx的性能增加了部分开销

 

1.4.3. 使用Zuul来做代理的情况

 

在配置文件里面仅仅做些简单的路由配置,其中的yml文件如下:

 

最后zuul的测试结果如下:

 

直接访问和用nginx反向代理访问的时间为30ms和40ms,第一次使用zuul的请求时间是388ms,效果非常不理想,当然可以使用JVM预热,会对zuul的性能有所提升,下面是进一步测试的情况。

 

ZUUL代理在预热(每个请求的时间为200毫秒)后表现更好,但与40ms的NGIX反向代理相比,它仍然不太好。

上面做的测试是使用单核CPU和1G内存的服务器,Nginx是一个本地的C++应用测试,而ZUUL是JAVA开发的,我们知道Java应用程序有点:要求更高。因此,我们将服务器更改为具有两个CPU内核和8GB内存的M4大型实例。

我们再次运行了NGIX和ZUUL反向代理测试,结果如下:

 

 

如上述图所示,对于NGIX和ZUUL,每秒请求值分别为32毫秒和95ms。这些结果比T2微测试的结果要好得多,分别为40ms和200 ms。

一个有效的批评是,我们通过使用ZULL通过Spring启动应用程序引入额外的开销。如果我们将ZUUL作为独立的应用程序运行,它可能会运行得更好。

我们还评估了具有八个核心和32GB内存的M4.2X大型服务器。NGNIX和ZUUL的结果在下面的数字中给出:

 

 

如你所视,这个时候zuul的性能已经反超nginx了,很多人在抱怨zuul的性能太差,远远没有nginx的性能好,其实这样的看法其实还是太片面了,在真实的项目服务器情况下zuul的性能不会太差。

1.4.4. Linkerd的测试情况

 

这也是使用大型八个核心和32GB内存的M4.2X大型服务器,测试出的结果和zuul非常相近

1.4.5. SpringCloud Gateway测试情况

Geteway号称有取代其他网关的能力,所以在这也与其他的网关进行下比较,们进行了同样的性能测试。Apache HTTP服务器基准测试工具用200个并发线程发送10000个请求。结果如下图所示:

 

如图所示,Spring云网关可以处理每秒873个请求,平均请求时间为229毫秒。根据我们的测试,Spring云网关的性能达不到ZUUL、Linkerd和NGNIX的水平,至少情况是这样,这样的测试结果真让人大失所望!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/75818.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

嘿嘿嘿,10个我经常逛的“小网站”,不骗人

反思一下&#xff0c;为什么你会点进来~ 咳咳&#xff0c;步入正题。 工欲善其事必先利其器&#xff0c;你们的收藏夹里收藏了多少“小网站”&#xff1f;今天和大家分享10个我压箱底的效率工具/平台&#xff0c;现在用不上不要紧&#xff0c;赶紧收藏最关键&#xff01; 1.G…

【产品设计】APP常见的6种图片浏览模式

六种是指比较常见的图片浏览模式&#xff0c;是在这四种的基础上加上手势来实现另一种读图方式&#xff0c;这里不绝对说就这么几种&#xff0c;那么就谈谈个人对每种图片浏览模式说说自己在实际使用和工作中的一些理解&#xff0c;以及这些模式在实际设计中&#xff0c;哪一种…

智能聊天机器人––ChatGPT初体验

最近几天&#xff0c;由OpenAI公司发布的ChatGPT聊天机器人火了&#xff0c;小杨也怀着对新鲜事物的好奇&#xff0c;亲自体验了一下这个火爆全网&#xff0c;让人沉迷其中无法自拔的ChatGPT聊天机器人&#xff0c;经过体验&#xff0c;我只想用一个字来表达我的感受&#xff0…

【LeetCode每日一题】——142.环形链表 II

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【题目提示】八【题目进阶】九【时间频度】十【代码实现】十一【提交结果】一【题目类别】 链表 二【题目难度】 中等 三【题目编号】 142.环形链表 II 四【题目描述】 …

Java百度地图全套教程(地图找房、轻骑小程序、金运物流等)

课程简介&#xff1a; 本课程基于百度地图技术&#xff0c;将企业项目中地图相关常见应用场景的落地实战&#xff0c;包括有地图找房、轻骑小程序、金运物流等。同时还讲了基于Netty实现高性能的web服务&#xff0c;来处理高并发的问题。 学完本课程能够收获&#xff1a;百度…

支持本地挂载的网盘文件列表工具AList

什么是 Alist&#xff1f; AList 是一个支持多存储的文件列表程序&#xff0c;使用 Gin 框架和 Solidjs 库。可以将常见的 18 种网盘整合在一起&#xff0c;并支持 WebDAV 客户端访问。 之前老苏写过一篇 Alist&#xff0c; 但此 Alist 非彼 Alist&#xff0c;之前的 A 应该是 …

React基础知识(React基本使用、JSX语法、React模块化与组件化)(一)

系列文章目录 文章目录系列文章目录一、React简介1.1 React的特点1.2 React高效的原因二、React基本使用2.1 引入react相关js库2.2 创建虚拟DOM的两种方法2.3 虚拟DOM和真实DOM三、JSX基本使用3.1 jsx使用四、React模块化与组件化4.1 函数式组件4.2 类式组件一、React简介 1.英…

Kafka消费者组消费进度监控

针对Kafka消费者&#xff0c;重要的就是监控消费进度或者是消费的滞后程度&#xff0c;有个专业名词 消费者 Lag 或 Consumer Lag。 滞后程度&#xff08;Consumer Lag&#xff09;是指消费者当前落后生产者的程度。比如Kafka 生产者向某主题成功生产了 100 万条消息&#xff0…

一个.NetCore前后端分离、模块化、插件式的通用框架

今天给大家推荐一个基于.NET 6实现的快速开发平台。采用模块化插件式开发&#xff0c;前后端分离&#xff0c;开箱即用。 项目简介 这是一个开箱即用的快速开发平台&#xff0c;前后端分离架构&#xff0c;支持插件式开发&#xff0c;支持工作流、可视化表单功能。系统基础功…

Qt 快速读写Excel指南

Qt Windows 下快速读写Excel指南 很多人搜如何读写excel都会看到用QAxObject来进行操作&#xff0c;很多人试了之后都会发现一个问题&#xff0c;就是慢&#xff0c;非常缓慢&#xff01;因此很多人得出结论是QAxObject读写excel方法不可取&#xff0c;效率低。 后来我曾试过用…

网络攻击损失不容小觑

据研究数据显示&#xff0c;2022年数据泄露给企业造成的平均损失为435万美元&#xff1b;如果是勒索软件攻击&#xff0c;损失将增加到454万美元。当然这只是估计&#xff0c;在某些国家或地区平均损失更高&#xff0c;比如在美国&#xff0c;损失接近1000万美元。 此外&#x…

如何制作并使用动静态库

制作并使用动静态库&#x1f3de;️1. 动静态库概念&#x1f301;2. 如何制作动静态库&#x1f4d6;2.1 制作静态库&#x1f4d6;2.2 制作动态库&#x1f320;3. 如何使用动静态库&#x1f4d6;3.1 使用静态库&#x1f4d6;3.2 使用动态库&#x1f341;4. 动态库的加载原理&…

Mybatis-plus实战项目演示+自定义元数据对象处理器+ws

目录 一&#xff0c;mybatis-plus实战一 1.导入依赖 2.application.yml配置 3.实体类 4.mapper 5.service层 6.启动类上配置 二&#xff0c;mybatis-plus实战二 1.导入依赖 2.application.yml配置 3.实体类 2.mapper 3.service 4.分页配置 5.放一个在controller层…

jeecg-boot中实现跳过登录验证访问其他vue页面

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff0c;雄雄的小课堂。 前言 大家都知道&#xff0c;我们正常的项目&#xff0c;都做了访问限制&#xff0c;也就是&#xff0c;只有当用户登录本平台后&#xff0c;才能让用户访问别的页面&#xff0c;否则默认…

【Vue】Vue中mixins的使用方法及实际项目应用详解

文章目录&#xff08;1&#xff09;mixin基础&#xff08;2&#xff09;mixin特点1.选项合并2.方法和参数在各组件中不共享&#xff08;3&#xff09;mixin与vuex的区别&#xff08;4&#xff09;mixin与公共组件的区别&#xff08;5&#xff09;项目实践&#xff08;6&#xf…

Session | 基于Session改造oa项目的登录功能

目录 一&#xff1a;总结域对象 二&#xff1a;基于Session改造oa项目的登录功能 三&#xff1a;oa项目的安全退出系统 一&#xff1a;总结域对象 &#xff08;1&#xff09;request&#xff08;对应的类名&#xff1a;HttpServletRequest&#xff09; 请求域&#xff08;请…

【机器学习】机器学习30个笔试题

机器学习试题 在回归模型中&#xff0c;下列哪一项在权衡欠拟合&#xff08;under-fitting&#xff09;和过拟合&#xff08;over-fitting&#xff09;中影响最大&#xff1f;&#xff08;A&#xff09; A. 多项式阶数 B. 更新权重 w 时&#xff0c;使用的是矩阵求逆还是梯度下…

几款超好用的内网穿透神器,总有一款适合你!

本文以渗透的视角&#xff0c;总结几种个人常用的内网穿透&#xff0c;内网代理工具&#xff0c;介绍其简单原理和使用方法。 0x01 nps-npc 1.1 简介 nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发&#xff0c;可支持任何tcp、udp上层协…

前端js长整型精度丢失处理

一、现象 在分页查询时&#xff0c;服务端会将返回的对象进行json序列化&#xff0c;转换为json格式的数据&#xff0c;而用户的ID是一个Long类型的数据&#xff0c;而且是一个长度为 19 位的长整型数据&#xff0c; 该数据返回给前端是没有问题的。 问题实际上&#xff0c; …

适用于Unity的 Google Cardboard XR Plugin快速入门

本指南向您展示如何使用 Google Cardboard XR Plugin for Unity 创建您自己的虚拟现实 (VR) 体验。 您可以使用 Cardboard SDK 将移动设备变成 VR 平台。移动设备可以显示具有立体渲染的 3D 场景&#xff0c;跟踪头部运动并对其做出反应&#xff0c;并通过检测用户何时按下查看…