.NetCore框架Surging系列(九)性能提升-1
.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.cs
HTTP请求到达后立即返回,即在方法AppResolve中app.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 其他注意事项
- ASP.NET Core 使用Swagger不会出现吞吐大幅度下降的问题;
- ASP.NET Core 集成Swagger实现的源码地址为:
https://github.com/domaindrivendev/Swashbuckle.AspNetCore; - Surging的源码和上述项目源码大部分相似
- 第一段中的修改方式,原因未知。Surging实现方式和
Swashbuckle.AspNetCore
几乎相同,问题根源待论证; - 第一段中的修改方式,已论证不会影响Swagger展示、调用等功能(没有测试的很细致)
- 网关RPC调用其他服务,相较于上篇测试效果(
249
)有巨幅提升,提升6-7倍
JMeter策略吞吐
13-1-3000:1373.934364
50-1-3000:1646.365613
100-1-500:1589.370291 - Netty据说能够上W的处理速度,对于1千+Surging还是有很大的提升空间
.NetCore框架Surging系列(九)性能提升-1相关推荐
- .NetCore框架Surging系列(八)性能评估
.NetCore框架Surging系列(一)介绍 .NetCore框架Surging系列(二)HTTP .NetCore框架Surging系列(三)HTTP本地路由发现过程 .NetCore框架Sur ...
- .NetCore框架Surging系列(六)路由发现
.NetCore框架Surging系列(一)介绍 .NetCore框架Surging系列(二)HTTP .NetCore框架Surging系列(三)HTTP本地路由发现过程 .NetCore框架Sur ...
- .NetCore框架Surging系列(一)介绍
.NetCore框架Surging系列(一)介绍 .NetCore框架Surging系列(二)HTTP .NetCore框架Surging系列(三)HTTP本地路由发现过程 这里写自定义目录标题 Su ...
- .NetCore框架Surging系列(四)RPC客户端过程
.NetCore框架Surging系列(一)介绍 .NetCore框架Surging系列(二)HTTP .NetCore框架Surging系列(三)HTTP本地路由发现过程 .NetCore框架Sur ...
- .NetCore框架Surging系列(二)HTTP
.NetCore框架Surging系列(一)介绍 .NetCore框架Surging系列(二)HTTP .NetCore框架Surging系列(三)HTTP本地路由发现过程 Surging系列(二)H ...
- .NetCore框架Surging系列(三)HTTP本地路由发现过程
.NetCore框架Surging系列(一)介绍 .NetCore框架Surging系列(二)HTTP .NetCore框架Surging系列(三)HTTP本地路由发现过程 .NetCore框架Sur ...
- 腾讯微服务框架 Tars 的 Go 性能提升之路
前言 在 4 月 27 日举办的 Gopher China 2019 中,来自腾讯 Tars 团队的核心成员陈明杰进行了一场题为<Tars Go 性能提升之路>的演讲.陈明杰,负责腾讯容器 ...
- 努比亚Z11系统服务器选择,良心!努比亚Z11系列机型系统升级新版本后性能提升明显...
IT之家1月18日消息 随着科技的快速发展,智能手机的更新换代也变得越来越快,刚买的手机没过多久就变成了老款.而在对老款机型的系统更新方面,各家厂商又有着不同的态度.这也使得人们在选择新机的时候更加谨 ...
- AAAI 2020 | 滴滴东北大学提出自动结构化剪枝压缩算法框架,性能提升高达120倍...
点击上方"视学算法",选择"星标" 快速获得最新干货 2020 年 2 月 7 日-2 月 12 日,AAAI 2020 将于美国纽约举办.不久之前,大会官方公 ...
最新文章
- 使用LaTeX排版如何方便地引用多篇参考文献(不使用插件)
- 超越Facebook、谷歌、微软,百度发布全球首个百亿参数对话预训练生成模型PLATO-XL...
- 【推导】计蒜客17119 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 F. Trig Function
- 一文搞懂Raft算法
- Hive权限与HDFS权限分离导致的一些问题
- eclipse左边的项目栏消失的处理方法
- SSH中直接运行php文件
- window操作大全
- 深度强化学习之演员—评论家(Actor—Critic)
- 尚学堂第二章作业题答案
- 信创操作系统--统信UOS桌面版(多媒体软件:图像查看、处理,音频播放、录音机)
- 伦敦银实时行情中的引爆点
- Mysql根据汉字英文字母进行排序
- 有价值项目分享,缺项目可直接搜索(持续更新中)
- 新书推荐:《AI 3.0》
- 智能摄像头在我们的家居生活中,主要包含哪些利弊?
- Ps导航栏的简略讲解(一)
- 家用NAS上安装Domino
- springmvc的工作原理
- Unity 制作签名背景透明化效果,抠字效果