有感于 myzony 发布的 针对 Ocelot 网关的性能测试 ,并且公司下一步也需要对.net和java的应用做一定的整合,于是对Ocelot网关、Spring Cloud Gateway网关做个了对比测试,使用了wrk进行测试

.net core + Spring Cloud Gateway 是使用 steeltoe 工具接入注册中心Spring Cloud Eureka,共Spring Cloud Gateway调用

应用服务器环境 windows server 2008  .net core 2.2  java 1.8

172.16.1.65   部署   Ocelot的.net core接口-6002、Spring Cloud Gateway的spring boot接口-9004、Spring Cloud Gateway的.net core接口-9001

172.16.1.68   部署   Ocelot的.net core接口-6004、Spring Cloud Gateway的spring boot接口-9004、Spring Cloud Gateway的.net core接口-9001

172.16.1.120 部署   Ocelot网关-6000、Spring Cloud Eureka注册中心-7000 + Spring Cloud Gateway网关-8000

测试工具 wrk  参数统一为  -t 50 -c 10000 -d 60s --latency --timeout 3s

测试服务器环境 centos 7.5   172.16.1.144,并根据 wrk的报错修改了最大打开文件数限制

测试结果汇总如下图

可以看出Ocelot的总请求数、QPS比Gateway高不少,而且超时数也少,但是平均响应时间要比Gateway高不少。

总体上来说,两者基本上处于同一水平,对于一般的企业业务系统足够了,因为上面的测试的都没有涉及业务处理,系统瓶颈不应该是在网关。

考虑我们公司的实际情况,倾向使用 .net core+spring cloud gateway,这样大家各自做各自的,只需要做好接入就好了。

测试结果明细

1. 直测.net core接口  QPS: 51305.10
wrk -t  -c  -d 60s --latency --timeout 3s http://172.16.1.65:9001/user/get
threads and connections
Thread Stats Avg Stdev Max +/- Stdev
Latency .83ms .10ms .00s 90.15%
Req/Sec .04k 495.03 .76k 78.30%
Latency Distribution
% .64ms
% .33ms
% .34ms
% .98s
requests in 1.00m, .96MB read
Socket errors: connect , read , write , timeout
Requests/sec: 51305.10
Transfer/sec: .34MB

 2.  直测spring boot 接口 QPS: 45933.02

wrk -t  -c  -d 60s --latency --timeout 3s http://172.16.1.65:9004/user/get
threads and connections
Thread Stats Avg Stdev Max +/- Stdev
Latency .69ms .08ms .00s 87.63%
Req/Sec .93k 320.20 .28k 69.47%
Latency Distribution
% .25ms
% .19ms
% .66ms
% .10s
requests in 1.00m, .67MB read
Socket errors: connect , read , write , timeout
Requests/sec: 45933.02
Transfer/sec: .70MB

3. .net core 接口(65:6002、68:6004) + ocelot  QPS:9068.52

wrk -t  -c  -d 60s --latency --timeout 3s http://172.16.1.120:6000/api/values/
threads and connections
Thread Stats Avg Stdev Max +/- Stdev
Latency .82ms .67ms .00s 74.12%
Req/Sec 190.05 119.66 .26k 67.26%
Latency Distribution
% .16ms
% .96ms
% .18s
% .69s
requests in 1.00m, .96MB read
Socket errors: connect , read , write , timeout
Non-2xx or 3xx responses:
Requests/sec: 9068.52
Transfer/sec: .51MB

4. spring boot 接口(65:9004、68:9004) + spring cloud gateway    QPS:7497.19

wrk -t  -c  -d 60s --latency --timeout 3s http://172.16.1.120:8000/user-service/user/get
threads and connections
Thread Stats Avg Stdev Max +/- Stdev
Latency .39ms .40ms .98s 68.88%
Req/Sec 220.62 288.26 .25k 92.94%
Latency Distribution
% .92ms
% .53ms
% .77ms
% .96ms
requests in 1.00m, .72MB read
Socket errors: connect , read , write , timeout
Requests/sec: 7497.19
Transfer/sec: .94MB

5. .net core 接口(65:9001、68:9001) + spring cloud gateway    QPS:7762.32

wrk -t  -c  -d 60s --latency --timeout 3s http://172.16.1.120:8000/user-service/user/get
threads and connections
Thread Stats Avg Stdev Max +/- Stdev
Latency .75ms .90ms .98s 74.25%
Req/Sec 211.85 244.15 .78k 93.53%
Latency Distribution
% .13ms
% .84ms
% .64ms
% .74ms
requests in 1.00m, .73MB read
Socket errors: connect , read , write , timeout
Requests/sec: 7762.32
Transfer/sec: .11MB

.net core 所有应用,在Startup中关闭日志

public void ConfigureServices(IServiceCollection services)
{
services.AddLogging(op => op.ClearProviders());
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}

Ocelot 网关,在Startup中关闭日志,注释掉mvc的注入和使用

public void ConfigureServices(IServiceCollection services)
{
services.AddLogging(op => op.ClearProviders());
services.AddOcelot(Configuration); //services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
} // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseOcelot().Wait(); //app.UseMvc(routes => {
// routes.MapRoute(
// name: "default",
// template: "{controller=Home}/{action=Index}/{id?}");
//}); }

.net core下,Ocelot网关与Spring Cloud Gateway网关的对比测试的更多相关文章

  1. Spring Cloud gateway 网关服务二 断言、过滤器

    微服务当前这么火爆的程度,如果不能学会一种微服务框架技术.怎么能升职加薪,增加简历的筹码?spring cloud 和 Dubbo 需要单独学习.说没有时间?没有精力?要学俩个框架?而Spring C ...

  2. 网关服务Spring Cloud Gateway(一)

    Spring 官方最终还是按捺不住推出了自己的网关组件:Spring Cloud Gateway ,相比之前我们使用的 Zuul(1.x) 它有哪些优势呢?Zuul(1.x) 基于 Servlet,使 ...

  3. 微服务网关实战——Spring Cloud Gateway

    导读 作为Netflix Zuul的替代者,Spring Cloud Gateway是一款非常实用的微服务网关,在Spring Cloud微服务架构体系中发挥非常大的作用.本文对Spring Clou ...

  4. Spring Cloud gateway 网关四 动态路由

    微服务当前这么火爆的程度,如果不能学会一种微服务框架技术.怎么能升职加薪,增加简历的筹码?spring cloud 和 Dubbo 需要单独学习.说没有时间?没有精力?要学俩个框架?而Spring C ...

  5. Spring Cloud实战 | 第十一篇:Spring Cloud Gateway 网关实现对RESTful接口权限控制和按钮权限控制

    一. 前言 hi,大家好,这应该是农历年前的关于开源项目 的最后一篇文章了. 有来商城 是基于 Spring Cloud OAuth2 + Spring Cloud Gateway + JWT实现的统 ...

  6. 最全面的改造Zuul网关为Spring Cloud Gateway(包含Zuul核心实现和Spring Cloud Gateway核心实现)

    前言: 最近开发了Zuul网关的实现和Spring Cloud Gateway实现,对比Spring Cloud Gateway发现后者性能好支持场景也丰富.在高并发或者复杂的分布式下,后者限流和自定 ...

  7. 微服务架构spring cloud - gateway网关限流

    1.算法 在高并发的应用中,限流是一个绕不开的话题.限流可以保障我们的 API 服务对所有用户的可用性,也可以防止网络攻击. 一般开发高并发系统常见的限流有:限制总并发数(比如数据库连接池.线程池). ...

  8. 从0开始构建你的api网关--Spring Cloud Gateway网关实战及原理解析

    API 网关 API 网关出现的原因是微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题 ...

  9. api网关揭秘--spring cloud gateway源码解析

    要想了解spring cloud gateway的源码,要熟悉spring webflux,我的上篇文章介绍了spring webflux. 1.gateway 和zuul对比 I am the au ...

随机推荐

  1. AE 向已存在的要素类中添加字段

    风过无痕 原文向已存在的要素类中添加字段 以前,在用AE写程序的时候,为了方便,一般都是直接新建一个MapControl窗体应用程序.这次需要解决的问题用不到窗口,就突发奇想,直接新建了一个Conso ...

  2. Android学习笔记之GridView的使用具体解释

    (1)创建布局代码例如以下: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android&quo ...

  3. Android应用性能优化系列视图篇——隐藏在资源图片中的内存杀手

    图片加载性能优化永远是Android领域中一个无法绕过的话题,经过数年的发展,涌现了很多成熟的图片加载开源库,比如Fresco.Picasso.UIL等等,使得图片加载不再是一个头疼的问题,并且大幅降 ...

  4. POJ 3132 &amp; ZOJ 2822 Sum of Different Primes(dp)

    题目链接: POJ:id=3132">http://poj.org/problem?id=3132 ZOJ:http://acm.zju.edu.cn/onlinejudge/show ...

  5. Swift3.0 功能二 (表情键盘与图文混排)

    随着iOS越来越多表情键盘以及图文混排的需求,本文运用Swift3.0系统的实现其功能以及封装调用方法,写的不好,如有错误望各位提出宝贵意见,多谢 项目源码地址: 相关知识点都有标识 项目源码地址 废 ...

  6. 【27.91%】【codeforces 734E】Anton and Tree

    time limit per test3 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  7. 【solr专题之一】Solr快速入门 分类: H4_SOLR/LUCENCE 2014-07-02 14:59 2403人阅读 评论(0) 收藏

    一.Solr学习相关资料 1.官方材料 (1)快速入门:http://lucene.apache.org/solr/4_9_0/tutorial.html,以自带的example项目快速介绍发Solr ...

  8. Fragment之一:基本原理 分类: H1_ANDROID 2013-11-18 14:15 1642人阅读 评论(0) 收藏

    1.低版本API对Fragment的支持 Fragment必须被加载进Acitivity中,才能呈现.而在低于3.0版本的API中,由于不存在Fragment,因此必须使用support包: (1)对 ...

  9. 用Ajax图片上传、预览、修改图片

    首选图片的上传和下载并不是很难,但要注意细节. 一,给出前端图片上传的html代码 1.图片上传的控件 <img src="/${res}/images/default.png&quo ...

  10. 【codeforces 757B】 Bash's Big Day

    time limit per test2 seconds memory limit per test512 megabytes inputstandard input outputstandard o ...