ASP.NET Core – 2300% More Requests Served Per Second
http://www.ageofascent.com/asp-net-core-exeeds-1-15-million-requests-12-6-gbps/
ASP.NET Core – Exceeds 1.15 Million request/s, 12.6 Gbps
Congratulations to ASP.NET Core and .NET Core teams and the Open Source .NET community for quite a milestone in performance!
2300% More Requests Served Per Second
1.15 Million represents a 2300% gain from ASP.NET 4.6!
Why 2 decimal places? I’m not sure why Scott Hunter chose that level of precision, but to me it’s quite significant…
The third decimal place 0.05 Million (e.g. 50,000) is around the total number of requests per second that ASP.NET 4.6 could perform of the same type, on the same hardware – as shown in the below graph:
ASP.NET 4.6 and NodeJs are bottom left. You can see the rapid strides in performance the leaner, more agile and componentized stack has taken (blue Windows, orange Linux) in just a few short months.
ASP.NET Core and .NET Core come with the great advantage of only including the libraries and functions you explicitly want to use in your application rather than bringing in the entire framework. So you only “pay”, programmatically speaking, for what you use.
This ethos is being repeated around Microsoft: Nano Server (Windows Server 2016) is so slim it only has 21 processes running – including your application! In a similar vein, Azure has ‘to the nearest minute’ billing on VMs.
This also allows easy side by side installation of different versions of the .NET framework on the same machine without version collision – or the fear of “What will happen to all the other apps on the same machine when I upgrade the framework for this app”. While .NET has always had a great version compatibility story, the upgrade fear is real.
More than 12.6 Gbps of Throughput
1,150,000+ requests served per second is for small fine-grained requests; but how does it perform for serving larger requests e.g. video, images, js, fonts and css files?
Running on an Azure G4 VM you can see we can hit 12.6 Gbps while only using 36% CPU. This is around the network cap for this type of machine – or we’d be going even faster!
Why is this important?
At a business level it means we can do more with less – which directly effects our bottom line.
I often hear the defeatist argument that performance like this doesn’t matter because (eg) “my database is slow”. That’s like saying I might as well use php in interpreted mode because “my database is slow” (has any one ever said that? I hope not). There is so much more potential, and it’s not just about raw throughput!
Looking at the simplistic case; I’d hope you aren’t serving your assets from a slow database… If you are, maybe you should reexamine your architecture choices or at least revisit what you are doing in the caching space. Everyone caches, even your CPU.
Moving to the cloud with on-demand scaling will also save you money. Or you can spend the same amount of money – but do a lot more.
Customer Delight
If you can leverage it, the question you should ask is whether the hugely improved response times of ASP.NET Core will delight your users.
Steve Desmond in his post Performance is Paramount; saw his page response times from upgrading from Beta8 (Oct 2015) to RC1 (Nov 2015) decrease from 20ms to 4ms.
Bear in mind ASP.NET Core beta8 was already 800% faster than ASP.NET 4.6, which itself was pretty nippy compared to many web frameworks and languages. RC2 is shaping up to be even faster – throw in some caching and you’ll be going back in time!
Microsoft, Open Source & the .NET Foundation
Parts of ASP.NET have been open source awhile and the .NET source has been viewable also, but at the Build 2014 conference Microsoft announced the creation of the .NET Foundation as an independent forum to provide stewardship and to foster open development and collaboration for the growing collection of open source technologies of .NET.
In November 2014, they then announced that .NET Core was Open Source under the .NET Foundation and accepting contributions. It rapidly became cross-platform, running on Windows, Mac and Linux – with Mono and Xamarinproviding even wider platform support – including Android and iOS.
Is open source good for .NET? Has it changed anything? As an example of what is different is myself, Ben Adams at Illyriad Games and Stephen Halter at Microsoft jostling for the top spot on contributions to Kestrel, ASP.NET’s Web Server. This wouldn’t have happened previously!
Contributing to .NET OSS
We like open source because it gives us the best of both worlds: a great diversity of minds from all around the world with wider viewpoints than our own – including specialists in their field – with the ability to contribute if we need changes or fixes to suit our more particular needs.
Generally the community will build (and often improve) upon our contribution; enriching it for better code for all. Much like life; diversity is a good thing!
It also has the fringe bonus that Microsoft checks and reviews our code and – once it gets into a release build – they offer an Enterprise support agreement for it if anything goes wrong
Why Is a High Performance ASP.NET Important to Illyriad Games?
We are building Age Of Ascent – an ultra-MMO; a new scale of game. Born in the cloud, it enables tens of thousands of pilots to be in the same battle; and millions of players to be in the same single-sharded universe – which can be accessed anywhere at any time, on any device.
It has real-time twitch combat, and yet is playable in a browser using HTML5 and WebGL.
So we need a high performance, high throughput, low latency web server. This might be a bit of a niche case and the world of a high speed real-time web may not be applicable to everyone.
However, this is not our only use case, and not the only reason we contribute back to improve ASP.NET and .NET Core’s performance. Age of Ascent is a lot more than a twitch space combat game.
Our other main component is likely more applicable to a wider audience.
Micro-services
Age Of Ascent is composed of multiple independent, dynamically scalable, stateful and stateless micro-services hosted and orchestrated with Service Fabric on Microsoft Azure. Service Fabric allows us to have a high density micro-service cluster which both scales to unexpected demands and grows as we grow.
Our communication mechanism between these micro-services is entirely ASP.NET Core based on David Zhao’s excellentService Fabric ASP.NET Core Hosting example.
This means our entire system’s responsiveness and performance hinges on the performance of ASP.NET Core. This is why it is important; and why we strive for performance. The more we can do; the richer an experience we can create for our players – at a lower cost.
Its important also because the days of Moore’s law performance improvements for single CPU cores are long gone; yet we also need to do more, and we are going big – really big. We need to get smarter, more efficient, cut the unnecessary, and scale across cores, sockets, containers and clusters of machines better.
.NET Core and ASP.NET Core are really shaping up to be the frameworks that we not only want, but also need.
Congratulations to the team!
ASP.NET Core – 2300% More Requests Served Per Second的更多相关文章
- 帅呆了!ASP.NET Core每秒能处理115万个请求
今天看到一篇英文博文 -- ASP.NET Core – 2300% More Requests Served Per Second,被震撼了!ASP.NET Core每秒能处理115万个请求(是的, ...
- 为什么 web 开发人员需要迁移到. NET Core, 并使用 ASP.NET Core MVC 构建 web 和 webservice/API
2018 .NET开发者调查报告: .NET Core 是怎么样的状态,这里我们看到了还有非常多的.net开发人员还在观望,本文给大家一个建议.这仅代表我的个人意见, 我有充分的理由推荐.net 程序 ...
- [转]Publishing and Running ASP.NET Core Applications with IIS
本文转自:https://weblog.west-wind.com/posts/2016/Jun/06/Publishing-and-Running-ASPNET-Core-Applications- ...
- Allow Only Ajax Requests For An Action In ASP.NET Core
ASP.NET Core offers attributes such as [HttpGet] and [HttpPost] that allow you to restrict the HTTP ...
- Ajax跨域问题及解决方案 asp.net core 系列之允许跨越访问(Enable Cross-Origin Requests:CORS) c#中的Cache缓存技术 C#中的Cookie C#串口扫描枪的简单实现 c#Socket服务器与客户端的开发(2)
Ajax跨域问题及解决方案 目录 复现Ajax跨域问题 Ajax跨域介绍 Ajax跨域解决方案 一. 在服务端添加响应头Access-Control-Allow-Origin 二. 使用JSONP ...
- 【原生态跨平台:ASP.NET Core 1.0(非Mono)在 Ubuntu 14.04 服务器上一对一的配置实现-篇幅1】
鸡冻人心的2016,微软高产年. build 2016后 各种干货层出不穷. 1 Win10 集成了bash ,实现了纳德拉的成诺,Microsoft Love Linux!!! 2 跨平台 ,收 ...
- Professional C# 6 and .NET Core 1.0 - 40 ASP.NET Core
本文内容为转载,重新排版以供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处:Professional C# 6 and .NET Core 1.0 - 40 ASP.NET Core --- ...
- 发布Asp.net core到nginx 使用nginx代理
In this guide, we will cover setting up a production-ready ASP.NET environment on an Ubuntu 16.04 Se ...
- Adding Cache-Control headers to Static Files in ASP.NET Core
Thanks to the ASP.NET Core middleware pipeline, it is relatively simple to add additional HTTP heade ...
随机推荐
- nodejs随记04
aes加密 资料 简介; 例子; process 改变工作目录: process.chdir(path); 路径计算 例子 获取调用执行所在文件地址 function getCaller() { tr ...
- Hdu 4081 最小生成树
Qin Shi Huang's National Road System Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3 ...
- 通过TStringList保存csv文件,只要循环.Add表格里面的每行记录进去,保存即可
dlgSave := TSaveDialog.Create(nil); dlgSave.filter := 'CSV文件|*.CSV'; dlgSave.DefaultExt := '*.CSV'; ...
- Slate中绑定动态数据
https://answers.unrealengine.com/questions/232322/slate-blurred-border-shadow.html
- activity 、window与view的关系(下)
在activity的attacth方法中,通过policymanager 的makenewwindow来创建window 而window的具体实现是phonewindow 接下来通过setconten ...
- 说说 js String
首先说说js的字符串,说到字符串这个就和我们原来的C# 代码有区别的就是,js里面没有chart类型.就是说他里面的 “ ”和‘ ’是要表达一样的意思. 其实这个里面就有一个问题了特别实在拼接字符串的 ...
- JAVA_Android APK反编译就这么简单 详解(附图)
在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂亮的动画和精致的布局可能会让你爱不释手,作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用 ...
- MySQL:索引工作原理
索引查找:通过索引键找到索引的叶子节点,再通过叶子节点的标记快速找到表中对应的行数据,再返回指定的列 索引找查是通过索引键定先位到一块局部区域,再开始扫描匹配的数据的. 为什么需要索引(Why is ...
- C++STL 常用 函数 用法
学完c++快一年了,感觉很有遗憾,因为一直没有感觉到c++的强大之处,当时最大的感觉就是这个东西的输入输出比C语言要简单好写. 后来我发现了qt,opencv,opengl,原来,c++好玩的狠. 在 ...
- Ubuntu14.04安装wineqq国际版
一开始,我在Ubuntu14.04下安装的QQ版本是WineQQ2013SP6-20140102-Longene, 但后来发现这个版本QQ在linux下问题很多,比如不能用键盘输入密码,QQ表情 ...