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!

时间: 2024-10-19 13:17:19

ASP.NET Core – 2300% More Requests Served Per Second的相关文章

[转]Publishing and Running ASP.NET Core Applications with IIS

本文转自:https://weblog.west-wind.com/posts/2016/Jun/06/Publishing-and-Running-ASPNET-Core-Applications-with-IIS#DoyouneedIIS? When you build ASP.NET Core applications and you plan on running your applications on IIS you'll find that the way that Core ap

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 headers to your application by using custom middleware. One common use case for this is to add caching headers. Allowing clients and CDNs to cache your con

Professional C# 6 and .NET Core 1.0 - 40 ASP.NET Core

本文内容为转载,重新排版以供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处:Professional C# 6 and .NET Core 1.0 - 40 ASP.NET Core ----------------------------------------------------------------------- What's In This Chapter? Understanding ASP.NET Core 1.0 and Web Technologies Using

ASP.NET Core Building chat room using WebSocket

Creating "Login form" We use here simple form where user can insert his or her preferred nick name for chat. To keep us focused on WebSocket stuff we don't add any logic or checks in this point. Let's add view called InsertUserName.cshtml under

ASP.NET Core CORS 简单使用

CORS 全称"跨域资源共享"(Cross-origin resource sharing). 跨域就是不同域之间进行数据访问,比如 a.sample.com 访问 b.sample.com 中的数据,我们如果不做任何处理的话,就会出现下面的错误: XMLHttpRequest cannot load b.sample.com. No 'Access-Control-Allow-Origin' header is present on the requested resource. O

Building microservices with ASP.NET Core (without MVC)(转)

There are several reasons why it makes sense to build super-lightweight HTTP services (or, despite all the baggage the word brings, “microservices”). I do not need to go into all the operational or architectural benefits of such approach to system de

ASP.NET Core集成微信登录

工具: Visual Studio 2015 update 3 Asp.Net Core 1.0 1 准备工作 申请微信公众平台接口测试帐号,申请网址:(http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login).申请接口测试号无需公众帐号,可以直接体验和测试公众平台所有高级接口. 1.1 配置接口信息 1.2 修改网页授权信息 点击“修改”后在弹出页面填入你的网站域名: 2  新建网站项目 2.1 选择ASP.NET Core

Bare metal APIs with ASP.NET Core MVC(转)

ASP.NET Core MVC now provides a true "one asp.net" framework that can be used for building both APIs and websites. But what if you only want to build an API? Most of the ASP.NET Core MVC tutorials I've seen advise using the Microsoft.AspNetCore.

【翻译】在Visual Studio中使用Asp.Net Core MVC创建你的第一个Web API应用(一)

HTTP is not just for serving up web pages. It's also a powerful platform for building APIs that expose services and data. HTTP is simple, flexible, and ubiquitous. Almost any platform that you can think of has an HTTP library, so HTTP services can re