.NetCore框架Surging系列(一)介绍
.NetCore框架Surging系列(二)HTTP
.NetCore框架Surging系列(三)HTTP本地路由发现过程
.NetCore框架Surging系列(四)RPC客户端过程
.NetCore框架Surging系列(五)路由注册
.NetCore框架Surging系列(六)路由发现
.NetCore框架Surging系列(七)路由监听
.NetCore框架Surging系列(八)性能评估

.NetCore框架Surging系列(九)性能提升

  • 1 效果
    • 1.1 测试数据-修改前
    • 1.2 测试数据-修改后
    • 1.3 测试方式
  • 2 优化Swagger中间件
    • 2.1 修改方式一
    • 2.2 修改方式二
  • 3 其他注意事项

在上一篇中.NetCore框架Surging系列(八)性能评估,提高Surging的吞吐量与ASP.NET Core相差较大,支持不了业务,故排查项目问题。问题之一和处理方式如下

1 效果

先看修改过的效果,修改后吞吐量至少提高1000%(十倍)

1.1 测试数据-修改前

14-1-3000策略的测试结果

Label 样本 平均值 最小值 最大值 标准偏差 异常% 吞吐量 接收 KB/sec 发送 KB/dec 平均字节数
测试Surging-Kestrel 42000 10 1 60 8.630028438 0 1259.634706 174.6759065 228.8008353 142

100-1-4000 (处理太慢-提前终止了)

Label 样本 平均值 最小值 最大值 标准偏差 异常% 吞吐量 接收 KB/sec 发送 KB/dec 平均字节数
测试Surging-Kestrel 3744 426 4 2288 306.2527968 0 225.4878343 33.03044447 44.92140448 150

1.2 测试数据-修改后

14-1-3000策略的测试结果

Label 样本 平均值 最小值 最大值 标准偏差 异常% 吞吐量 接收 KB/sec 发送 KB/dec 平均字节数
测试Surging-Kestrel 42000 2 0 36 2.2165377486679176 0.0 5332.6561706449975 781.1508062468258 2734.02782186389 150.0

100-1-3000策略的测试结果

Label 样本 平均值 最小值 最大值 标准偏差 异常% 吞吐量 接收 KB/sec 发送 KB/dec 平均字节数
测试Surging-Kestrel 300000 7 0 183 9.078329834403585 0.0 12555.453251862393 1839.1777224407801 6437.122028542731 150.0

100-1-4000策略吞吐:13488.905375328792(增幅不明显)
注销掉所有中间件:22315.2022315202

1.3 测试方式

KestrelHttpMessageListener.csHTTP请求到达后立即返回,即在方法AppResolveapp.Run(async (context) =>之后以下代码:

private void AppResolve(IApplicationBuilder app)
{app.UseStaticFiles();app.UseMvc();_moduleProvider.Initialize(new ApplicationInitializationContext(app, _moduleProvider.Modules,_moduleProvider.VirtualPaths,AppConfig.Configuration));app.Run(async (context) =>{//测试代码 开始if (context.Request.Query.ContainsKey("httpkestrel")){var text = "httpkestrel";var data = Encoding.UTF8.GetBytes(text);var contentLength = data.Length;context.Response.Headers.Add("Content-Type", "application/json;charset=utf-8");context.Response.Headers.Add("Content-Length", contentLength.ToString());await context.Response.WriteAsync(text);return;}//测试代码 结束//...

2 优化Swagger中间件

2.1 修改方式一

工程:Surging.Core.Swagger
文件:SwaggerMiddleware.cs

修改后的部分源码

//...public class SwaggerMiddleware{private readonly RequestDelegate _next;private readonly JsonSerializer _swaggerSerializer;private readonly SwaggerOptions _options;private readonly TemplateMatcher _requestMatcher;private readonly ISwaggerProvider _swaggerProvider;public SwaggerMiddleware(RequestDelegate next,ISwaggerProvider swaggerProvider,IOptions<MvcJsonOptions> mvcJsonOptionsAccessor,IOptions<SwaggerOptions> optionsAccessor): this(next, swaggerProvider, mvcJsonOptionsAccessor, optionsAccessor.Value){ }public SwaggerMiddleware(RequestDelegate next, ISwaggerProvider swaggerProvider,IOptions<MvcJsonOptions> mvcJsonOptions,SwaggerOptions options){_next = next;_swaggerProvider = swaggerProvider;_swaggerSerializer = SwaggerSerializerFactory.Create(mvcJsonOptions);_options = options ?? new SwaggerOptions();_requestMatcher = new TemplateMatcher(TemplateParser.Parse(options.RouteTemplate), new RouteValueDictionary());}public async Task Invoke(HttpContext httpContext){//...}//...}

2.2 修改方式二

工程:Surging.Core.Swagger
文件:SwaggerGenServiceCollectionExtensions.cs

// services.AddTransient<ISwaggerProvider, SwaggerGenerator>();
//改为
services.AddSingleton<ISwaggerProvider, SwaggerGenerator>();

3 其他注意事项

  1. ASP.NET Core 使用Swagger不会出现吞吐大幅度下降的问题;
  2. ASP.NET Core 集成Swagger实现的源码地址为:
    https://github.com/domaindrivendev/Swashbuckle.AspNetCore;
  3. Surging的源码和上述项目源码大部分相似
  4. 第一段中的修改方式,原因未知。Surging实现方式和Swashbuckle.AspNetCore几乎相同,问题根源待论证;
  5. 第一段中的修改方式,已论证不会影响Swagger展示、调用等功能(没有测试的很细致)
  6. 网关RPC调用其他服务,相较于上篇测试效果(249)有巨幅提升,提升6-7倍
    JMeter策略吞吐
    13-1-3000:1373.934364
    50-1-3000:1646.365613
    100-1-500:1589.370291
  7. Netty据说能够上W的处理速度,对于1千+Surging还是有很大的提升空间

.NetCore框架Surging系列(九)性能提升-1相关推荐

  1. .NetCore框架Surging系列(八)性能评估

    .NetCore框架Surging系列(一)介绍 .NetCore框架Surging系列(二)HTTP .NetCore框架Surging系列(三)HTTP本地路由发现过程 .NetCore框架Sur ...

  2. .NetCore框架Surging系列(六)路由发现

    .NetCore框架Surging系列(一)介绍 .NetCore框架Surging系列(二)HTTP .NetCore框架Surging系列(三)HTTP本地路由发现过程 .NetCore框架Sur ...

  3. .NetCore框架Surging系列(一)介绍

    .NetCore框架Surging系列(一)介绍 .NetCore框架Surging系列(二)HTTP .NetCore框架Surging系列(三)HTTP本地路由发现过程 这里写自定义目录标题 Su ...

  4. .NetCore框架Surging系列(四)RPC客户端过程

    .NetCore框架Surging系列(一)介绍 .NetCore框架Surging系列(二)HTTP .NetCore框架Surging系列(三)HTTP本地路由发现过程 .NetCore框架Sur ...

  5. .NetCore框架Surging系列(二)HTTP

    .NetCore框架Surging系列(一)介绍 .NetCore框架Surging系列(二)HTTP .NetCore框架Surging系列(三)HTTP本地路由发现过程 Surging系列(二)H ...

  6. .NetCore框架Surging系列(三)HTTP本地路由发现过程

    .NetCore框架Surging系列(一)介绍 .NetCore框架Surging系列(二)HTTP .NetCore框架Surging系列(三)HTTP本地路由发现过程 .NetCore框架Sur ...

  7. 腾讯微服务框架 Tars 的 Go 性能提升之路

    前言 在 4 月 27 日举办的 Gopher China 2019 中,来自腾讯 Tars 团队的核心成员陈明杰进行了一场题为<Tars Go 性能提升之路>的演讲.陈明杰,负责腾讯容器 ...

  8. 努比亚Z11系统服务器选择,良心!努比亚Z11系列机型系统升级新版本后性能提升明显...

    IT之家1月18日消息 随着科技的快速发展,智能手机的更新换代也变得越来越快,刚买的手机没过多久就变成了老款.而在对老款机型的系统更新方面,各家厂商又有着不同的态度.这也使得人们在选择新机的时候更加谨 ...

  9. AAAI 2020 | 滴滴东北大学提出自动结构化剪枝压缩算法框架,性能提升高达120倍...

    点击上方"视学算法",选择"星标" 快速获得最新干货 2020 年 2 月 7 日-2 月 12 日,AAAI 2020 将于美国纽约举办.不久之前,大会官方公 ...

最新文章

  1. 使用LaTeX排版如何方便地引用多篇参考文献(不使用插件)
  2. 超越Facebook、谷歌、微软,百度发布全球首个百亿参数对话预训练生成模型PLATO-XL...
  3. 【推导】计蒜客17119 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 F. Trig Function
  4. 一文搞懂Raft算法
  5. Hive权限与HDFS权限分离导致的一些问题
  6. eclipse左边的项目栏消失的处理方法
  7. SSH中直接运行php文件
  8. window操作大全
  9. 深度强化学习之演员—评论家(Actor—Critic)
  10. 尚学堂第二章作业题答案
  11. 信创操作系统--统信UOS桌面版(多媒体软件:图像查看、处理,音频播放、录音机)
  12. 伦敦银实时行情中的引爆点
  13. Mysql根据汉字英文字母进行排序
  14. 有价值项目分享,缺项目可直接搜索(持续更新中)
  15. 新书推荐:《AI 3.0》
  16. 智能摄像头在我们的家居生活中,主要包含哪些利弊?
  17. Ps导航栏的简略讲解(一)
  18. 家用NAS上安装Domino
  19. springmvc的工作原理
  20. Unity 制作签名背景透明化效果,抠字效果

热门文章

  1. Ai如何使用路径快速制作圆点从大到小效果,有什么好的方法吗
  2. 学Python还是Java, 7张漫画带你全面分析!
  3. 近邻的距离度量表示法
  4. 使用Okhttp上传图片
  5. JS组件系列——KnockoutJS用法
  6. 程序员:还有这样的代码,扎心了老铁!
  7. 35岁只是普通程序员,还有救吗?答案扎心了,老铁!
  8. 关于整除和取余的理解
  9. java guns框架_guns框架试用笔记
  10. 大数据分析技术在新型智慧能源建设中的应用